##// END OF EJS Templates
Rails3: scm: subversion: fix error of test_destroy_valid_repository at functional test...
Toshi MARUYAMA -
r7073:f2eb1c3e3f84
parent child
Show More
@@ -1,359 +1,360
1 1 # Redmine - project management software
2 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
3 3 #
4 4 # This program is free software; you can redistribute it and/or
5 5 # modify it under the terms of the GNU General Public License
6 6 # as published by the Free Software Foundation; either version 2
7 7 # of the License, or (at your option) any later version.
8 8 #
9 9 # This program is distributed in the hope that it will be useful,
10 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 12 # GNU General Public License for more details.
13 13 #
14 14 # You should have received a copy of the GNU General Public License
15 15 # along with this program; if not, write to the Free Software
16 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 17
18 18 require File.expand_path('../../test_helper', __FILE__)
19 19 require 'repositories_controller'
20 20
21 21 # Re-raise errors caught by the controller.
22 22 class RepositoriesController; def rescue_action(e) raise e end; end
23 23
24 24 class RepositoriesSubversionControllerTest < ActionController::TestCase
25 25 fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
26 26 :repositories, :issues, :issue_statuses, :changesets, :changes,
27 27 :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
28 28
29 29 PRJ_ID = 3
30 30 NUM_REV = 11
31 31
32 32 def setup
33 33 @controller = RepositoriesController.new
34 34 @request = ActionController::TestRequest.new
35 35 @response = ActionController::TestResponse.new
36 36 Setting.default_language = 'en'
37 37 User.current = nil
38 38
39 39 @project = Project.find(PRJ_ID)
40 40 @repository = Repository::Subversion.create(:project => @project,
41 41 :url => self.class.subversion_repository_url)
42 42 assert @repository
43 43 end
44 44
45 45 if repository_configured?('subversion')
46 46 def test_show
47 47 assert_equal 0, @repository.changesets.count
48 48 @repository.fetch_changesets
49 49 @project.reload
50 50 assert_equal NUM_REV, @repository.changesets.count
51 51 get :show, :id => PRJ_ID
52 52 assert_response :success
53 53 assert_template 'show'
54 54 assert_not_nil assigns(:entries)
55 55 assert_not_nil assigns(:changesets)
56 56 end
57 57
58 58 def test_browse_root
59 59 @repository.fetch_changesets
60 60 @repository.reload
61 61 get :show, :id => PRJ_ID
62 62 assert_response :success
63 63 assert_template 'show'
64 64 assert_not_nil assigns(:entries)
65 65 entry = assigns(:entries).detect {|e| e.name == 'subversion_test'}
66 66 assert_equal 'dir', entry.kind
67 67 end
68 68
69 69 def test_browse_directory
70 70 @repository.fetch_changesets
71 71 @repository.reload
72 72 get :show, :id => PRJ_ID, :path => ['subversion_test']
73 73 assert_response :success
74 74 assert_template 'show'
75 75 assert_not_nil assigns(:entries)
76 76 assert_equal [
77 77 '[folder_with_brackets]', 'folder', '.project',
78 78 'helloworld.c', 'textfile.txt'
79 79 ],
80 80 assigns(:entries).collect(&:name)
81 81 entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'}
82 82 assert_equal 'file', entry.kind
83 83 assert_equal 'subversion_test/helloworld.c', entry.path
84 84 assert_tag :a, :content => 'helloworld.c', :attributes => { :class => /text\-x\-c/ }
85 85 end
86 86
87 87 def test_browse_at_given_revision
88 88 @repository.fetch_changesets
89 89 @repository.reload
90 90 get :show, :id => PRJ_ID, :path => ['subversion_test'], :rev => 4
91 91 assert_response :success
92 92 assert_template 'show'
93 93 assert_not_nil assigns(:entries)
94 94 assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'],
95 95 assigns(:entries).collect(&:name)
96 96 end
97 97
98 98 def test_file_changes
99 99 @repository.fetch_changesets
100 100 @repository.reload
101 101 get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
102 102 assert_response :success
103 103 assert_template 'changes'
104 104
105 105 changesets = assigns(:changesets)
106 106 assert_not_nil changesets
107 107 assert_equal %w(6 3 2), changesets.collect(&:revision)
108 108
109 109 # svn properties displayed with svn >= 1.5 only
110 110 if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0])
111 111 assert_not_nil assigns(:properties)
112 112 assert_equal 'native', assigns(:properties)['svn:eol-style']
113 113 assert_tag :ul,
114 114 :child => { :tag => 'li',
115 115 :child => { :tag => 'b', :content => 'svn:eol-style' },
116 116 :child => { :tag => 'span', :content => 'native' } }
117 117 end
118 118 end
119 119
120 120 def test_directory_changes
121 121 @repository.fetch_changesets
122 122 @repository.reload
123 123 get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ]
124 124 assert_response :success
125 125 assert_template 'changes'
126 126
127 127 changesets = assigns(:changesets)
128 128 assert_not_nil changesets
129 129 assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision)
130 130 end
131 131
132 132 def test_entry
133 133 @repository.fetch_changesets
134 134 @repository.reload
135 135 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
136 136 assert_response :success
137 137 assert_template 'entry'
138 138 end
139 139
140 140 def test_entry_should_send_if_too_big
141 141 @repository.fetch_changesets
142 142 @repository.reload
143 143 # no files in the test repo is larger than 1KB...
144 144 with_settings :file_max_size_displayed => 0 do
145 145 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
146 146 assert_response :success
147 147 assert_template ''
148 148 assert_equal 'attachment; filename="helloworld.c"',
149 149 @response.headers['Content-Disposition']
150 150 end
151 151 end
152 152
153 153 def test_entry_at_given_revision
154 154 @repository.fetch_changesets
155 155 @repository.reload
156 156 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.rb'], :rev => 2
157 157 assert_response :success
158 158 assert_template 'entry'
159 159 # this line was removed in r3 and file was moved in r6
160 160 assert_tag :tag => 'td', :attributes => { :class => /line-code/},
161 161 :content => /Here's the code/
162 162 end
163 163
164 164 def test_entry_not_found
165 165 @repository.fetch_changesets
166 166 @repository.reload
167 167 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'zzz.c']
168 168 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
169 169 :content => /The entry or revision was not found in the repository/
170 170 end
171 171
172 172 def test_entry_download
173 173 @repository.fetch_changesets
174 174 @repository.reload
175 175 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'], :format => 'raw'
176 176 assert_response :success
177 177 assert_template ''
178 178 assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
179 179 end
180 180
181 181 def test_directory_entry
182 182 assert_equal 0, @repository.changesets.count
183 183 @repository.fetch_changesets
184 184 @project.reload
185 185 assert_equal NUM_REV, @repository.changesets.count
186 186 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'folder']
187 187 assert_response :success
188 188 assert_template 'show'
189 189 assert_not_nil assigns(:entry)
190 190 assert_equal 'folder', assigns(:entry).name
191 191 end
192 192
193 193 # TODO: this test needs fixtures.
194 194 def test_revision
195 195 @repository.fetch_changesets
196 196 @repository.reload
197 197 get :revision, :id => 1, :rev => 2
198 198 assert_response :success
199 199 assert_template 'revision'
200 200 assert_tag :tag => 'ul',
201 201 :child => { :tag => 'li',
202 202 # link to the entry at rev 2
203 203 :child => { :tag => 'a',
204 204 :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/test/some/path/in/the/repo'},
205 205 :content => 'repo',
206 206 # link to partial diff
207 207 :sibling => { :tag => 'a',
208 208 :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo' }
209 209 }
210 210 }
211 211 }
212 212 end
213 213
214 214 def test_invalid_revision
215 215 assert_equal 0, @repository.changesets.count
216 216 @repository.fetch_changesets
217 217 @project.reload
218 218 assert_equal NUM_REV, @repository.changesets.count
219 219 get :revision, :id => PRJ_ID, :rev => 'something_weird'
220 220 assert_response 404
221 221 assert_error_tag :content => /was not found/
222 222 end
223 223
224 224 def test_invalid_revision_diff
225 225 get :diff, :id => PRJ_ID, :rev => '1', :rev_to => 'something_weird'
226 226 assert_response 404
227 227 assert_error_tag :content => /was not found/
228 228 end
229 229
230 230 def test_empty_revision
231 231 assert_equal 0, @repository.changesets.count
232 232 @repository.fetch_changesets
233 233 @project.reload
234 234 assert_equal NUM_REV, @repository.changesets.count
235 235 ['', ' ', nil].each do |r|
236 236 get :revision, :id => PRJ_ID, :rev => r
237 237 assert_response 404
238 238 assert_error_tag :content => /was not found/
239 239 end
240 240 end
241 241
242 242 # TODO: this test needs fixtures.
243 243 def test_revision_with_repository_pointing_to_a_subdirectory
244 244 r = Project.find(1).repository
245 245 # Changes repository url to a subdirectory
246 246 r.update_attribute :url, (r.url + '/test/some')
247 247
248 248 get :revision, :id => 1, :rev => 2
249 249 assert_response :success
250 250 assert_template 'revision'
251 251 assert_tag :tag => 'ul',
252 252 :child => { :tag => 'li',
253 253 # link to the entry at rev 2
254 254 :child => { :tag => 'a',
255 255 :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/path/in/the/repo'},
256 256 :content => 'repo',
257 257 # link to partial diff
258 258 :sibling => { :tag => 'a',
259 259 :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo' }
260 260 }
261 261 }
262 262 }
263 263 end
264 264
265 265 def test_revision_diff
266 266 assert_equal 0, @repository.changesets.count
267 267 @repository.fetch_changesets
268 268 @project.reload
269 269 assert_equal NUM_REV, @repository.changesets.count
270 270 ['inline', 'sbs'].each do |dt|
271 271 get :diff, :id => PRJ_ID, :rev => 3, :type => dt
272 272 assert_response :success
273 273 assert_template 'diff'
274 274 assert_tag :tag => 'h2',
275 275 :content => / 3/
276 276 end
277 277 end
278 278
279 279 def test_directory_diff
280 280 assert_equal 0, @repository.changesets.count
281 281 @repository.fetch_changesets
282 282 @project.reload
283 283 assert_equal NUM_REV, @repository.changesets.count
284 284 ['inline', 'sbs'].each do |dt|
285 285 get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2,
286 286 :path => ['subversion_test', 'folder'], :type => dt
287 287 assert_response :success
288 288 assert_template 'diff'
289 289
290 290 diff = assigns(:diff)
291 291 assert_not_nil diff
292 292 # 2 files modified
293 293 assert_equal 2, Redmine::UnifiedDiff.new(diff).size
294 294 assert_tag :tag => 'h2', :content => /2:6/
295 295 end
296 296 end
297 297
298 298 def test_annotate
299 299 assert_equal 0, @repository.changesets.count
300 300 @repository.fetch_changesets
301 301 @project.reload
302 302 assert_equal NUM_REV, @repository.changesets.count
303 303 get :annotate, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
304 304 assert_response :success
305 305 assert_template 'annotate'
306 306 end
307 307
308 308 def test_annotate_at_given_revision
309 309 assert_equal 0, @repository.changesets.count
310 310 @repository.fetch_changesets
311 311 @project.reload
312 312 assert_equal NUM_REV, @repository.changesets.count
313 313 get :annotate, :id => PRJ_ID, :rev => 8, :path => ['subversion_test', 'helloworld.c']
314 314 assert_response :success
315 315 assert_template 'annotate'
316 316 assert_tag :tag => 'h2', :content => /@ 8/
317 317 end
318 318
319 319 def test_destroy_valid_repository
320 320 @request.session[:user_id] = 1 # admin
321 assert_equal 0, @repository.changesets.count
321 322 @repository.fetch_changesets
322 @repository.reload
323 assert @repository.changesets.count > 0
323 @project.reload
324 assert_equal NUM_REV, @repository.changesets.count
324 325
325 326 get :destroy, :id => PRJ_ID
326 327 assert_response 302
327 328 @project.reload
328 329 assert_nil @project.repository
329 330 end
330 331
331 332 def test_destroy_invalid_repository
332 333 @request.session[:user_id] = 1 # admin
333 334 @repository.fetch_changesets
334 335 @repository.reload
335 336 assert @repository.changesets.count > 0
336 337
337 338 get :destroy, :id => PRJ_ID
338 339 assert_response 302
339 340 @project.reload
340 341 assert_nil @project.repository
341 342
342 343 @repository = Repository::Subversion.create(
343 344 :project => @project,
344 345 :url => "file:///invalid")
345 346 assert @repository
346 347 @repository.fetch_changesets
347 348 @repository.reload
348 349 assert_equal 0, @repository.changesets.count
349 350
350 351 get :destroy, :id => PRJ_ID
351 352 assert_response 302
352 353 @project.reload
353 354 assert_nil @project.repository
354 355 end
355 356 else
356 357 puts "Subversion test repository NOT FOUND. Skipping functional tests !!!"
357 358 def test_fake; assert true end
358 359 end
359 360 end
General Comments 0
You need to be logged in to leave comments. Login now