OSDN Git Service

9c4de8af1ee5a8956c911ebbabaa80a9014f14b4
[quickedit/quick_edit.git] / test / selenium / edit_on_mypage.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/quick_edit.rb'].each {|file| require file }
9 Dir[File.dirname(__FILE__) + '/pages/*.rb'].each {|file| require file }
10 require "uri"
11 require "net/http"
12 include RSpec::Expectations
13
14 describe "Edit on the mypage" 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
36     @my_page = issues_page.open_mypage
37     @issue_id = @my_page.issue_ids_on_page.first
38   end
39
40   before(:each) do
41     @my_page = @my_page.open_mypage
42   end
43   
44   after(:each) do
45     expect(@verification_errors).to match_array []
46   end
47   
48   after(:all) do
49     @driver.quit
50   end
51   
52   it "subject can edit" do
53     new_value = 'dummy'
54     expect( edit(@issue_id, :subject, new_value) ).to eq new_value
55
56     new_value = 'subject: new_value'
57     expect( edit(@issue_id, :subject, new_value) ).to eq new_value
58
59     expect( edit_with_alert(@issue_id, :subject, "") ).to eq new_value
60   end
61
62   it "start_date can edit" do
63     new_value = '1900-01-01'
64     expect( edit(@issue_id, :start_date, new_value) ).to eq new_value
65
66     new_value = '1900-01-02'
67     expect( edit(@issue_id, :start_date, new_value) ).to eq new_value
68
69     invalid_value = '1900-01-0a'
70     expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value
71
72     invalid_value = ''
73     expect( edit_with_alert(@issue_id, :start_date, invalid_value) ).to eq new_value
74   end
75
76   it "due_date can edit" do
77     new_value = '2000-01-01'
78     expect( edit(@issue_id, :due_date, new_value) ).to eq new_value
79
80     new_value = '2000-01-02'
81     expect( edit(@issue_id, :due_date, new_value) ).to eq new_value
82
83     invalid_value = '2000-01-0a'
84     expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value
85
86     invalid_value = ''
87     expect( edit_with_alert(@issue_id, :due_date, invalid_value) ).to eq new_value
88   end
89
90   it "description can edit" do
91     new_value = 'dummy'
92     expect( edit(@issue_id, :description, new_value) ).to eq new_value
93
94     new_value = 'description: new_value'
95     expect( edit(@issue_id, :description, new_value) ).to eq new_value
96
97     invalid_value = ''
98     expect( edit_with_alert(@issue_id, :description, invalid_value) ).to eq new_value
99   end
100
101   # unsigned float field
102   it "estimated_hours can edit" do
103     new_value = '0'
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.1'
110     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
111
112     new_value = '0.1e2'
113     expect( edit(@issue_id, :estimated_hours, new_value).to_f ).to eq new_value.to_f
114
115     invalid_value = ''
116     expect( edit_with_alert(@issue_id, :estimated_hours, invalid_value) ).to eq new_value.to_f
117   end
118
119   #it "parent_issue_id can edit" do
120   #  issue_ids = @my_page.issue_ids_on_page
121   #  issue_new_page = @my_page.open_new_page()
122   #  issue_show_page = issue_new_page.create(:bug, 'first subject')
123   #  new_issue_id = issue_show_page.id
124   #  @my_page = issue_show_page.open_issues
125
126   #  new_value = @issue_id.to_s
127   #  expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i
128
129   #  invalid_value = ''
130   #  expect( edit_with_alert(new_issue_id, :parent_issue_id, invalid_value) ).to eq new_value.to_i
131
132   #  new_value = @issue_id.to_s
133   #  expect( edit(new_issue_id, :parent_issue_id, new_value) ).to eq new_value.to_i
134   #end
135
136   def edit(issue_id, attribute_name, new_value)
137     quick_edit = @my_page.open_context(issue_id)
138     menu_selector = quick_edit.menu_selector(attribute_name)
139     @my_page = quick_edit.update_field(issue_id, menu_selector, new_value)
140
141     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
142     field_value = get_core_field(issue_id, attribute_name)
143
144     if attribute_name == :parent
145       field_value["id"]
146     else
147       field_value
148     end
149   end
150
151   def edit_with_alert(issue_id, attribute_name, new_value)
152     quick_edit = @my_page.open_context(issue_id)
153     menu_selector = quick_edit.menu_selector(attribute_name)
154     quick_edit.update_field issue_id, menu_selector, new_value, true
155     quick_edit.alert.accept
156     quick_edit.cancel_quick_edit
157     @my_page = quick_edit.open_mypage
158
159     attribute_name = :parent if attribute_name.to_sym == :parent_issue_id
160     field_value = get_core_field(issue_id, attribute_name)
161
162     if attribute_name == :parent
163       field_value["id"]
164     else
165       field_value
166     end
167   end
168
169   def get_core_field(issue_id, attribute_name)
170     json = get_json("issues/#{issue_id}.json")
171
172     json["issue"][attribute_name.to_s]
173   end
174
175   def get_json(path)
176     uri = URI::parse "#{@base_url}#{path}"
177     res = Net::HTTP::get_response(uri)
178     JSON.parse(res.body)
179   end
180   
181   
182 end