OSDN Git Service

refactor test code
[quickedit/quick_edit.git] / test / selenium / pages / issues.rb
1 #coding: utf-8
2
3 module QuickEdit
4   module Test
5     module Pages
6       class IssuesPage < Page
7         def initialize(driver, base_url, project)
8           super(driver, base_url, project)
9
10           #redmine-2.3: controller-issues action-index
11           #redmine-2.6: project-projectname controller-issues action-index
12           find_element :css, "body[class~='controller-issues'][class~='action-index']"
13         end
14
15         def self.open(driver, base_url, project)
16           driver.get "#{base_url}/projects/#{project}/issues/"
17           IssuesPage.new driver, base_url, project
18         end
19
20         def issue_ids_on_page
21           issue_elements = find_elements(:css, "tr.issue")
22           issue_ids = issue_elements.map do |e|
23             #p "find:" + e.attribute("id")
24             /issue-(\d+)/ =~ e.attribute("id")
25             Regexp.last_match(1)
26           end
27           issue_ids
28         end
29
30         def open_new_page()
31           IssueNewPage.open @driver, @base_url, @project
32         end
33
34         def open_context(issue_id)
35           wait
36
37           element = find_element(:css, "#issue-#{issue_id} > td.subject")
38           action.move_to(element).context_click(element).perform
39
40           QuickEditPage.new @driver, @base_url, @project, self
41         end
42
43         def find_quick_edit_menu_for_core_field(issue_id, attribute_name)
44           menu_selector = build_menu_selector_for_core_field(attribute_name)
45
46           open_context issue_id
47
48           menu_element = find_element(:id, "quick_edit_context")
49           menu_item_element = find_element(:css, menu_selector)
50           menu_item_element
51         end
52
53         def find_quick_edit_menu_for_custom_field(issue_id, custom_field_id)
54           menu_selector = build_menu_selector_for_custom_field(custom_field_id)
55
56           open_context issue_id
57
58           menu_element = find_element(:id, "quick_edit_context")
59           menu_item_element = find_element(:css, menu_selector)
60           menu_item_element
61         end
62
63         def quick_edit(issue_id, menu_selector, new_value)
64           open_context issue_id
65
66           menu_element = find_element(:id, "quick_edit_context")
67           menu_item_element = find_element(:css, menu_selector)
68           action.move_to(menu_element).click(menu_item_element).perform
69
70           input_text :id, "new_value", new_value
71
72           buttons = find_elements(:css, "button > span")
73           submit_button = buttons.select {|button| button.text =~ /Submit/}
74           submit_button.first.click
75         end
76
77         def quick_edit_clear(issue_id, menu_selector)
78           open_context issue_id
79
80           menu_element = find_element(:id, "quick_edit_context")
81           menu_item_element = find_element(:css, menu_selector)
82           action.move_to(menu_element).click(menu_item_element).perform
83
84           find_element(:css, '#quick_edit_input_dialog #clear').click
85
86           buttons = find_elements(:css, "button > span")
87           submit_button = buttons.select {|button| button.text =~ /Submit/}
88           submit_button.first.click
89         end
90
91         def quick_edit_for_core_field(issue_id, attribute_name, new_value, desire_alerting = false)
92           menu_selector = "#quick_edit_context_#{attribute_name} > a"
93
94           quick_edit(issue_id, menu_selector, new_value)
95
96           self.class.open @driver, @base_url, @project unless desire_alerting
97         end
98
99         def quick_edit_clear_for_core_field(issue_id, attribute_name)
100           menu_selector = build_menu_selector_for_core_field(attribute_name)
101
102           quick_edit_clear(issue_id, menu_selector)
103
104           self.class.open @driver, @base_url, @project
105         end
106
107         def quick_edit_clear_for_custom_field(issue_id, custom_field_id)
108           menu_selector = build_menu_selector_for_custom_field(custom_field_id)
109
110           quick_edit_clear(issue_id, menu_selector)
111
112           self.class.open @driver, @base_url, @project
113         end
114
115         def build_menu_selector_for_core_field(attribute_name)
116           "#quick_edit_context_#{attribute_name} > a"
117         end
118
119         def build_menu_selector_for_custom_field(custom_field_id)
120           "#quick_edit_context_custom_field_values_#{custom_field_id} > a"
121         end
122
123         def quick_edit_for_custom_field(issue_id, custom_field_id, new_value, desire_alerting = false)
124           menu_selector = build_menu_selector_for_custom_field(custom_field_id)
125
126           open_context issue_id
127
128           menu_element = find_element(:id, "quick_edit_context")
129           menu_item_element = find_element(:css, menu_selector)
130
131           action.move_to(menu_element).click(menu_item_element).perform
132
133           input_text :id, "new_value", new_value
134
135           buttons = find_elements(:css, "button > span")
136           submit_button = buttons.select {|button| button.text =~ /Submit/}
137           submit_button.first.click
138
139           self.class.open @driver, @base_url, @project unless desire_alerting
140         end
141
142         def cancel_quick_edit
143           button_elements = find_elements(:css, 'span.ui-button-text')
144           cancel_button = button_elements.select do |button_element|
145             button_element.text == 'Cancel'
146           end
147           cancel_button.first.click
148         end
149       end
150     end
151   end
152 end
153