kanbanworkflowstimelinescrumrubyroadmapproject-planningproject-managementopenprojectangularissue-trackerifcgantt-chartganttbug-trackerboardsbcf
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
11 KiB
302 lines
11 KiB
#-- encoding: UTF-8
|
|
#-- copyright
|
|
# OpenProject is a project management system.
|
|
# Copyright (C) 2012-2014 the OpenProject Foundation (OPF)
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License version 3.
|
|
#
|
|
# OpenProject is a fork of ChiliProject, which is a fork of Redmine. The copyright follows:
|
|
# Copyright (C) 2006-2013 Jean-Philippe Lang
|
|
# Copyright (C) 2010-2013 the ChiliProject Team
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
#
|
|
# See doc/COPYRIGHT.rdoc for more details.
|
|
#++
|
|
|
|
When (/^I click on the Planning Element with name "(.*?)"$/) do |planning_element_subject|
|
|
first('a', text: planning_element_subject).click
|
|
end
|
|
|
|
When (/^I click on the Edit Link$/) do
|
|
click_link("Update")
|
|
end
|
|
|
|
When (/^I click on the Save Link$/) do
|
|
click_link("Save")
|
|
end
|
|
|
|
When (/^I hide empty projects for the timeline "([^"]*?)" of the project called "([^"]*?)"$/) do |timeline_name, project_name|
|
|
steps %Q{
|
|
When I go to the edit page of the timeline "#{timeline_name}" of the project called "#{project_name}"
|
|
}
|
|
|
|
page.should have_selector("#timeline_options_exclude_empty", :visible => false)
|
|
|
|
page.execute_script("jQuery('#timeline_options_exclude_empty').prop('checked', true)")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I make the planning element "([^"]*?)" vertical for the timeline "([^"]*?)" of the project called "([^"]*?)"$/) do |planning_element_subject, timeline_name, project_name|
|
|
steps %Q{
|
|
When I go to the edit page of the timeline "#{timeline_name}" of the project called "#{project_name}"
|
|
}
|
|
planning_element = PlanningElement.find_by_subject(planning_element_subject)
|
|
|
|
page.should have_selector("#timeline_options_vertical_planning_elements", :visible => false)
|
|
|
|
page.execute_script("jQuery('#timeline_options_vertical_planning_elements').val('#{planning_element.id}')")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When(/^I filter for work packages with custom boolean field "(.*?)" set to "(.*?)"$/) do |field_name, value|
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
custom_field = InstanceFinder.find(WorkPackageCustomField, field_name)
|
|
|
|
page.execute_script("jQuery('#timeline_options_custom_fields_#{custom_field.id}').val('#{value}')")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When(/^I filter for work packages with custom list field "(.*?)" set to "(.*?)"$/) do |field_name, value|
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
custom_field = InstanceFinder.find(WorkPackageCustomField, field_name)
|
|
|
|
page.execute_script("jQuery('#timeline_options_custom_fields_#{custom_field.id}_').val('#{value}')")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I edit the settings of the current timeline$/) do
|
|
timeline_name = @timeline_name
|
|
project_name = @project.name
|
|
steps %Q{
|
|
When I go to the edit page of the timeline "#{timeline_name}" of the project called "#{project_name}"
|
|
}
|
|
end
|
|
|
|
When (/^I set the first level grouping criteria to "(.*?)" for the timeline "(.*?)" of the project called "(.*?)"$/) do |grouping_project_name, timeline_name, project_name|
|
|
steps %Q{
|
|
When I go to the edit page of the timeline "#{timeline_name}" of the project called "#{project_name}"
|
|
}
|
|
grouping_project = Project.find_by_name(grouping_project_name)
|
|
|
|
page.should have_selector("#timeline_options_grouping_one_enabled", :visible => false)
|
|
|
|
page.execute_script("jQuery('#timeline_options_grouping_one_enabled').prop('checked', true)")
|
|
page.execute_script("jQuery('#timeline_options_grouping_one_selection').val('#{grouping_project.id}')")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I enable the hide other group option$/) do
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
page.should have_selector("#timeline_options_hide_other_group")
|
|
|
|
page.execute_script("jQuery('#timeline_options_hide_other_group').prop('checked', true)")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I show only work packages which have the responsible "(.*?)"$/) do |responsible|
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
responsible = User.find_by_login(responsible)
|
|
page.execute_script(<<-JavaScript)
|
|
jQuery('#timeline_options_planning_element_responsibles').val('#{responsible.id}')
|
|
jQuery('#content form').submit()
|
|
JavaScript
|
|
end
|
|
|
|
When (/^I show only work packages which have no responsible$/) do
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
page.execute_script(<<-JavaScript)
|
|
jQuery('#timeline_options_planning_element_responsibles').val('-1')
|
|
jQuery('#content form').submit()
|
|
JavaScript
|
|
end
|
|
|
|
When (/^I show only work packages which have the type "(.*?)"$/) do |type|
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
type = ::Type.find_by_name(type)
|
|
page.execute_script(<<-JavaScript)
|
|
jQuery('#timeline_options_planning_element_types').val('#{type.id}')
|
|
jQuery('#content form').submit()
|
|
JavaScript
|
|
end
|
|
|
|
When (/^I show only projects which have responsible set to "(.*?)"$/) do |responsible|
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
page.should have_selector("#timeline_options_project_responsibles", :visible => false)
|
|
|
|
responsible = User.find_by_login(responsible)
|
|
page.execute_script("jQuery('#timeline_options_project_responsibles').val('#{responsible.id}')")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I show only projects which have a planning element which lies between "(.*?)" and "(.*?)" and has the type "(.*?)"$/) do |start_date, due_date, type|
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
page.should have_selector("#timeline_options_planning_element_time_types", :visible => false)
|
|
|
|
type = ::Type.find_by_name(type)
|
|
page.execute_script("jQuery('#timeline_options_planning_element_time_types').val('#{type.id}')")
|
|
page.execute_script("jQuery('#timeline_options_planning_element_time_absolute').prop('checked', true)")
|
|
page.execute_script("jQuery('#timeline_options_planning_element_time_absolute_one').val('#{start_date}')")
|
|
page.execute_script("jQuery('#timeline_options_planning_element_time_absolute_two').val('#{due_date}')")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I set the second level grouping criteria to "(.*?)" for the timeline "(.*?)" of the project called "(.*?)"$/) do |project_type_name, timeline_name, project_name|
|
|
steps %Q{
|
|
When I go to the edit page of the timeline "#{timeline_name}" of the project called "#{project_name}"
|
|
}
|
|
project_type = ProjectType.find_by_name(project_type_name)
|
|
|
|
page.should have_selector("#timeline_options_grouping_two_enabled", :visible => false)
|
|
|
|
page.execute_script("jQuery('#timeline_options_grouping_two_enabled').prop('checked', true)")
|
|
page.execute_script("jQuery('#timeline_options_grouping_two_selection').val('#{project_type.id}')")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
When (/^I set the columns shown in the timeline to:$/) do |table|
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
result = []
|
|
table.raw.each do |_perm|
|
|
perm = _perm.first
|
|
unless perm.blank?
|
|
result.push(perm)
|
|
end
|
|
end
|
|
results = result.join(",");
|
|
|
|
#we need to wait for our submit form to load ...
|
|
page.should have_selector("#timeline_options_columns_", :visible => false)
|
|
|
|
page.execute_script("jQuery('#timeline_options_columns_').val('#{results}')")
|
|
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I set the first level grouping criteria to:$/) do |table|
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
result = []
|
|
table.raw.each do |_perm|
|
|
perm = _perm.first
|
|
unless perm.blank?
|
|
result.push(Project.find_by_name(perm).id)
|
|
end
|
|
end
|
|
results = result.join(",");
|
|
|
|
#we need to wait for our submit form to load ...
|
|
page.should have_selector("#timeline_options_grouping_one_enabled", :visible => false)
|
|
|
|
page.execute_script("jQuery('#timeline_options_grouping_one_enabled').prop('checked', true)")
|
|
page.execute_script("jQuery('#timeline_options_grouping_one_selection').val('#{results}')")
|
|
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I set the sortation of the first level grouping criteria to explicit order$/) do
|
|
steps %Q{
|
|
When I edit the settings of the current timeline
|
|
}
|
|
|
|
page.should have_selector("#timeline_options_grouping_one_sort", :visible => false)
|
|
|
|
page.execute_script("jQuery('#timeline_options_grouping_one_sort').val('1')")
|
|
page.execute_script("jQuery('#content form').submit()")
|
|
end
|
|
|
|
When (/^I click on the Restore Link$/) do
|
|
page.execute_script("jQuery('.input-as-link').click()")
|
|
end
|
|
|
|
When (/^I wait (\d+) seconds?$/) do |seconds|
|
|
sleep seconds.to_i
|
|
end
|
|
|
|
When (/^I set duedate to "([^"]*)"$/) do |value|
|
|
fill_in 'planning_element_due_date', :with => value
|
|
end
|
|
|
|
When (/^I wait for timeline to load table$/) do
|
|
page.should have_selector('.tl-left-main')
|
|
end
|
|
|
|
When (/^I move "([^"]*)" to the top$/) do |name|
|
|
cell = find(:css, "table.list td", :text => Regexp.new("^#{name}$"))
|
|
row = cell.find(:xpath, './ancestor::tr')
|
|
link = row.find_link('Move to top')
|
|
link.click
|
|
end
|
|
|
|
When (/^I move "([^"]*)" to the bottom$/) do |name|
|
|
cell = find(:css, "table.list td", :text => Regexp.new("^#{name}$"))
|
|
row = cell.find(:xpath, './ancestor::tr')
|
|
link = row.find_link('Move to bottom')
|
|
link.click
|
|
end
|
|
|
|
When (/^I move "([^"]*)" up by one$/) do |name|
|
|
cell = find(:css, "table.list td", :text => Regexp.new("^#{name}$"))
|
|
row = cell.find(:xpath, './ancestor::tr')
|
|
link = row.find_link('Move up')
|
|
link.click
|
|
end
|
|
|
|
When (/^I move "([^"]*)" down by one$/) do |name|
|
|
cell = find(:css, "table.list td", :text => Regexp.new("^#{name}$"))
|
|
row = cell.find(:xpath, './ancestor::tr')
|
|
link = row.find_link('Move down')
|
|
link.click
|
|
end
|
|
|
|
When (/^I fill in a wiki macro for timeline "([^"]*)" for "([^"]*)"$/) do |timeline_name, container|
|
|
timeline = Timeline.find_by_name(timeline_name)
|
|
|
|
text = "{{timeline(#{timeline.id})}}"
|
|
step %Q{I fill in "#{text}" for "#{container}"}
|
|
end
|
|
|
|
When (/^(.*) for the color "([^"]*)"$/) do |step_name, color_name|
|
|
color = PlanningElementTypeColor.find_by_name(color_name)
|
|
|
|
step %Q{#{step_name} within "#color-#{color.id} td:first-child"}
|
|
end
|
|
|