Revision | cc4235beb74cdf0114b7bae6b9ddd53ca87188cd (tree) |
---|---|
Time | 2015-07-24 00:03:29 |
Author | akira saito <akrst@user...> |
Commiter | akira saito |
add replace test
@@ -8,7 +8,7 @@ | ||
8 | 8 | <% @replaced_issues.each do |issue| %> |
9 | 9 | <% cycle_class = cycle(:odd, :even) %> |
10 | 10 | <tr class="issue"> |
11 | - <td class="id <%= cycle_class %>"><%= issue[:id] %></td><td class="<%= cycle_class %>"><%= issue[:old] %></td><td class="<%= cycle_class %>"><%= issue[:new] %></td> | |
11 | + <td class="id <%= cycle_class %>"><%= issue[:id] %></td><td class="old <%= cycle_class %>"><%= issue[:old] %></td><td class="new <%= cycle_class %>"><%= issue[:new] %></td> | |
12 | 12 | </tr> |
13 | 13 | <% end %> |
14 | 14 | </tbody> |
@@ -48,6 +48,51 @@ module QuickEdit | ||
48 | 48 | @before_page.class.open @driver, @base_url, @project |
49 | 49 | end |
50 | 50 | |
51 | + def preview_replace(issue_id, menu_selector, find_value, replace_value, desire_alerting = false) | |
52 | + menu_element = find_element(:id, "quick_edit_context") | |
53 | + menu_item_element = find_element(:css, menu_selector) | |
54 | + action.move_to(menu_element).click(menu_item_element).perform | |
55 | + | |
56 | + click :id, :replace_switcher | |
57 | + | |
58 | + input_text :id, :find_value, find_value | |
59 | + input_text :id, :replace_value, replace_value | |
60 | + | |
61 | + buttons = find_elements(:css, "button > span") | |
62 | + submit_button = buttons.select {|button| button.text =~ /Preview/} | |
63 | + submit_button.first.click | |
64 | + | |
65 | + @before_page.class.open @driver, @base_url, @project unless desire_alerting | |
66 | + end | |
67 | + | |
68 | + def get_replace_preview() | |
69 | + rows = find_elements(:css, "preview_area tbody tr") | |
70 | + | |
71 | + previews = rows.map do |row| | |
72 | + id = row.find_element(:class, ".id").text | |
73 | + old = row.find_element(:class, ".old").text | |
74 | + new = row.find_element(:class, ".new").text | |
75 | + { :id => id, :old => old, :new => new } | |
76 | + end | |
77 | + end | |
78 | + | |
79 | + def replace(issue_id, menu_selector, find_value, replace_value, desire_alerting = false) | |
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 | + click :id, :replace_switcher | |
85 | + | |
86 | + input_text :id, :find_value, find_value | |
87 | + input_text :id, :replace_value, replace_value | |
88 | + | |
89 | + buttons = find_elements(:css, "button > span") | |
90 | + submit_button = buttons.select {|button| button.text =~ /Submit/} | |
91 | + submit_button.first.click | |
92 | + | |
93 | + @before_page.class.open @driver, @base_url, @project unless desire_alerting | |
94 | + end | |
95 | + | |
51 | 96 | def cancel_quick_edit |
52 | 97 | button_elements = find_elements(:css, 'span.ui-button-text') |
53 | 98 | cancel_buttons = button_elements.select do |button_element| |
@@ -0,0 +1,124 @@ | ||
1 | +# coding: utf-8 | |
2 | + | |
3 | +require "json" | |
4 | +require "selenium-webdriver" | |
5 | +$: << File.expand_path('../../', __FILE__) | |
6 | +require 'spec_helper' | |
7 | +Dir[File.dirname(__FILE__) + '/pages/page.rb'].each {|file| require file } | |
8 | +Dir[File.dirname(__FILE__) + '/pages/*.rb'].each {|file| require file } | |
9 | +require "uri" | |
10 | +require "net/http" | |
11 | +include RSpec::Expectations | |
12 | + | |
13 | +describe "Replace core field" do | |
14 | + | |
15 | + before(:all) do | |
16 | + profile = Selenium::WebDriver::Firefox::Profile.new | |
17 | + @driver = Selenium::WebDriver.for :firefox, :profile => profile | |
18 | + @driver.manage.window.maximize | |
19 | + @base_url = "http://localhost:3000/" | |
20 | + @driver.manage.timeouts.implicit_wait = 10 | |
21 | + @verification_errors = [] | |
22 | + @default_project = "test" | |
23 | + @default_user = "admin" | |
24 | + @default_password = "dummy" | |
25 | + | |
26 | + # open issues page | |
27 | + start_page = QuickEdit::Test::Pages::StartPage.new(@driver, @base_url, @default_project) | |
28 | + first_page = start_page.login @default_user, @default_password | |
29 | + @issues_page = first_page.open_issues | |
30 | + | |
31 | + # create issue for test | |
32 | + issue_new_page = @issues_page.open_new_page() | |
33 | + issue_show_page = issue_new_page.create(:bug, 'first subject') | |
34 | + @issue_id = issue_show_page.id | |
35 | + | |
36 | + end | |
37 | + | |
38 | + before(:each) do | |
39 | + @issues_page = @issues_page.open_issues | |
40 | + end | |
41 | + | |
42 | + after(:each) do | |
43 | + expect(@verification_errors).to match_array [] | |
44 | + end | |
45 | + | |
46 | + after(:all) do | |
47 | + @driver.quit | |
48 | + end | |
49 | + | |
50 | + it "subject can replace" do | |
51 | + new_value = 'initial text' | |
52 | + expect( edit(@issue_id, :subject, new_value) ).to eq new_value | |
53 | + | |
54 | + new_value = 'new text' | |
55 | + find = 'initial' | |
56 | + replace = 'new' | |
57 | + expect( replace(@issue_id, :subject, find, replace) ).to eq new_value | |
58 | + | |
59 | + find = '' | |
60 | + replace = '' | |
61 | + expect( replace_with_alert(@issue_id, :subject, find, replace) ).to eq new_value | |
62 | + end | |
63 | + | |
64 | + def edit(issue_id, attribute_name, new_value) | |
65 | + quick_edit = @issues_page.open_context(issue_id) | |
66 | + menu_selector = quick_edit.menu_selector(attribute_name) | |
67 | + @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value) | |
68 | + | |
69 | + attribute_name = :parent if attribute_name.to_sym == :parent_issue_id | |
70 | + field_value = get_core_field(issue_id, attribute_name) | |
71 | + | |
72 | + if attribute_name == :parent | |
73 | + field_value["id"] | |
74 | + else | |
75 | + field_value | |
76 | + end | |
77 | + end | |
78 | + | |
79 | + def replace(issue_id, attribute_name, find, replace) | |
80 | + quick_edit = @issues_page.open_context(issue_id) | |
81 | + menu_selector = quick_edit.menu_selector(attribute_name) | |
82 | + @issues_page = quick_edit.replace(issue_id, menu_selector, find, replace) | |
83 | + | |
84 | + attribute_name = :parent if attribute_name.to_sym == :parent_issue_id | |
85 | + field_value = get_core_field(issue_id, attribute_name) | |
86 | + | |
87 | + if attribute_name == :parent | |
88 | + field_value["id"] | |
89 | + else | |
90 | + field_value | |
91 | + end | |
92 | + end | |
93 | + | |
94 | + def replace_with_alert(issue_id, attribute_name, find, replace) | |
95 | + quick_edit = @issues_page.open_context(issue_id) | |
96 | + menu_selector = quick_edit.menu_selector(attribute_name) | |
97 | + quick_edit.replace(issue_id, menu_selector, find, replace, true) | |
98 | + quick_edit.alert.accept | |
99 | + quick_edit.cancel_quick_edit | |
100 | + | |
101 | + attribute_name = :parent if attribute_name.to_sym == :parent_issue_id | |
102 | + field_value = get_core_field(issue_id, attribute_name) | |
103 | + | |
104 | + if attribute_name == :parent | |
105 | + field_value["id"] | |
106 | + else | |
107 | + field_value | |
108 | + end | |
109 | + end | |
110 | + | |
111 | + def get_core_field(issue_id, attribute_name) | |
112 | + json = get_json("issues/#{issue_id}.json") | |
113 | + | |
114 | + json["issue"][attribute_name.to_s] | |
115 | + end | |
116 | + | |
117 | + def get_json(path) | |
118 | + uri = URI::parse "#{@base_url}#{path}" | |
119 | + res = Net::HTTP::get_response(uri) | |
120 | + JSON.parse(res.body) | |
121 | + end | |
122 | + | |
123 | + | |
124 | +end |