##// END OF EJS Templates
Merged r12424 from trunk to 2.4-stable....
Toshi MARUYAMA -
r12150:d05042fbb52a
parent child
Show More
@@ -1,425 +1,425
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
2 # Copyright (C) 2006-2013 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
19
20 class RepositoriesSubversionControllerTest < ActionController::TestCase
20 class RepositoriesSubversionControllerTest < ActionController::TestCase
21 tests RepositoriesController
21 tests RepositoriesController
22
22
23 fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
23 fixtures :projects, :users, :roles, :members, :member_roles, :enabled_modules,
24 :repositories, :issues, :issue_statuses, :changesets, :changes,
24 :repositories, :issues, :issue_statuses, :changesets, :changes,
25 :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
25 :issue_categories, :enumerations, :custom_fields, :custom_values, :trackers
26
26
27 PRJ_ID = 3
27 PRJ_ID = 3
28 NUM_REV = 11
28 NUM_REV = 11
29
29
30 def setup
30 def setup
31 Setting.default_language = 'en'
31 Setting.default_language = 'en'
32 User.current = nil
32 User.current = nil
33
33
34 @project = Project.find(PRJ_ID)
34 @project = Project.find(PRJ_ID)
35 @repository = Repository::Subversion.create(:project => @project,
35 @repository = Repository::Subversion.create(:project => @project,
36 :url => self.class.subversion_repository_url)
36 :url => self.class.subversion_repository_url)
37 assert @repository
37 assert @repository
38 end
38 end
39
39
40 if repository_configured?('subversion')
40 if repository_configured?('subversion')
41 def test_new
41 def test_new
42 @request.session[:user_id] = 1
42 @request.session[:user_id] = 1
43 @project.repository.destroy
43 @project.repository.destroy
44 get :new, :project_id => 'subproject1', :repository_scm => 'Subversion'
44 get :new, :project_id => 'subproject1', :repository_scm => 'Subversion'
45 assert_response :success
45 assert_response :success
46 assert_template 'new'
46 assert_template 'new'
47 assert_kind_of Repository::Subversion, assigns(:repository)
47 assert_kind_of Repository::Subversion, assigns(:repository)
48 assert assigns(:repository).new_record?
48 assert assigns(:repository).new_record?
49 end
49 end
50
50
51 def test_show
51 def test_show
52 assert_equal 0, @repository.changesets.count
52 assert_equal 0, @repository.changesets.count
53 @repository.fetch_changesets
53 @repository.fetch_changesets
54 @project.reload
54 @project.reload
55 assert_equal NUM_REV, @repository.changesets.count
55 assert_equal NUM_REV, @repository.changesets.count
56 get :show, :id => PRJ_ID
56 get :show, :id => PRJ_ID
57 assert_response :success
57 assert_response :success
58 assert_template 'show'
58 assert_template 'show'
59 assert_not_nil assigns(:entries)
59 assert_not_nil assigns(:entries)
60 assert_not_nil assigns(:changesets)
60 assert_not_nil assigns(:changesets)
61
61
62 entry = assigns(:entries).detect {|e| e.name == 'subversion_test'}
62 entry = assigns(:entries).detect {|e| e.name == 'subversion_test'}
63 assert_not_nil entry
63 assert_not_nil entry
64 assert_equal 'dir', entry.kind
64 assert_equal 'dir', entry.kind
65 assert_select 'tr.dir a[href=/projects/subproject1/repository/show/subversion_test]'
65 assert_select 'tr.dir a[href=/projects/subproject1/repository/show/subversion_test]'
66
66
67 assert_tag 'input', :attributes => {:name => 'rev'}
67 assert_tag 'input', :attributes => {:name => 'rev'}
68 assert_tag 'a', :content => 'Statistics'
68 assert_tag 'a', :content => 'Statistics'
69 assert_tag 'a', :content => 'Atom'
69 assert_tag 'a', :content => 'Atom'
70 assert_tag :tag => 'a',
70 assert_tag :tag => 'a',
71 :attributes => {:href => '/projects/subproject1/repository'},
71 :attributes => {:href => '/projects/subproject1/repository'},
72 :content => 'root'
72 :content => 'root'
73 end
73 end
74
74
75 def test_show_non_default
75 def test_show_non_default
76 Repository::Subversion.create(:project => @project,
76 Repository::Subversion.create(:project => @project,
77 :url => self.class.subversion_repository_url,
77 :url => self.class.subversion_repository_url,
78 :is_default => false, :identifier => 'svn')
78 :is_default => false, :identifier => 'svn')
79
79
80 get :show, :id => PRJ_ID, :repository_id => 'svn'
80 get :show, :id => PRJ_ID, :repository_id => 'svn'
81 assert_response :success
81 assert_response :success
82 assert_template 'show'
82 assert_template 'show'
83 assert_select 'tr.dir a[href=/projects/subproject1/repository/svn/show/subversion_test]'
83 assert_select 'tr.dir a[href=/projects/subproject1/repository/svn/show/subversion_test]'
84 # Repository menu should link to the main repo
84 # Repository menu should link to the main repo
85 assert_select '#main-menu a[href=/projects/subproject1/repository]'
85 assert_select '#main-menu a[href=/projects/subproject1/repository]'
86 end
86 end
87
87
88 def test_browse_directory
88 def test_browse_directory
89 assert_equal 0, @repository.changesets.count
89 assert_equal 0, @repository.changesets.count
90 @repository.fetch_changesets
90 @repository.fetch_changesets
91 @project.reload
91 @project.reload
92 assert_equal NUM_REV, @repository.changesets.count
92 assert_equal NUM_REV, @repository.changesets.count
93 get :show, :id => PRJ_ID, :path => repository_path_hash(['subversion_test'])[:param]
93 get :show, :id => PRJ_ID, :path => repository_path_hash(['subversion_test'])[:param]
94 assert_response :success
94 assert_response :success
95 assert_template 'show'
95 assert_template 'show'
96 assert_not_nil assigns(:entries)
96 assert_not_nil assigns(:entries)
97 assert_equal [
97 assert_equal [
98 '[folder_with_brackets]', 'folder', '.project',
98 '[folder_with_brackets]', 'folder', '.project',
99 'helloworld.c', 'textfile.txt'
99 'helloworld.c', 'textfile.txt'
100 ],
100 ],
101 assigns(:entries).collect(&:name)
101 assigns(:entries).collect(&:name)
102 entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'}
102 entry = assigns(:entries).detect {|e| e.name == 'helloworld.c'}
103 assert_equal 'file', entry.kind
103 assert_equal 'file', entry.kind
104 assert_equal 'subversion_test/helloworld.c', entry.path
104 assert_equal 'subversion_test/helloworld.c', entry.path
105 assert_tag :a, :content => 'helloworld.c', :attributes => { :class => /text\-x\-c/ }
105 assert_tag :a, :content => 'helloworld.c', :attributes => { :class => /text\-x\-c/ }
106 end
106 end
107
107
108 def test_browse_at_given_revision
108 def test_browse_at_given_revision
109 assert_equal 0, @repository.changesets.count
109 assert_equal 0, @repository.changesets.count
110 @repository.fetch_changesets
110 @repository.fetch_changesets
111 @project.reload
111 @project.reload
112 assert_equal NUM_REV, @repository.changesets.count
112 assert_equal NUM_REV, @repository.changesets.count
113 get :show, :id => PRJ_ID, :path => repository_path_hash(['subversion_test'])[:param],
113 get :show, :id => PRJ_ID, :path => repository_path_hash(['subversion_test'])[:param],
114 :rev => 4
114 :rev => 4
115 assert_response :success
115 assert_response :success
116 assert_template 'show'
116 assert_template 'show'
117 assert_not_nil assigns(:entries)
117 assert_not_nil assigns(:entries)
118 assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'],
118 assert_equal ['folder', '.project', 'helloworld.c', 'helloworld.rb', 'textfile.txt'],
119 assigns(:entries).collect(&:name)
119 assigns(:entries).collect(&:name)
120 end
120 end
121
121
122 def test_file_changes
122 def test_file_changes
123 assert_equal 0, @repository.changesets.count
123 assert_equal 0, @repository.changesets.count
124 @repository.fetch_changesets
124 @repository.fetch_changesets
125 @project.reload
125 @project.reload
126 assert_equal NUM_REV, @repository.changesets.count
126 assert_equal NUM_REV, @repository.changesets.count
127 get :changes, :id => PRJ_ID,
127 get :changes, :id => PRJ_ID,
128 :path => repository_path_hash(['subversion_test', 'folder', 'helloworld.rb'])[:param]
128 :path => repository_path_hash(['subversion_test', 'folder', 'helloworld.rb'])[:param]
129 assert_response :success
129 assert_response :success
130 assert_template 'changes'
130 assert_template 'changes'
131
131
132 changesets = assigns(:changesets)
132 changesets = assigns(:changesets)
133 assert_not_nil changesets
133 assert_not_nil changesets
134 assert_equal %w(6 3 2), changesets.collect(&:revision)
134 assert_equal %w(6 3 2), changesets.collect(&:revision)
135
135
136 # svn properties displayed with svn >= 1.5 only
136 # svn properties displayed with svn >= 1.5 only
137 if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0])
137 if Redmine::Scm::Adapters::SubversionAdapter.client_version_above?([1, 5, 0])
138 assert_not_nil assigns(:properties)
138 assert_not_nil assigns(:properties)
139 assert_equal 'native', assigns(:properties)['svn:eol-style']
139 assert_equal 'native', assigns(:properties)['svn:eol-style']
140 assert_tag :ul,
140 assert_tag :ul,
141 :child => { :tag => 'li',
141 :child => { :tag => 'li',
142 :child => { :tag => 'b', :content => 'svn:eol-style' },
142 :child => { :tag => 'b', :content => 'svn:eol-style' },
143 :child => { :tag => 'span', :content => 'native' } }
143 :child => { :tag => 'span', :content => 'native' } }
144 end
144 end
145 end
145 end
146
146
147 def test_directory_changes
147 def test_directory_changes
148 assert_equal 0, @repository.changesets.count
148 assert_equal 0, @repository.changesets.count
149 @repository.fetch_changesets
149 @repository.fetch_changesets
150 @project.reload
150 @project.reload
151 assert_equal NUM_REV, @repository.changesets.count
151 assert_equal NUM_REV, @repository.changesets.count
152 get :changes, :id => PRJ_ID,
152 get :changes, :id => PRJ_ID,
153 :path => repository_path_hash(['subversion_test', 'folder'])[:param]
153 :path => repository_path_hash(['subversion_test', 'folder'])[:param]
154 assert_response :success
154 assert_response :success
155 assert_template 'changes'
155 assert_template 'changes'
156
156
157 changesets = assigns(:changesets)
157 changesets = assigns(:changesets)
158 assert_not_nil changesets
158 assert_not_nil changesets
159 assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision)
159 assert_equal %w(10 9 7 6 5 2), changesets.collect(&:revision)
160 end
160 end
161
161
162 def test_entry
162 def test_entry
163 assert_equal 0, @repository.changesets.count
163 assert_equal 0, @repository.changesets.count
164 @repository.fetch_changesets
164 @repository.fetch_changesets
165 @project.reload
165 @project.reload
166 assert_equal NUM_REV, @repository.changesets.count
166 assert_equal NUM_REV, @repository.changesets.count
167 get :entry, :id => PRJ_ID,
167 get :entry, :id => PRJ_ID,
168 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
168 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
169 assert_response :success
169 assert_response :success
170 assert_template 'entry'
170 assert_template 'entry'
171 end
171 end
172
172
173 def test_entry_should_send_if_too_big
173 def test_entry_should_send_if_too_big
174 assert_equal 0, @repository.changesets.count
174 assert_equal 0, @repository.changesets.count
175 @repository.fetch_changesets
175 @repository.fetch_changesets
176 @project.reload
176 @project.reload
177 assert_equal NUM_REV, @repository.changesets.count
177 assert_equal NUM_REV, @repository.changesets.count
178 # no files in the test repo is larger than 1KB...
178 # no files in the test repo is larger than 1KB...
179 with_settings :file_max_size_displayed => 0 do
179 with_settings :file_max_size_displayed => 0 do
180 get :entry, :id => PRJ_ID,
180 get :entry, :id => PRJ_ID,
181 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
181 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
182 assert_response :success
182 assert_response :success
183 assert_equal 'attachment; filename="helloworld.c"',
183 assert_equal 'attachment; filename="helloworld.c"',
184 @response.headers['Content-Disposition']
184 @response.headers['Content-Disposition']
185 end
185 end
186 end
186 end
187
187
188 def test_entry_should_send_images_inline
188 def test_entry_should_send_images_inline
189 get :entry, :id => PRJ_ID,
189 get :entry, :id => PRJ_ID,
190 :path => repository_path_hash(['subversion_test', 'folder', 'subfolder', 'rubylogo.gif'])[:param]
190 :path => repository_path_hash(['subversion_test', 'folder', 'subfolder', 'rubylogo.gif'])[:param]
191 assert_response :success
191 assert_response :success
192 assert_equal 'inline; filename="rubylogo.gif"', response.headers['Content-Disposition']
192 assert_equal 'inline; filename="rubylogo.gif"', response.headers['Content-Disposition']
193 end
193 end
194
194
195 def test_entry_at_given_revision
195 def test_entry_at_given_revision
196 assert_equal 0, @repository.changesets.count
196 assert_equal 0, @repository.changesets.count
197 @repository.fetch_changesets
197 @repository.fetch_changesets
198 @project.reload
198 @project.reload
199 assert_equal NUM_REV, @repository.changesets.count
199 assert_equal NUM_REV, @repository.changesets.count
200 get :entry, :id => PRJ_ID,
200 get :entry, :id => PRJ_ID,
201 :path => repository_path_hash(['subversion_test', 'helloworld.rb'])[:param],
201 :path => repository_path_hash(['subversion_test', 'helloworld.rb'])[:param],
202 :rev => 2
202 :rev => 2
203 assert_response :success
203 assert_response :success
204 assert_template 'entry'
204 assert_template 'entry'
205 # this line was removed in r3 and file was moved in r6
205 # this line was removed in r3 and file was moved in r6
206 assert_tag :tag => 'td', :attributes => { :class => /line-code/},
206 assert_tag :tag => 'td', :attributes => { :class => /line-code/},
207 :content => /Here's the code/
207 :content => /Here's the code/
208 end
208 end
209
209
210 def test_entry_not_found
210 def test_entry_not_found
211 assert_equal 0, @repository.changesets.count
211 assert_equal 0, @repository.changesets.count
212 @repository.fetch_changesets
212 @repository.fetch_changesets
213 @project.reload
213 @project.reload
214 assert_equal NUM_REV, @repository.changesets.count
214 assert_equal NUM_REV, @repository.changesets.count
215 get :entry, :id => PRJ_ID,
215 get :entry, :id => PRJ_ID,
216 :path => repository_path_hash(['subversion_test', 'zzz.c'])[:param]
216 :path => repository_path_hash(['subversion_test', 'zzz.c'])[:param]
217 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
217 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
218 :content => /The entry or revision was not found in the repository/
218 :content => /The entry or revision was not found in the repository/
219 end
219 end
220
220
221 def test_entry_download
221 def test_entry_download
222 assert_equal 0, @repository.changesets.count
222 assert_equal 0, @repository.changesets.count
223 @repository.fetch_changesets
223 @repository.fetch_changesets
224 @project.reload
224 @project.reload
225 assert_equal NUM_REV, @repository.changesets.count
225 assert_equal NUM_REV, @repository.changesets.count
226 get :raw, :id => PRJ_ID,
226 get :raw, :id => PRJ_ID,
227 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
227 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
228 assert_response :success
228 assert_response :success
229 assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
229 assert_equal 'attachment; filename="helloworld.c"', @response.headers['Content-Disposition']
230 end
230 end
231
231
232 def test_directory_entry
232 def test_directory_entry
233 assert_equal 0, @repository.changesets.count
233 assert_equal 0, @repository.changesets.count
234 @repository.fetch_changesets
234 @repository.fetch_changesets
235 @project.reload
235 @project.reload
236 assert_equal NUM_REV, @repository.changesets.count
236 assert_equal NUM_REV, @repository.changesets.count
237 get :entry, :id => PRJ_ID,
237 get :entry, :id => PRJ_ID,
238 :path => repository_path_hash(['subversion_test', 'folder'])[:param]
238 :path => repository_path_hash(['subversion_test', 'folder'])[:param]
239 assert_response :success
239 assert_response :success
240 assert_template 'show'
240 assert_template 'show'
241 assert_not_nil assigns(:entry)
241 assert_not_nil assigns(:entry)
242 assert_equal 'folder', assigns(:entry).name
242 assert_equal 'folder', assigns(:entry).name
243 end
243 end
244
244
245 # TODO: this test needs fixtures.
245 # TODO: this test needs fixtures.
246 def test_revision
246 def test_revision
247 get :revision, :id => 1, :rev => 2
247 get :revision, :id => 1, :rev => 2
248 assert_response :success
248 assert_response :success
249 assert_template 'revision'
249 assert_template 'revision'
250
250
251 assert_select 'ul' do
251 assert_select 'ul' do
252 assert_select 'li' do
252 assert_select 'li' do
253 # link to the entry at rev 2
253 # link to the entry at rev 2
254 assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/entry/test/some/path/in/the/repo', :text => 'repo'
254 assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/entry/test/some/path/in/the/repo', :text => 'repo'
255 # link to partial diff
255 # link to partial diff
256 assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo'
256 assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/diff/test/some/path/in/the/repo'
257 end
257 end
258 end
258 end
259 end
259 end
260
260
261 def test_invalid_revision
261 def test_invalid_revision
262 assert_equal 0, @repository.changesets.count
262 assert_equal 0, @repository.changesets.count
263 @repository.fetch_changesets
263 @repository.fetch_changesets
264 @project.reload
264 @project.reload
265 assert_equal NUM_REV, @repository.changesets.count
265 assert_equal NUM_REV, @repository.changesets.count
266 get :revision, :id => PRJ_ID, :rev => 'something_weird'
266 get :revision, :id => PRJ_ID, :rev => 'something_weird'
267 assert_response 404
267 assert_response 404
268 assert_error_tag :content => /was not found/
268 assert_error_tag :content => /was not found/
269 end
269 end
270
270
271 def test_invalid_revision_diff
271 def test_invalid_revision_diff
272 get :diff, :id => PRJ_ID, :rev => '1', :rev_to => 'something_weird'
272 get :diff, :id => PRJ_ID, :rev => '1', :rev_to => 'something_weird'
273 assert_response 404
273 assert_response 404
274 assert_error_tag :content => /was not found/
274 assert_error_tag :content => /was not found/
275 end
275 end
276
276
277 def test_empty_revision
277 def test_empty_revision
278 assert_equal 0, @repository.changesets.count
278 assert_equal 0, @repository.changesets.count
279 @repository.fetch_changesets
279 @repository.fetch_changesets
280 @project.reload
280 @project.reload
281 assert_equal NUM_REV, @repository.changesets.count
281 assert_equal NUM_REV, @repository.changesets.count
282 ['', ' ', nil].each do |r|
282 ['', ' ', nil].each do |r|
283 get :revision, :id => PRJ_ID, :rev => r
283 get :revision, :id => PRJ_ID, :rev => r
284 assert_response 404
284 assert_response 404
285 assert_error_tag :content => /was not found/
285 assert_error_tag :content => /was not found/
286 end
286 end
287 end
287 end
288
288
289 # TODO: this test needs fixtures.
289 # TODO: this test needs fixtures.
290 def test_revision_with_repository_pointing_to_a_subdirectory
290 def test_revision_with_repository_pointing_to_a_subdirectory
291 r = Project.find(1).repository
291 r = Project.find(1).repository
292 # Changes repository url to a subdirectory
292 # Changes repository url to a subdirectory
293 r.update_attribute :url, (r.url + '/test/some')
293 r.update_attribute :url, (r.url + '/test/some')
294
294
295 get :revision, :id => 1, :rev => 2
295 get :revision, :id => 1, :rev => 2
296 assert_response :success
296 assert_response :success
297 assert_template 'revision'
297 assert_template 'revision'
298
298
299 assert_select 'ul' do
299 assert_select 'ul' do
300 assert_select 'li' do
300 assert_select 'li' do
301 # link to the entry at rev 2
301 # link to the entry at rev 2
302 assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/entry/path/in/the/repo', :text => 'repo'
302 assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/entry/path/in/the/repo', :text => 'repo'
303 # link to partial diff
303 # link to partial diff
304 assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo'
304 assert_select 'a[href=?]', '/projects/ecookbook/repository/revisions/2/diff/path/in/the/repo'
305 end
305 end
306 end
306 end
307 end
307 end
308
308
309 def test_revision_diff
309 def test_revision_diff
310 assert_equal 0, @repository.changesets.count
310 assert_equal 0, @repository.changesets.count
311 @repository.fetch_changesets
311 @repository.fetch_changesets
312 @project.reload
312 @project.reload
313 assert_equal NUM_REV, @repository.changesets.count
313 assert_equal NUM_REV, @repository.changesets.count
314 ['inline', 'sbs'].each do |dt|
314 ['inline', 'sbs'].each do |dt|
315 get :diff, :id => PRJ_ID, :rev => 3, :type => dt
315 get :diff, :id => PRJ_ID, :rev => 3, :type => dt
316 assert_response :success
316 assert_response :success
317 assert_template 'diff'
317 assert_template 'diff'
318 assert_select 'h2', :text => /Revision 3/
318 assert_select 'h2', :text => /Revision 3/
319 assert_select 'th.filename', :text => 'subversion_test/textfile.txt'
319 assert_select 'th.filename', :text => 'subversion_test/textfile.txt'
320 end
320 end
321 end
321 end
322
322
323 def test_revision_diff_raw_format
323 def test_revision_diff_raw_format
324 assert_equal 0, @repository.changesets.count
324 assert_equal 0, @repository.changesets.count
325 @repository.fetch_changesets
325 @repository.fetch_changesets
326 @project.reload
326 @project.reload
327 assert_equal NUM_REV, @repository.changesets.count
327 assert_equal NUM_REV, @repository.changesets.count
328
328
329 get :diff, :id => PRJ_ID, :rev => 3, :format => 'diff'
329 get :diff, :id => PRJ_ID, :rev => 5, :format => 'diff'
330 assert_response :success
330 assert_response :success
331 assert_equal 'text/x-patch', @response.content_type
331 assert_equal 'text/x-patch', @response.content_type
332 assert_equal 'Index: subversion_test/textfile.txt', @response.body.split(/\r?\n/).first
332 assert_equal 'Index: subversion_test/folder/greeter.rb', @response.body.split(/\r?\n/).first
333 end
333 end
334
334
335 def test_directory_diff
335 def test_directory_diff
336 assert_equal 0, @repository.changesets.count
336 assert_equal 0, @repository.changesets.count
337 @repository.fetch_changesets
337 @repository.fetch_changesets
338 @project.reload
338 @project.reload
339 assert_equal NUM_REV, @repository.changesets.count
339 assert_equal NUM_REV, @repository.changesets.count
340 ['inline', 'sbs'].each do |dt|
340 ['inline', 'sbs'].each do |dt|
341 get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2,
341 get :diff, :id => PRJ_ID, :rev => 6, :rev_to => 2,
342 :path => repository_path_hash(['subversion_test', 'folder'])[:param],
342 :path => repository_path_hash(['subversion_test', 'folder'])[:param],
343 :type => dt
343 :type => dt
344 assert_response :success
344 assert_response :success
345 assert_template 'diff'
345 assert_template 'diff'
346
346
347 diff = assigns(:diff)
347 diff = assigns(:diff)
348 assert_not_nil diff
348 assert_not_nil diff
349 # 2 files modified
349 # 2 files modified
350 assert_equal 2, Redmine::UnifiedDiff.new(diff).size
350 assert_equal 2, Redmine::UnifiedDiff.new(diff).size
351 assert_tag :tag => 'h2', :content => /2:6/
351 assert_tag :tag => 'h2', :content => /2:6/
352 end
352 end
353 end
353 end
354
354
355 def test_annotate
355 def test_annotate
356 assert_equal 0, @repository.changesets.count
356 assert_equal 0, @repository.changesets.count
357 @repository.fetch_changesets
357 @repository.fetch_changesets
358 @project.reload
358 @project.reload
359 assert_equal NUM_REV, @repository.changesets.count
359 assert_equal NUM_REV, @repository.changesets.count
360 get :annotate, :id => PRJ_ID,
360 get :annotate, :id => PRJ_ID,
361 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
361 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
362 assert_response :success
362 assert_response :success
363 assert_template 'annotate'
363 assert_template 'annotate'
364
364
365 assert_select 'tr' do
365 assert_select 'tr' do
366 assert_select 'th.line-num', :text => '1'
366 assert_select 'th.line-num', :text => '1'
367 assert_select 'td.revision', :text => '4'
367 assert_select 'td.revision', :text => '4'
368 assert_select 'td.author', :text => 'jp'
368 assert_select 'td.author', :text => 'jp'
369 assert_select 'td', :text => /stdio.h/
369 assert_select 'td', :text => /stdio.h/
370 end
370 end
371 # Same revision
371 # Same revision
372 assert_select 'tr' do
372 assert_select 'tr' do
373 assert_select 'th.line-num', :text => '2'
373 assert_select 'th.line-num', :text => '2'
374 assert_select 'td.revision', :text => ''
374 assert_select 'td.revision', :text => ''
375 assert_select 'td.author', :text => ''
375 assert_select 'td.author', :text => ''
376 end
376 end
377 end
377 end
378
378
379 def test_annotate_at_given_revision
379 def test_annotate_at_given_revision
380 assert_equal 0, @repository.changesets.count
380 assert_equal 0, @repository.changesets.count
381 @repository.fetch_changesets
381 @repository.fetch_changesets
382 @project.reload
382 @project.reload
383 assert_equal NUM_REV, @repository.changesets.count
383 assert_equal NUM_REV, @repository.changesets.count
384 get :annotate, :id => PRJ_ID, :rev => 8,
384 get :annotate, :id => PRJ_ID, :rev => 8,
385 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
385 :path => repository_path_hash(['subversion_test', 'helloworld.c'])[:param]
386 assert_response :success
386 assert_response :success
387 assert_template 'annotate'
387 assert_template 'annotate'
388 assert_tag :tag => 'h2', :content => /@ 8/
388 assert_tag :tag => 'h2', :content => /@ 8/
389 end
389 end
390
390
391 def test_destroy_valid_repository
391 def test_destroy_valid_repository
392 @request.session[:user_id] = 1 # admin
392 @request.session[:user_id] = 1 # admin
393 assert_equal 0, @repository.changesets.count
393 assert_equal 0, @repository.changesets.count
394 @repository.fetch_changesets
394 @repository.fetch_changesets
395 assert_equal NUM_REV, @repository.changesets.count
395 assert_equal NUM_REV, @repository.changesets.count
396
396
397 assert_difference 'Repository.count', -1 do
397 assert_difference 'Repository.count', -1 do
398 delete :destroy, :id => @repository.id
398 delete :destroy, :id => @repository.id
399 end
399 end
400 assert_response 302
400 assert_response 302
401 @project.reload
401 @project.reload
402 assert_nil @project.repository
402 assert_nil @project.repository
403 end
403 end
404
404
405 def test_destroy_invalid_repository
405 def test_destroy_invalid_repository
406 @request.session[:user_id] = 1 # admin
406 @request.session[:user_id] = 1 # admin
407 @project.repository.destroy
407 @project.repository.destroy
408 @repository = Repository::Subversion.create!(
408 @repository = Repository::Subversion.create!(
409 :project => @project,
409 :project => @project,
410 :url => "file:///invalid")
410 :url => "file:///invalid")
411 @repository.fetch_changesets
411 @repository.fetch_changesets
412 assert_equal 0, @repository.changesets.count
412 assert_equal 0, @repository.changesets.count
413
413
414 assert_difference 'Repository.count', -1 do
414 assert_difference 'Repository.count', -1 do
415 delete :destroy, :id => @repository.id
415 delete :destroy, :id => @repository.id
416 end
416 end
417 assert_response 302
417 assert_response 302
418 @project.reload
418 @project.reload
419 assert_nil @project.repository
419 assert_nil @project.repository
420 end
420 end
421 else
421 else
422 puts "Subversion test repository NOT FOUND. Skipping functional tests !!!"
422 puts "Subversion test repository NOT FOUND. Skipping functional tests !!!"
423 def test_fake; assert true end
423 def test_fake; assert true end
424 end
424 end
425 end
425 end
General Comments 0
You need to be logged in to leave comments. Login now