Mercurial > hg > soundsoftware-site
comparison .svn/pristine/0e/0e59eac074a412c3150c3135d0a1eec08baa4fba.svn-base @ 1295:622f24f53b42 redmine-2.3
Update to Redmine SVN revision 11972 on 2.3-stable branch
author | Chris Cannam |
---|---|
date | Fri, 14 Jun 2013 09:02:21 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1294:3e4c3460b6ca | 1295:622f24f53b42 |
---|---|
1 # Redmine - project management software | |
2 # Copyright (C) 2006-2012 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('../../test_helper', __FILE__) | |
19 require 'issues_controller' | |
20 | |
21 class IssuesControllerTransactionTest < ActionController::TestCase | |
22 fixtures :projects, | |
23 :users, | |
24 :roles, | |
25 :members, | |
26 :member_roles, | |
27 :issues, | |
28 :issue_statuses, | |
29 :versions, | |
30 :trackers, | |
31 :projects_trackers, | |
32 :issue_categories, | |
33 :enabled_modules, | |
34 :enumerations, | |
35 :attachments, | |
36 :workflows, | |
37 :custom_fields, | |
38 :custom_values, | |
39 :custom_fields_projects, | |
40 :custom_fields_trackers, | |
41 :time_entries, | |
42 :journals, | |
43 :journal_details, | |
44 :queries | |
45 | |
46 self.use_transactional_fixtures = false | |
47 | |
48 def setup | |
49 @controller = IssuesController.new | |
50 @request = ActionController::TestRequest.new | |
51 @response = ActionController::TestResponse.new | |
52 User.current = nil | |
53 end | |
54 | |
55 def test_update_stale_issue_should_not_update_the_issue | |
56 issue = Issue.find(2) | |
57 @request.session[:user_id] = 2 | |
58 | |
59 assert_no_difference 'Journal.count' do | |
60 assert_no_difference 'TimeEntry.count' do | |
61 put :update, | |
62 :id => issue.id, | |
63 :issue => { | |
64 :fixed_version_id => 4, | |
65 :notes => 'My notes', | |
66 :lock_version => (issue.lock_version - 1) | |
67 }, | |
68 :time_entry => { :hours => '2.5', :comments => '', :activity_id => TimeEntryActivity.first.id } | |
69 end | |
70 end | |
71 | |
72 assert_response :success | |
73 assert_template 'edit' | |
74 | |
75 assert_select 'div.conflict' | |
76 assert_select 'input[name=?][value=?]', 'conflict_resolution', 'overwrite' | |
77 assert_select 'input[name=?][value=?]', 'conflict_resolution', 'add_notes' | |
78 assert_select 'label' do | |
79 assert_select 'input[name=?][value=?]', 'conflict_resolution', 'cancel' | |
80 assert_select 'a[href=/issues/2]' | |
81 end | |
82 end | |
83 | |
84 def test_update_stale_issue_should_save_attachments | |
85 set_tmp_attachments_directory | |
86 issue = Issue.find(2) | |
87 @request.session[:user_id] = 2 | |
88 | |
89 assert_no_difference 'Journal.count' do | |
90 assert_no_difference 'TimeEntry.count' do | |
91 assert_difference 'Attachment.count' do | |
92 put :update, | |
93 :id => issue.id, | |
94 :issue => { | |
95 :fixed_version_id => 4, | |
96 :notes => 'My notes', | |
97 :lock_version => (issue.lock_version - 1) | |
98 }, | |
99 :attachments => {'1' => {'file' => uploaded_test_file('testfile.txt', 'text/plain')}}, | |
100 :time_entry => { :hours => '2.5', :comments => '', :activity_id => TimeEntryActivity.first.id } | |
101 end | |
102 end | |
103 end | |
104 | |
105 assert_response :success | |
106 assert_template 'edit' | |
107 attachment = Attachment.first(:order => 'id DESC') | |
108 assert_tag 'input', :attributes => {:name => 'attachments[p0][token]', :value => attachment.token} | |
109 assert_tag 'span', :content => /testfile.txt/ | |
110 end | |
111 | |
112 def test_update_stale_issue_without_notes_should_not_show_add_notes_option | |
113 issue = Issue.find(2) | |
114 @request.session[:user_id] = 2 | |
115 | |
116 put :update, :id => issue.id, | |
117 :issue => { | |
118 :fixed_version_id => 4, | |
119 :notes => '', | |
120 :lock_version => (issue.lock_version - 1) | |
121 } | |
122 | |
123 assert_tag 'div', :attributes => {:class => 'conflict'} | |
124 assert_tag 'input', :attributes => {:name => 'conflict_resolution', :value => 'overwrite'} | |
125 assert_no_tag 'input', :attributes => {:name => 'conflict_resolution', :value => 'add_notes'} | |
126 assert_tag 'input', :attributes => {:name => 'conflict_resolution', :value => 'cancel'} | |
127 end | |
128 | |
129 def test_update_stale_issue_should_show_conflicting_journals | |
130 @request.session[:user_id] = 2 | |
131 | |
132 put :update, :id => 1, | |
133 :issue => { | |
134 :fixed_version_id => 4, | |
135 :notes => '', | |
136 :lock_version => 2 | |
137 }, | |
138 :last_journal_id => 1 | |
139 | |
140 assert_not_nil assigns(:conflict_journals) | |
141 assert_equal 1, assigns(:conflict_journals).size | |
142 assert_equal 2, assigns(:conflict_journals).first.id | |
143 assert_tag 'div', :attributes => {:class => 'conflict'}, | |
144 :descendant => {:content => /Some notes with Redmine links/} | |
145 end | |
146 | |
147 def test_update_stale_issue_without_previous_journal_should_show_all_journals | |
148 @request.session[:user_id] = 2 | |
149 | |
150 put :update, :id => 1, | |
151 :issue => { | |
152 :fixed_version_id => 4, | |
153 :notes => '', | |
154 :lock_version => 2 | |
155 }, | |
156 :last_journal_id => '' | |
157 | |
158 assert_not_nil assigns(:conflict_journals) | |
159 assert_equal 2, assigns(:conflict_journals).size | |
160 assert_tag 'div', :attributes => {:class => 'conflict'}, | |
161 :descendant => {:content => /Some notes with Redmine links/} | |
162 assert_tag 'div', :attributes => {:class => 'conflict'}, | |
163 :descendant => {:content => /Journal notes/} | |
164 end | |
165 | |
166 def test_update_stale_issue_should_show_private_journals_with_permission_only | |
167 journal = Journal.create!(:journalized => Issue.find(1), :notes => 'Privates notes', :private_notes => true, :user_id => 1) | |
168 | |
169 @request.session[:user_id] = 2 | |
170 put :update, :id => 1, :issue => {:fixed_version_id => 4, :lock_version => 2}, :last_journal_id => '' | |
171 assert_include journal, assigns(:conflict_journals) | |
172 | |
173 Role.find(1).remove_permission! :view_private_notes | |
174 put :update, :id => 1, :issue => {:fixed_version_id => 4, :lock_version => 2}, :last_journal_id => '' | |
175 assert_not_include journal, assigns(:conflict_journals) | |
176 end | |
177 | |
178 def test_update_stale_issue_with_overwrite_conflict_resolution_should_update | |
179 @request.session[:user_id] = 2 | |
180 | |
181 assert_difference 'Journal.count' do | |
182 put :update, :id => 1, | |
183 :issue => { | |
184 :fixed_version_id => 4, | |
185 :notes => 'overwrite_conflict_resolution', | |
186 :lock_version => 2 | |
187 }, | |
188 :conflict_resolution => 'overwrite' | |
189 end | |
190 | |
191 assert_response 302 | |
192 issue = Issue.find(1) | |
193 assert_equal 4, issue.fixed_version_id | |
194 journal = Journal.first(:order => 'id DESC') | |
195 assert_equal 'overwrite_conflict_resolution', journal.notes | |
196 assert journal.details.any? | |
197 end | |
198 | |
199 def test_update_stale_issue_with_add_notes_conflict_resolution_should_update | |
200 @request.session[:user_id] = 2 | |
201 | |
202 assert_difference 'Journal.count' do | |
203 put :update, :id => 1, | |
204 :issue => { | |
205 :fixed_version_id => 4, | |
206 :notes => 'add_notes_conflict_resolution', | |
207 :lock_version => 2 | |
208 }, | |
209 :conflict_resolution => 'add_notes' | |
210 end | |
211 | |
212 assert_response 302 | |
213 issue = Issue.find(1) | |
214 assert_nil issue.fixed_version_id | |
215 journal = Journal.first(:order => 'id DESC') | |
216 assert_equal 'add_notes_conflict_resolution', journal.notes | |
217 assert journal.details.empty? | |
218 end | |
219 | |
220 def test_update_stale_issue_with_cancel_conflict_resolution_should_redirect_without_updating | |
221 @request.session[:user_id] = 2 | |
222 | |
223 assert_no_difference 'Journal.count' do | |
224 put :update, :id => 1, | |
225 :issue => { | |
226 :fixed_version_id => 4, | |
227 :notes => 'add_notes_conflict_resolution', | |
228 :lock_version => 2 | |
229 }, | |
230 :conflict_resolution => 'cancel' | |
231 end | |
232 | |
233 assert_redirected_to '/issues/1' | |
234 issue = Issue.find(1) | |
235 assert_nil issue.fixed_version_id | |
236 end | |
237 | |
238 def test_put_update_with_spent_time_and_failure_should_not_add_spent_time | |
239 @request.session[:user_id] = 2 | |
240 | |
241 assert_no_difference('TimeEntry.count') do | |
242 put :update, | |
243 :id => 1, | |
244 :issue => { :subject => '' }, | |
245 :time_entry => { :hours => '2.5', :comments => 'should not be added', :activity_id => TimeEntryActivity.first.id } | |
246 assert_response :success | |
247 end | |
248 | |
249 assert_select 'input[name=?][value=?]', 'time_entry[hours]', '2.5' | |
250 assert_select 'input[name=?][value=?]', 'time_entry[comments]', 'should not be added' | |
251 assert_select 'select[name=?]', 'time_entry[activity_id]' do | |
252 assert_select 'option[value=?][selected=selected]', TimeEntryActivity.first.id | |
253 end | |
254 end | |
255 | |
256 def test_index_should_rescue_invalid_sql_query | |
257 Query.any_instance.stubs(:statement).returns("INVALID STATEMENT") | |
258 | |
259 get :index | |
260 assert_response 500 | |
261 assert_tag 'p', :content => /An error occurred/ | |
262 assert_nil session[:query] | |
263 assert_nil session[:issues_index_sort] | |
264 end | |
265 end |