OSDN Git Service

488f26e8b159c2918acc33aa4c0637330c087e7f
[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 require "uri"
10 require "net/http"
11 include RSpec::Expectations
12
13 describe "Edit 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 edit" do
51     new_value = 'dummy'
52     expect( edit(@issue_id, :subject, new_value) ).to eq new_value
53
54     new_value = 'subject: new_value'
55     expect( edit(@issue_id, :subject, new_value) ).to eq new_value
56
57     expect( edit_with_alert(@issue_id, :subject, "") ).to eq new_value
58   end
59
60   it "start_date can edit" do
61     new_value = '1900-01-01'
62     expect( edit(@issue_id, :start_date, new_value) ).to eq new_value
63
64     new_value = '1900-01-02'
65     expect( edit(@issue_id, :start_date, new_value) ).to eq new_value
66
67     invalid_value = '1900-01-0a'
68     expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value
69
70     invalid_value = ''
71     expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value
72   end
73
74   it "due_date can edit" do
75     new_value = '2000-01-01'
76     expect( edit(@issue_id, :due_date, new_value) ).to eq new_value
77
78     new_value = '2000-01-02'
79     expect( edit(@issue_id, :due_date, new_value) ).to eq new_value
80
81     invalid_value = '2000-01-0a'
82     expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value
83
84     invalid_value = ''
85     expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value
86   end
87
88   it "description can edit" do
89     new_value = 'dummy'
90     expect( edit(@issue_id, :description, new_value) ).to eq new_value
91
92     new_value = 'description: new_value'
93     expect( edit(@issue_id, :description, new_value) ).to eq new_value
94
95     expect( edit_with_alert(@issue_id, :description, "") ).to eq new_value
96   end
97
98   # unsigned float field
99   it "estimated_hours can edit" do
100     new_value = '0'
101     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
102
103     new_value = '0.1'
104     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
105
106     new_value = '+0.1'
107     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
108
109     new_value = '0.1e2'
110     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
111
112     invalid_value = ''
113     expect( edit_with_alert(@issue_id, :estimated_hours, invalid_value) ).to eq new_value.to_f
114   end
115
116   it "parent_issue_id can edit" do
117     issue_ids = @issues_page.issue_ids_on_page
118     issue_new_page = @issues_page.open_new_page()
119     issue_show_page = issue_new_page.create(:bug, 'first subject')
120     new_issue_id = issue_show_page.id
121     @issues_page = issue_show_page.open_issues
122
123     new_value = @issue_id.to_s
124     expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i
125
126     invalid_value = ''
127     expect( edit_with_alert(new_issue_id, :parent_issue_id, invalid_value) ).to eq new_value.to_i
128
129     new_value = @issue_id.to_s
130     expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i
131   end
132
133   def edit(issue_id, attribute_name, new_value)
134     quick_edit = @issues_page.open_context(issue_id)
135     menu_selector = quick_edit.menu_selector(attribute_name)
136     @issues_page = quick_edit.update_field(issue_id, menu_selector, new_value)
137
138     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
139     field_value = get_core_field(issue_id, attribute_name)
140
141     if attribute_name == :parent
142       field_value["id"]
143     else
144       field_value
145     end
146   end
147
148   def edit_with_alert(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     quick_edit.update_field(issue_id, menu_selector, new_value, true)
152     quick_edit.alert.accept
153     quick_edit.cancel_quick_edit
154
155     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
156     field_value = get_core_field(issue_id, attribute_name)
157
158     if attribute_name == :parent
159       field_value["id"]
160     else
161       field_value
162     end
163   end
164
165   def get_core_field(issue_id, attribute_name)
166     json = get_json("issues/#{issue_id}.json")
167
168     json["issue"][attribute_name.to_s]
169   end
170
171   def get_json(path)
172     uri = URI::parse "#{@base_url}#{path}"
173     res = Net::HTTP::get_response(uri)
174     JSON.parse(res.body)
175   end
176   
177   
178 end