##// END OF EJS Templates
Rails3: scm: subversion: fix error of test_browse_root at functional test...
Toshi MARUYAMA -
r7075:89476adc7f5b
parent child
Show More
@@ -1,361 +1,363
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 assert_equal 0, @repository.changesets.count
59 60 @repository.fetch_changesets
60 @repository.reload
61 @project.reload
62 assert_equal NUM_REV, @repository.changesets.count
61 63 get :show, :id => PRJ_ID
62 64 assert_response :success
63 65 assert_template 'show'
64 66 assert_not_nil assigns(:entries)
65 67 entry = assigns(:entries).detect {|e| e.name == 'subversion_test'}
66 68 assert_equal 'dir', entry.kind
67 69 end
68 70
69 71 def test_browse_directory
70 72 @repository.fetch_changesets
71 73 @repository.reload
72 74 get :show, :id => PRJ_ID, :path => ['subversion_test']
73 75 assert_response :success
74 76 assert_template 'show'
75 77 assert_not_nil assigns(:entries)
76 78 assert_equal [
77 79 '[folder_with_brackets]', 'folder', '.project',
78 80 'helloworld.c', 'textfile.txt'
79 81 ],
80 82 assigns(:entries).collect(&:name)
81 83 entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'}
82 84 assert_equal 'file', entry.kind
83 85 assert_equal 'subversion_test/helloworld.c', entry.path
84 86 assert_tag :a, :content => 'helloworld.c', :attributes => { :class => /text\-x\-c/ }
85 87 end
86 88
87 89 def test_browse_at_given_revision
88 90 @repository.fetch_changesets
89 91 @repository.reload
90 92 get :show, :id => PRJ_ID, :path => ['subversion_test'], :rev => 4
91 93 assert_response :success
92 94 assert_template 'show'
93 95 assert_not_nil assigns(:entries)
94 96 assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'],
95 97 assigns(:entries).collect(&:name)
96 98 end
97 99
98 100 def test_file_changes
99 101 @repository.fetch_changesets
100 102 @repository.reload
101 103 get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder', 'helloworld.rb' ]
102 104 assert_response :success
103 105 assert_template 'changes'
104 106
105 107 changesets = assigns(:changesets)
106 108 assert_not_nil changesets
107 109 assert_equal %w(6 3 2), changesets.collect(&:revision)
108 110
109 111 # svn properties displayed with svn >= 1.5 only
110 112 if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0])
111 113 assert_not_nil assigns(:properties)
112 114 assert_equal 'native', assigns(:properties)['svn:eol-style']
113 115 assert_tag :ul,
114 116 :child => { :tag => 'li',
115 117 :child => { :tag => 'b', :content => 'svn:eol-style' },
116 118 :child => { :tag => 'span', :content => 'native' } }
117 119 end
118 120 end
119 121
120 122 def test_directory_changes
121 123 @repository.fetch_changesets
122 124 @repository.reload
123 125 get :changes, :id => PRJ_ID, :path => ['subversion_test', 'folder' ]
124 126 assert_response :success
125 127 assert_template 'changes'
126 128
127 129 changesets = assigns(:changesets)
128 130 assert_not_nil changesets
129 131 assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision)
130 132 end
131 133
132 134 def test_entry
133 135 @repository.fetch_changesets
134 136 @repository.reload
135 137 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
136 138 assert_response :success
137 139 assert_template 'entry'
138 140 end
139 141
140 142 def test_entry_should_send_if_too_big
141 143 @repository.fetch_changesets
142 144 @repository.reload
143 145 # no files in the test repo is larger than 1KB...
144 146 with_settings :file_max_size_displayed => 0 do
145 147 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
146 148 assert_response :success
147 149 assert_template ''
148 150 assert_equal 'attachment; filename="helloworld.c"',
149 151 @response.headers['Content-Disposition']
150 152 end
151 153 end
152 154
153 155 def test_entry_at_given_revision
154 156 @repository.fetch_changesets
155 157 @repository.reload
156 158 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.rb'], :rev => 2
157 159 assert_response :success
158 160 assert_template 'entry'
159 161 # this line was removed in r3 and file was moved in r6
160 162 assert_tag :tag => 'td', :attributes => { :class => /line-code/},
161 163 :content => /Here's the code/
162 164 end
163 165
164 166 def test_entry_not_found
165 167 @repository.fetch_changesets
166 168 @repository.reload
167 169 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'zzz.c']
168 170 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
169 171 :content => /The entry or revision was not found in the repository/
170 172 end
171 173
172 174 def test_entry_download
173 175 @repository.fetch_changesets
174 176 @repository.reload
175 177 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c'], :format => 'raw'
176 178 assert_response :success
177 179 assert_template ''
178 180 assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
179 181 end
180 182
181 183 def test_directory_entry
182 184 assert_equal 0, @repository.changesets.count
183 185 @repository.fetch_changesets
184 186 @project.reload
185 187 assert_equal NUM_REV, @repository.changesets.count
186 188 get :entry, :id => PRJ_ID, :path => ['subversion_test', 'folder']
187 189 assert_response :success
188 190 assert_template 'show'
189 191 assert_not_nil assigns(:entry)
190 192 assert_equal 'folder', assigns(:entry).name
191 193 end
192 194
193 195 # TODO: this test needs fixtures.
194 196 def test_revision
195 197 @repository.fetch_changesets
196 198 @repository.reload
197 199 get :revision, :id => 1, :rev => 2
198 200 assert_response :success
199 201 assert_template 'revision'
200 202 assert_tag :tag => 'ul',
201 203 :child => { :tag => 'li',
202 204 # link to the entry at rev 2
203 205 :child => { :tag => 'a',
204 206 :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/test/some/path/in/the/repo'},
205 207 :content => 'repo',
206 208 # link to partial diff
207 209 :sibling => { :tag => 'a',
208 210 :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo' }
209 211 }
210 212 }
211 213 }
212 214 end
213 215
214 216 def test_invalid_revision
215 217 assert_equal 0, @repository.changesets.count
216 218 @repository.fetch_changesets
217 219 @project.reload
218 220 assert_equal NUM_REV, @repository.changesets.count
219 221 get :revision, :id => PRJ_ID, :rev => 'something_weird'
220 222 assert_response 404
221 223 assert_error_tag :content => /was not found/
222 224 end
223 225
224 226 def test_invalid_revision_diff
225 227 get :diff, :id => PRJ_ID, :rev => '1', :rev_to => 'something_weird'
226 228 assert_response 404
227 229 assert_error_tag :content => /was not found/
228 230 end
229 231
230 232 def test_empty_revision
231 233 assert_equal 0, @repository.changesets.count
232 234 @repository.fetch_changesets
233 235 @project.reload
234 236 assert_equal NUM_REV, @repository.changesets.count
235 237 ['', ' ', nil].each do |r|
236 238 get :revision, :id => PRJ_ID, :rev => r
237 239 assert_response 404
238 240 assert_error_tag :content => /was not found/
239 241 end
240 242 end
241 243
242 244 # TODO: this test needs fixtures.
243 245 def test_revision_with_repository_pointing_to_a_subdirectory
244 246 r = Project.find(1).repository
245 247 # Changes repository url to a subdirectory
246 248 r.update_attribute :url, (r.url + '/test/some')
247 249
248 250 get :revision, :id => 1, :rev => 2
249 251 assert_response :success
250 252 assert_template 'revision'
251 253 assert_tag :tag => 'ul',
252 254 :child => { :tag => 'li',
253 255 # link to the entry at rev 2
254 256 :child => { :tag => 'a',
255 257 :attributes => {:href => '/projects/ecookbook/repository/revisions/2/entry/path/in/the/repo'},
256 258 :content => 'repo',
257 259 # link to partial diff
258 260 :sibling => { :tag => 'a',
259 261 :attributes => { :href => '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo' }
260 262 }
261 263 }
262 264 }
263 265 end
264 266
265 267 def test_revision_diff
266 268 assert_equal 0, @repository.changesets.count
267 269 @repository.fetch_changesets
268 270 @project.reload
269 271 assert_equal NUM_REV, @repository.changesets.count
270 272 ['inline', 'sbs'].each do |dt|
271 273 get :diff, :id => PRJ_ID, :rev => 3, :type => dt
272 274 assert_response :success
273 275 assert_template 'diff'
274 276 assert_tag :tag => 'h2',
275 277 :content => / 3/
276 278 end
277 279 end
278 280
279 281 def test_directory_diff
280 282 assert_equal 0, @repository.changesets.count
281 283 @repository.fetch_changesets
282 284 @project.reload
283 285 assert_equal NUM_REV, @repository.changesets.count
284 286 ['inline', 'sbs'].each do |dt|
285 287 get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2,
286 288 :path => ['subversion_test', 'folder'], :type => dt
287 289 assert_response :success
288 290 assert_template 'diff'
289 291
290 292 diff = assigns(:diff)
291 293 assert_not_nil diff
292 294 # 2 files modified
293 295 assert_equal 2, Redmine::UnifiedDiff.new(diff).size
294 296 assert_tag :tag => 'h2', :content => /2:6/
295 297 end
296 298 end
297 299
298 300 def test_annotate
299 301 assert_equal 0, @repository.changesets.count
300 302 @repository.fetch_changesets
301 303 @project.reload
302 304 assert_equal NUM_REV, @repository.changesets.count
303 305 get :annotate, :id => PRJ_ID, :path => ['subversion_test', 'helloworld.c']
304 306 assert_response :success
305 307 assert_template 'annotate'
306 308 end
307 309
308 310 def test_annotate_at_given_revision
309 311 assert_equal 0, @repository.changesets.count
310 312 @repository.fetch_changesets
311 313 @project.reload
312 314 assert_equal NUM_REV, @repository.changesets.count
313 315 get :annotate, :id => PRJ_ID, :rev => 8, :path => ['subversion_test', 'helloworld.c']
314 316 assert_response :success
315 317 assert_template 'annotate'
316 318 assert_tag :tag => 'h2', :content => /@ 8/
317 319 end
318 320
319 321 def test_destroy_valid_repository
320 322 @request.session[:user_id] = 1 # admin
321 323 assert_equal 0, @repository.changesets.count
322 324 @repository.fetch_changesets
323 325 @project.reload
324 326 assert_equal NUM_REV, @repository.changesets.count
325 327
326 328 get :destroy, :id => PRJ_ID
327 329 assert_response 302
328 330 @project.reload
329 331 assert_nil @project.repository
330 332 end
331 333
332 334 def test_destroy_invalid_repository
333 335 @request.session[:user_id] = 1 # admin
334 336 assert_equal 0, @repository.changesets.count
335 337 @repository.fetch_changesets
336 338 @project.reload
337 339 assert_equal NUM_REV, @repository.changesets.count
338 340
339 341 get :destroy, :id => PRJ_ID
340 342 assert_response 302
341 343 @project.reload
342 344 assert_nil @project.repository
343 345
344 346 @repository = Repository::Subversion.create(
345 347 :project => @project,
346 348 :url => "file:///invalid")
347 349 assert @repository
348 350 @repository.fetch_changesets
349 351 @project.reload
350 352 assert_equal 0, @repository.changesets.count
351 353
352 354 get :destroy, :id => PRJ_ID
353 355 assert_response 302
354 356 @project.reload
355 357 assert_nil @project.repository
356 358 end
357 359 else
358 360 puts "Subversion test repository NOT FOUND. Skipping functional tests !!!"
359 361 def test_fake; assert true end
360 362 end
361 363 end
General Comments 0
You need to be logged in to leave comments. Login now