OSDN Git Service

test for add note. refs #35392
[quickedit/quick_edit.git] / test / selenium / edit_core_field.rb
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 Dir[File.dirname(__FILE__) + '/helpers/*.rb'].each {|file| require file }
10 require "uri"
11 require "net/http"
12 include RSpec::Expectations
13
14 describe "Edit core field" do
15
16   before(:all) do
17     profile = Selenium::WebDriver::Firefox::Profile.new
18     @driver = Selenium::WebDriver.for :firefox, :profile => profile
19     @driver.manage.window.maximize
20     @base_url = "http://localhost:3000/"
21     @driver.manage.timeouts.implicit_wait = 10
22     @verification_errors = []
23     @default_project = "test"
24     @default_user = "admin"
25     @default_password = "dummy"
26
27     # open issues page
28     start_page = QuickEdit::Test::Pages::StartPage.new(@driver, @base_url, @default_project)
29     first_page = start_page.login @default_user, @default_password
30     @issues_page = first_page.open_issues
31
32     # create issue for test
33     issue_new_page = @issues_page.open_new_page()
34     issue_show_page = issue_new_page.create(:bug, 'first subject')
35     @issue_id = issue_show_page.id
36     
37   end
38
39   before(:each) do
40     @issues_page = @issues_page.open_issues
41   end
42   
43   after(:each) do
44     expect(@verification_errors).to match_array []
45   end
46   
47   after(:all) do
48     @driver.quit
49   end
50   
51   it "subject can edit" do
52     new_value = 'dummy'
53     expect( edit(@issue_id, :subject, new_value) ).to eq new_value
54
55     new_value = 'subject: new_value'
56     expect( edit(@issue_id, :subject, new_value) ).to eq new_value
57
58     expect( edit_with_alert(@issue_id, :subject, "") ).to eq new_value
59   end
60
61   it "subject can edit with public notes" do
62     new_value = {:value => 'subject: with_notes',
63                  :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => false}}
64     expect( edit(@issue_id, :subject, new_value) ).to eq new_value[:value]
65     expect( latest_note(@issue_id, @issues_page.session_cookie) ).to eq new_value
66   end
67
68   it "subject can edit with private notes" do
69     new_value = {:value => 'subject: with_notes',
70                  :notes => {:text => "notes\ntime=" + (Time.now.to_s), :is_private => true}}
71     expect( edit(@issue_id, :subject, new_value) ).to eq new_value[:value]
72     expect( lastest_note(@issue_id, @issues_page.session_cookie) ).to eq new_value
73   end
74
75   it "start_date can edit" do
76     new_value = '1900-01-01'
77     expect( edit(@issue_id, :start_date, new_value) ).to eq new_value
78
79     new_value = '1900-01-02'
80     expect( edit(@issue_id, :start_date, new_value) ).to eq new_value
81
82     invalid_value = '1900-01-0a'
83     expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value
84
85     invalid_value = ''
86     expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value
87   end
88
89   it "due_date can edit" do
90     new_value = '2000-01-01'
91     expect( edit(@issue_id, :due_date, new_value) ).to eq new_value
92
93     new_value = '2000-01-02'
94     expect( edit(@issue_id, :due_date, new_value) ).to eq new_value
95
96     invalid_value = '2000-01-0a'
97     expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value
98
99     invalid_value = ''
100     expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value
101   end
102
103   it "description can edit" do
104     new_value = 'dummy'
105     expect( edit(@issue_id, :description, new_value) ).to eq new_value
106
107     new_value = 'description: new_value'
108     expect( edit(@issue_id, :description, new_value) ).to eq new_value
109
110     expect( edit_with_alert(@issue_id, :description, "") ).to eq new_value
111   end
112
113   # unsigned float field
114   it "estimated_hours can edit" do
115     new_value = '0'
116     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
117
118     new_value = '0.1'
119     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
120
121     new_value = '+0.1'
122     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
123
124     new_value = '0.1e2'
125     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
126
127     invalid_value = ''
128     expect( edit_with_alert(@issue_id, :estimated_hours, invalid_value) ).to eq new_value.to_f
129   end
130
131   it "parent_issue_id can edit" do
132     issue_ids = @issues_page.issue_ids_on_page
133     issue_new_page = @issues_page.open_new_page()
134     issue_show_page = issue_new_page.create(:bug, 'first subject')
135     new_issue_id = issue_show_page.id
136     @issues_page = issue_show_page.open_issues
137
138     new_value = @issue_id.to_s
139     expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i
140
141     invalid_value = ''
142     expect( edit_with_alert(new_issue_id, :parent_issue_id, invalid_value) ).to eq new_value.to_i
143
144     new_value = @issue_id.to_s
145     expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i
146   end
147
148   def edit(issue_id, attribute_name, new_value)
149     quick_edit = @issues_page.open_context(issue_id)
150     menu_selector = quick_edit.menu_selector(attribute_name)
151     @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value)
152
153     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
154     field_value = get_core_field(issue_id, attribute_name)
155
156     if attribute_name == :parent
157       field_value["id"]
158     else
159       field_value
160     end
161   end
162
163   def edit_with_alert(issue_id, attribute_name, new_value)
164     quick_edit = @issues_page.open_context(issue_id)
165     menu_selector = quick_edit.menu_selector(attribute_name)
166     quick_edit.update_field(issue_id, menu_selector, new_value, true)
167     quick_edit.alert.accept
168     quick_edit.cancel_quick_edit
169
170     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
171     field_value = get_core_field(issue_id, attribute_name)
172
173     if attribute_name == :parent
174       field_value["id"]
175     else
176       field_value
177     end
178   end
179
180   def get_core_field(issue_id, attribute_name)
181     json = get_json("issues/#{issue_id}.json")
182
183     json["issue"][attribute_name.to_s]
184   end
185
186   def get_json(path)
187     uri = URI::parse "#{@base_url}#{path}"
188     res = Net::HTTP::get_response(uri)
189     JSON.parse(res.body)
190   end
191   
192 end