Mercurial > hg > soundsoftware-site
comparison .svn/pristine/da/da78d3fb1e68f0f6756399b65dd60a2b75d92cb5.svn-base @ 1517:dffacf8a6908 redmine-2.5
Update to Redmine SVN revision 13367 on 2.5-stable branch
author | Chris Cannam |
---|---|
date | Tue, 09 Sep 2014 09:29:00 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1516:b450a9d58aed | 1517:dffacf8a6908 |
---|---|
1 # Redmine - project management software | |
2 # Copyright (C) 2006-2014 Jean-Philippe Lang | |
3 # | |
4 # This program is free software; you can redistribute it and/or | |
5 # modify it under the terms of the GNU General Public License | |
6 # as published by the Free Software Foundation; either version 2 | |
7 # of the License, or (at your option) any later version. | |
8 # | |
9 # This program is distributed in the hope that it will be useful, | |
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 # GNU General Public License for more details. | |
13 # | |
14 # You should have received a copy of the GNU General Public License | |
15 # along with this program; if not, write to the Free Software | |
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | |
17 | |
18 require File.expand_path('../base', __FILE__) | |
19 | |
20 class Redmine::UiTest::IssuesTest < Redmine::UiTest::Base | |
21 fixtures :projects, :users, :roles, :members, :member_roles, | |
22 :trackers, :projects_trackers, :enabled_modules, :issue_statuses, :issues, | |
23 :enumerations, :custom_fields, :custom_values, :custom_fields_trackers, | |
24 :watchers | |
25 | |
26 def test_create_issue | |
27 log_user('jsmith', 'jsmith') | |
28 visit '/projects/ecookbook/issues/new' | |
29 within('form#issue-form') do | |
30 select 'Bug', :from => 'Tracker' | |
31 select 'Low', :from => 'Priority' | |
32 fill_in 'Subject', :with => 'new test issue' | |
33 fill_in 'Description', :with => 'new issue' | |
34 select '0 %', :from => 'Done' | |
35 fill_in 'Due date', :with => '' | |
36 fill_in 'Searchable field', :with => 'Value for field 2' | |
37 # click_button 'Create' would match both 'Create' and 'Create and continue' buttons | |
38 find('input[name=commit]').click | |
39 end | |
40 | |
41 # find created issue | |
42 issue = Issue.find_by_subject("new test issue") | |
43 assert_kind_of Issue, issue | |
44 | |
45 # check redirection | |
46 find 'div#flash_notice', :visible => true, :text => "Issue \##{issue.id} created." | |
47 assert_equal issue_path(:id => issue), current_path | |
48 | |
49 # check issue attributes | |
50 assert_equal 'jsmith', issue.author.login | |
51 assert_equal 1, issue.project.id | |
52 assert_equal IssueStatus.find_by_name('New'), issue.status | |
53 assert_equal Tracker.find_by_name('Bug'), issue.tracker | |
54 assert_equal IssuePriority.find_by_name('Low'), issue.priority | |
55 assert_equal 'Value for field 2', issue.custom_field_value(CustomField.find_by_name('Searchable field')) | |
56 end | |
57 | |
58 def test_create_issue_with_form_update | |
59 field1 = IssueCustomField.create!( | |
60 :field_format => 'string', | |
61 :name => 'Field1', | |
62 :is_for_all => true, | |
63 :trackers => Tracker.find_all_by_id([1, 2]) | |
64 ) | |
65 field2 = IssueCustomField.create!( | |
66 :field_format => 'string', | |
67 :name => 'Field2', | |
68 :is_for_all => true, | |
69 :trackers => Tracker.find_all_by_id(2) | |
70 ) | |
71 | |
72 Role.non_member.add_permission! :add_issues | |
73 Role.non_member.remove_permission! :edit_issues, :add_issue_notes | |
74 | |
75 log_user('someone', 'foo') | |
76 visit '/projects/ecookbook/issues/new' | |
77 assert page.has_no_content?(field2.name) | |
78 assert page.has_content?(field1.name) | |
79 | |
80 fill_in 'Subject', :with => 'New test issue' | |
81 fill_in 'Description', :with => 'New test issue description' | |
82 fill_in field1.name, :with => 'CF1 value' | |
83 select 'Low', :from => 'Priority' | |
84 | |
85 # field2 should show up when changing tracker | |
86 select 'Feature request', :from => 'Tracker' | |
87 assert page.has_content?(field2.name) | |
88 assert page.has_content?(field1.name) | |
89 | |
90 fill_in field2.name, :with => 'CF2 value' | |
91 assert_difference 'Issue.count' do | |
92 page.first(:button, 'Create').click | |
93 end | |
94 | |
95 issue = Issue.order('id desc').first | |
96 assert_equal 'New test issue', issue.subject | |
97 assert_equal 'New test issue description', issue.description | |
98 assert_equal 'Low', issue.priority.name | |
99 assert_equal 'CF1 value', issue.custom_field_value(field1) | |
100 assert_equal 'CF2 value', issue.custom_field_value(field2) | |
101 end | |
102 | |
103 def test_create_issue_with_watchers | |
104 user = User.generate!(:firstname => 'Some', :lastname => 'Watcher') | |
105 assert_equal 'Some Watcher', user.name | |
106 log_user('jsmith', 'jsmith') | |
107 visit '/projects/ecookbook/issues/new' | |
108 fill_in 'Subject', :with => 'Issue with watchers' | |
109 # Add a project member as watcher | |
110 check 'Dave Lopper' | |
111 # Search for another user | |
112 assert page.has_no_css?('form#new-watcher-form') | |
113 assert page.has_no_content?('Some Watcher') | |
114 click_link 'Search for watchers to add' | |
115 within('form#new-watcher-form') do | |
116 fill_in 'user_search', :with => 'watch' | |
117 assert page.has_content?('Some Watcher') | |
118 check 'Some Watcher' | |
119 click_button 'Add' | |
120 end | |
121 assert page.has_css?('form#issue-form') | |
122 assert page.has_css?('p#watchers_form') | |
123 using_wait_time(30) do | |
124 within('span#watchers_inputs') do | |
125 within("label#issue_watcher_user_ids_#{user.id}") do | |
126 assert has_content?('Some Watcher'), "No watcher content" | |
127 end | |
128 end | |
129 end | |
130 assert_difference 'Issue.count' do | |
131 find('input[name=commit]').click | |
132 end | |
133 | |
134 issue = Issue.order('id desc').first | |
135 assert_equal ['Dave Lopper', 'Some Watcher'], issue.watcher_users.map(&:name).sort | |
136 end | |
137 | |
138 def test_create_issue_start_due_date | |
139 with_settings :default_issue_start_date_to_creation_date => 0 do | |
140 log_user('jsmith', 'jsmith') | |
141 visit '/projects/ecookbook/issues/new' | |
142 assert_equal "", page.find('input#issue_start_date').value | |
143 assert_equal "", page.find('input#issue_due_date').value | |
144 page.first('p#start_date_area img').click | |
145 page.first("td.ui-datepicker-days-cell-over a").click | |
146 assert_equal Date.today.to_s, page.find('input#issue_start_date').value | |
147 page.first('p#due_date_area img').click | |
148 page.first("td.ui-datepicker-days-cell-over a").click | |
149 assert_equal Date.today.to_s, page.find('input#issue_due_date').value | |
150 end | |
151 end | |
152 | |
153 def test_create_issue_start_due_date_default | |
154 log_user('jsmith', 'jsmith') | |
155 visit '/projects/ecookbook/issues/new' | |
156 fill_in 'Start date', :with => '2012-04-01' | |
157 fill_in 'Due date', :with => '' | |
158 page.first('p#due_date_area img').click | |
159 page.first("td.ui-datepicker-days-cell-over a").click | |
160 assert_equal '2012-04-01', page.find('input#issue_due_date').value | |
161 | |
162 fill_in 'Start date', :with => '' | |
163 fill_in 'Due date', :with => '2012-04-01' | |
164 page.first('p#start_date_area img').click | |
165 page.first("td.ui-datepicker-days-cell-over a").click | |
166 assert_equal '2012-04-01', page.find('input#issue_start_date').value | |
167 end | |
168 | |
169 def test_preview_issue_description | |
170 log_user('jsmith', 'jsmith') | |
171 visit '/projects/ecookbook/issues/new' | |
172 within('form#issue-form') do | |
173 fill_in 'Subject', :with => 'new issue subject' | |
174 fill_in 'Description', :with => 'new issue description' | |
175 click_link 'Preview' | |
176 end | |
177 find 'div#preview fieldset', :visible => true, :text => 'new issue description' | |
178 assert_difference 'Issue.count' do | |
179 find('input[name=commit]').click | |
180 end | |
181 | |
182 issue = Issue.order('id desc').first | |
183 assert_equal 'new issue description', issue.description | |
184 end | |
185 | |
186 def test_update_issue_with_form_update | |
187 field = IssueCustomField.create!( | |
188 :field_format => 'string', | |
189 :name => 'Form update CF', | |
190 :is_for_all => true, | |
191 :trackers => Tracker.find_all_by_name('Feature request') | |
192 ) | |
193 | |
194 Role.non_member.add_permission! :edit_issues | |
195 Role.non_member.remove_permission! :add_issues, :add_issue_notes | |
196 | |
197 log_user('someone', 'foo') | |
198 visit '/issues/1' | |
199 assert page.has_no_content?('Form update CF') | |
200 | |
201 page.first(:link, 'Edit').click | |
202 # the custom field should show up when changing tracker | |
203 select 'Feature request', :from => 'Tracker' | |
204 assert page.has_content?('Form update CF') | |
205 | |
206 fill_in 'Form update', :with => 'CF value' | |
207 assert_no_difference 'Issue.count' do | |
208 page.first(:button, 'Submit').click | |
209 end | |
210 | |
211 issue = Issue.find(1) | |
212 assert_equal 'CF value', issue.custom_field_value(field) | |
213 end | |
214 | |
215 def test_remove_issue_watcher_from_sidebar | |
216 user = User.find(3) | |
217 Watcher.create!(:watchable => Issue.find(1), :user => user) | |
218 | |
219 log_user('jsmith', 'jsmith') | |
220 visit '/issues/1' | |
221 assert page.first('#sidebar').has_content?('Watchers (1)') | |
222 assert page.first('#sidebar').has_content?(user.name) | |
223 assert_difference 'Watcher.count', -1 do | |
224 page.first('ul.watchers .user-3 a.delete').click | |
225 assert page.first('#sidebar').has_content?('Watchers (0)') | |
226 end | |
227 assert page.first('#sidebar').has_no_content?(user.name) | |
228 end | |
229 | |
230 def test_watch_issue_via_context_menu | |
231 log_user('jsmith', 'jsmith') | |
232 visit '/issues' | |
233 assert page.has_css?('tr#issue-1') | |
234 find('tr#issue-1 td.updated_on').click | |
235 page.execute_script "$('tr#issue-1 td.updated_on').trigger('contextmenu');" | |
236 assert_difference 'Watcher.count' do | |
237 within('#context-menu') do | |
238 click_link 'Watch' | |
239 end | |
240 assert page.has_css?('tr#issue-1') | |
241 end | |
242 assert Issue.find(1).watched_by?(User.find_by_login('jsmith')) | |
243 end | |
244 | |
245 def test_bulk_watch_issues_via_context_menu | |
246 log_user('jsmith', 'jsmith') | |
247 visit '/issues' | |
248 assert page.has_css?('tr#issue-1') | |
249 assert page.has_css?('tr#issue-4') | |
250 find('tr#issue-1 input[type=checkbox]').click | |
251 find('tr#issue-4 input[type=checkbox]').click | |
252 page.execute_script "$('tr#issue-1 td.updated_on').trigger('contextmenu');" | |
253 assert_difference 'Watcher.count', 2 do | |
254 within('#context-menu') do | |
255 click_link 'Watch' | |
256 end | |
257 assert page.has_css?('tr#issue-1') | |
258 assert page.has_css?('tr#issue-4') | |
259 end | |
260 assert Issue.find(1).watched_by?(User.find_by_login('jsmith')) | |
261 assert Issue.find(4).watched_by?(User.find_by_login('jsmith')) | |
262 end | |
263 end |