comparison test/functional/repositories_subversion_controller_test.rb @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents cbce1fd3b1b7
children 433d4f72a19b
comparison
equal deleted inserted replaced
908:c6c2cbd0afee 909:cbb26bc654de
25 fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules, 25 fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
26 :repositories, :issues, :issue_statuses, :changesets, :changes, 26 :repositories, :issues, :issue_statuses, :changesets, :changes,
27 :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers 27 :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
28 28
29 PRJ_ID = 3 29 PRJ_ID = 3
30 NUM_REV = 11
30 31
31 def setup 32 def setup
32 @controller = RepositoriesController.new 33 @controller = RepositoriesController.new
33 @request = ActionController::TestRequest.new 34 @request = ActionController::TestRequest.new
34 @response = ActionController::TestResponse.new 35 @response = ActionController::TestResponse.new
41 assert @repository 42 assert @repository
42 end 43 end
43 44
44 if repository_configured?('subversion') 45 if repository_configured?('subversion')
45 def test_show 46 def test_show
46 @repository.fetch_changesets 47 assert_equal 0, @repository.changesets.count
47 @repository.reload 48 @repository.fetch_changesets
49 @project.reload
50 assert_equal NUM_REV, @repository.changesets.count
48 get :show, :id => PRJ_ID 51 get :show, :id => PRJ_ID
49 assert_response :success 52 assert_response :success
50 assert_template 'show' 53 assert_template 'show'
51 assert_not_nil assigns(:entries) 54 assert_not_nil assigns(:entries)
52 assert_not_nil assigns(:changesets) 55 assert_not_nil assigns(:changesets)
53 end 56 end
54 57
55 def test_browse_root 58 def test_browse_root
56 @repository.fetch_changesets 59 assert_equal 0, @repository.changesets.count
57 @repository.reload 60 @repository.fetch_changesets
61 @project.reload
62 assert_equal NUM_REV, @repository.changesets.count
58 get :show, :id => PRJ_ID 63 get :show, :id => PRJ_ID
59 assert_response :success 64 assert_response :success
60 assert_template 'show' 65 assert_template 'show'
61 assert_not_nil assigns(:entries) 66 assert_not_nil assigns(:entries)
62 entry = assigns(:entries).detect {|e| e.name == 'subversion_test'} 67 entry = assigns(:entries).detect {|e| e.name == 'subversion_test'}
63 assert_equal 'dir', entry.kind 68 assert_equal 'dir', entry.kind
64 end 69 end
65 70
66 def test_browse_directory 71 def test_browse_directory
67 @repository.fetch_changesets 72 assert_equal 0, @repository.changesets.count
68 @repository.reload 73 @repository.fetch_changesets
74 @project.reload
75 assert_equal NUM_REV, @repository.changesets.count
69 get :show, :id => PRJ_ID, :path => ['subversion_test'] 76 get :show, :id => PRJ_ID, :path => ['subversion_test']
70 assert_response :success 77 assert_response :success
71 assert_template 'show' 78 assert_template 'show'
72 assert_not_nil assigns(:entries) 79 assert_not_nil assigns(:entries)
73 assert_equal ['[folder_with_brackets]', 'folder', '.project', 'helloworld.c', 'textfile.txt'], 80 assert_equal [
74 assigns(:entries).collect(&:name) 81 '[folder_with_brackets]', 'folder', '.project',
82 'helloworld.c', 'textfile.txt'
83 ],
84 assigns(:entries).collect(&:name)
75 entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'} 85 entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'}
76 assert_equal 'file', entry.kind 86 assert_equal 'file', entry.kind
77 assert_equal 'subversion_test/helloworld.c', entry.path 87 assert_equal 'subversion_test/helloworld.c', entry.path
78 assert_tag :a, :content => 'helloworld.c', :attributes => { :class => /text\-x\-c/ } 88 assert_tag :a, :content => 'helloworld.c', :attributes => { :class => /text\-x\-c/ }
79 end 89 end
80 90
81 def test_browse_at_given_revision 91 def test_browse_at_given_revision
82 @repository.fetch_changesets 92 assert_equal 0, @repository.changesets.count
83 @repository.reload 93 @repository.fetch_changesets
94 @project.reload
95 assert_equal NUM_REV, @repository.changesets.count
84 get :show, :id => PRJ_ID, :path => ['subversion_test'], :rev => 4 96 get :show, :id => PRJ_ID, :path => ['subversion_test'], :rev => 4
85 assert_response :success 97 assert_response :success
86 assert_template 'show' 98 assert_template 'show'
87 assert_not_nil assigns(:entries) 99 assert_not_nil assigns(:entries)
88 assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'], 100 assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'],
89 assigns(:entries).collect(&:name) 101 assigns(:entries).collect(&:name)
90 end 102 end
91 103
92 def test_file_changes 104 def test_file_changes
93 @repository.fetch_changesets 105 assert_equal 0, @repository.changesets.count
94 @repository.reload 106 @repository.fetch_changesets
107 @project.reload
108 assert_equal NUM_REV, @repository.changesets.count
95 get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ] 109 get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
96 assert_response :success 110 assert_response :success
97 assert_template 'changes' 111 assert_template 'changes'
98 112
99 changesets = assigns(:changesets) 113 changesets = assigns(:changesets)
110 :child => { :tag => 'span', :content => 'native' } } 124 :child => { :tag => 'span', :content => 'native' } }
111 end 125 end
112 end 126 end
113 127
114 def test_directory_changes 128 def test_directory_changes
115 @repository.fetch_changesets 129 assert_equal 0, @repository.changesets.count
116 @repository.reload 130 @repository.fetch_changesets
131 @project.reload
132 assert_equal NUM_REV, @repository.changesets.count
117 get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ] 133 get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ]
118 assert_response :success 134 assert_response :success
119 assert_template 'changes' 135 assert_template 'changes'
120 136
121 changesets = assigns(:changesets) 137 changesets = assigns(:changesets)
122 assert_not_nil changesets 138 assert_not_nil changesets
123 assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision) 139 assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision)
124 end 140 end
125 141
126 def test_entry 142 def test_entry
127 @repository.fetch_changesets 143 assert_equal 0, @repository.changesets.count
128 @repository.reload 144 @repository.fetch_changesets
145 @project.reload
146 assert_equal NUM_REV, @repository.changesets.count
129 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'] 147 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
130 assert_response :success 148 assert_response :success
131 assert_template 'entry' 149 assert_template 'entry'
132 end 150 end
133 151
134 def test_entry_should_send_if_too_big 152 def test_entry_should_send_if_too_big
135 @repository.fetch_changesets 153 assert_equal 0, @repository.changesets.count
136 @repository.reload 154 @repository.fetch_changesets
155 @project.reload
156 assert_equal NUM_REV, @repository.changesets.count
137 # no files in the test repo is larger than 1KB... 157 # no files in the test repo is larger than 1KB...
138 with_settings :file_max_size_displayed => 0 do 158 with_settings :file_max_size_displayed => 0 do
139 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'] 159 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
140 assert_response :success 160 assert_response :success
141 assert_template '' 161 assert_template ''
142 assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition'] 162 assert_equal 'attachment; filename="helloworld.c"',
163 @response.headers['Content-Disposition']
143 end 164 end
144 end 165 end
145 166
146 def test_entry_at_given_revision 167 def test_entry_at_given_revision
147 @repository.fetch_changesets 168 assert_equal 0, @repository.changesets.count
148 @repository.reload 169 @repository.fetch_changesets
170 @project.reload
171 assert_equal NUM_REV, @repository.changesets.count
149 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.rb'], :rev => 2 172 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.rb'], :rev => 2
150 assert_response :success 173 assert_response :success
151 assert_template 'entry' 174 assert_template 'entry'
152 # this line was removed in r3 and file was moved in r6 175 # this line was removed in r3 and file was moved in r6
153 assert_tag :tag => 'td', :attributes => { :class => /line-code/}, 176 assert_tag :tag => 'td', :attributes => { :class => /line-code/},
154 :content => /Here's the code/ 177 :content => /Here's the code/
155 end 178 end
156 179
157 def test_entry_not_found 180 def test_entry_not_found
158 @repository.fetch_changesets 181 assert_equal 0, @repository.changesets.count
159 @repository.reload 182 @repository.fetch_changesets
183 @project.reload
184 assert_equal NUM_REV, @repository.changesets.count
160 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'zzz.c'] 185 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'zzz.c']
161 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ }, 186 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
162 :content => /The entry or revision was not found in the repository/ 187 :content => /The entry or revision was not found in the repository/
163 end 188 end
164 189
165 def test_entry_download 190 def test_entry_download
166 @repository.fetch_changesets 191 assert_equal 0, @repository.changesets.count
167 @repository.reload 192 @repository.fetch_changesets
193 @project.reload
194 assert_equal NUM_REV, @repository.changesets.count
168 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'], :format => 'raw' 195 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'], :format => 'raw'
169 assert_response :success 196 assert_response :success
170 assert_template '' 197 assert_template ''
171 assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition'] 198 assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
172 end 199 end
173 200
174 def test_directory_entry 201 def test_directory_entry
175 @repository.fetch_changesets 202 assert_equal 0, @repository.changesets.count
176 @repository.reload 203 @repository.fetch_changesets
204 @project.reload
205 assert_equal NUM_REV, @repository.changesets.count
177 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'folder'] 206 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'folder']
178 assert_response :success 207 assert_response :success
179 assert_template 'show' 208 assert_template 'show'
180 assert_not_nil assigns(:entry) 209 assert_not_nil assigns(:entry)
181 assert_equal 'folder', assigns(:entry).name 210 assert_equal 'folder', assigns(:entry).name
182 end 211 end
183 212
184 # TODO: this test needs fixtures. 213 # TODO: this test needs fixtures.
185 def test_revision 214 def test_revision
186 @repository.fetch_changesets
187 @repository.reload
188 get :revision, :id => 1, :rev => 2 215 get :revision, :id => 1, :rev => 2
189 assert_response :success 216 assert_response :success
190 assert_template 'revision' 217 assert_template 'revision'
191 assert_tag :tag => 'ul', 218 assert_tag :tag => 'ul',
192 :child => { :tag => 'li', 219 :child => { :tag => 'li',
201 } 228 }
202 } 229 }
203 end 230 end
204 231
205 def test_invalid_revision 232 def test_invalid_revision
206 @repository.fetch_changesets 233 assert_equal 0, @repository.changesets.count
207 @repository.reload 234 @repository.fetch_changesets
235 @project.reload
236 assert_equal NUM_REV, @repository.changesets.count
208 get :revision, :id => PRJ_ID, :rev => 'something_weird' 237 get :revision, :id => PRJ_ID, :rev => 'something_weird'
209 assert_response 404 238 assert_response 404
210 assert_error_tag :content => /was not found/ 239 assert_error_tag :content => /was not found/
211 end 240 end
212 241
215 assert_response 404 244 assert_response 404
216 assert_error_tag :content => /was not found/ 245 assert_error_tag :content => /was not found/
217 end 246 end
218 247
219 def test_empty_revision 248 def test_empty_revision
220 @repository.fetch_changesets 249 assert_equal 0, @repository.changesets.count
221 @repository.reload 250 @repository.fetch_changesets
251 @project.reload
252 assert_equal NUM_REV, @repository.changesets.count
222 ['', ' ', nil].each do |r| 253 ['', ' ', nil].each do |r|
223 get :revision, :id => PRJ_ID, :rev => r 254 get :revision, :id => PRJ_ID, :rev => r
224 assert_response 404 255 assert_response 404
225 assert_error_tag :content => /was not found/ 256 assert_error_tag :content => /was not found/
226 end 257 end
248 } 279 }
249 } 280 }
250 end 281 end
251 282
252 def test_revision_diff 283 def test_revision_diff
253 @repository.fetch_changesets 284 assert_equal 0, @repository.changesets.count
254 @repository.reload 285 @repository.fetch_changesets
255 get :diff, :id => PRJ_ID, :rev => 3 286 @project.reload
256 assert_response :success 287 assert_equal NUM_REV, @repository.changesets.count
257 assert_template 'diff' 288 ['inline', 'sbs'].each do |dt|
258 289 get :diff, :id => PRJ_ID, :rev => 3, :type => dt
259 assert_tag :tag => 'h2', :content => /3/ 290 assert_response :success
291 assert_template 'diff'
292 assert_tag :tag => 'h2',
293 :content => / 3/
294 end
260 end 295 end
261 296
262 def test_directory_diff 297 def test_directory_diff
263 @repository.fetch_changesets 298 assert_equal 0, @repository.changesets.count
264 @repository.reload 299 @repository.fetch_changesets
265 get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2, :path => ['subversion_test', 'folder'] 300 @project.reload
266 assert_response :success 301 assert_equal NUM_REV, @repository.changesets.count
267 assert_template 'diff' 302 ['inline', 'sbs'].each do |dt|
268 303 get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2,
269 diff = assigns(:diff) 304 :path => ['subversion_test', 'folder'], :type => dt
270 assert_not_nil diff 305 assert_response :success
271 # 2 files modified 306 assert_template 'diff'
272 assert_equal 2, Redmine::UnifiedDiff.new(diff).size 307
273 308 diff = assigns(:diff)
274 assert_tag :tag => 'h2', :content => /2:6/ 309 assert_not_nil diff
310 # 2 files modified
311 assert_equal 2, Redmine::UnifiedDiff.new(diff).size
312 assert_tag :tag => 'h2', :content => /2:6/
313 end
275 end 314 end
276 315
277 def test_annotate 316 def test_annotate
278 @repository.fetch_changesets 317 assert_equal 0, @repository.changesets.count
279 @repository.reload 318 @repository.fetch_changesets
319 @project.reload
320 assert_equal NUM_REV, @repository.changesets.count
280 get :annotate, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'] 321 get :annotate, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
281 assert_response :success 322 assert_response :success
282 assert_template 'annotate' 323 assert_template 'annotate'
283 end 324 end
284 325
285 def test_annotate_at_given_revision 326 def test_annotate_at_given_revision
286 @repository.fetch_changesets 327 assert_equal 0, @repository.changesets.count
287 @repository.reload 328 @repository.fetch_changesets
329 @project.reload
330 assert_equal NUM_REV, @repository.changesets.count
288 get :annotate, :id => PRJ_ID, :rev => 8, :path => ['subversion_test', 'helloworld.c'] 331 get :annotate, :id => PRJ_ID, :rev => 8, :path => ['subversion_test', 'helloworld.c']
289 assert_response :success 332 assert_response :success
290 assert_template 'annotate' 333 assert_template 'annotate'
291 assert_tag :tag => 'h2', :content => /@ 8/ 334 assert_tag :tag => 'h2', :content => /@ 8/
335 end
336
337 def test_destroy_valid_repository
338 @request.session[:user_id] = 1 # admin
339 assert_equal 0, @repository.changesets.count
340 @repository.fetch_changesets
341 @project.reload
342 assert_equal NUM_REV, @repository.changesets.count
343
344 get :destroy, :id => PRJ_ID
345 assert_response 302
346 @project.reload
347 assert_nil @project.repository
348 end
349
350 def test_destroy_invalid_repository
351 @request.session[:user_id] = 1 # admin
352 assert_equal 0, @repository.changesets.count
353 @repository.fetch_changesets
354 @project.reload
355 assert_equal NUM_REV, @repository.changesets.count
356
357 get :destroy, :id => PRJ_ID
358 assert_response 302
359 @project.reload
360 assert_nil @project.repository
361
362 @repository = Repository::Subversion.create(
363 :project => @project,
364 :url => "file:///invalid")
365 assert @repository
366 @repository.fetch_changesets
367 @project.reload
368 assert_equal 0, @repository.changesets.count
369
370 get :destroy, :id => PRJ_ID
371 assert_response 302
372 @project.reload
373 assert_nil @project.repository
292 end 374 end
293 else 375 else
294 puts "Subversion test repository NOT FOUND. Skipping functional tests !!!" 376 puts "Subversion test repository NOT FOUND. Skipping functional tests !!!"
295 def test_fake; assert true end 377 def test_fake; assert true end
296 end 378 end