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