Chris@441
|
1 # Redmine - project management software
|
Chris@1295
|
2 # Copyright (C) 2006-2013 Jean-Philippe Lang
|
Chris@0
|
3 #
|
Chris@0
|
4 # This program is free software; you can redistribute it and/or
|
Chris@0
|
5 # modify it under the terms of the GNU General Public License
|
Chris@0
|
6 # as published by the Free Software Foundation; either version 2
|
Chris@0
|
7 # of the License, or (at your option) any later version.
|
Chris@441
|
8 #
|
Chris@0
|
9 # This program is distributed in the hope that it will be useful,
|
Chris@0
|
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
|
Chris@0
|
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
Chris@0
|
12 # GNU General Public License for more details.
|
Chris@441
|
13 #
|
Chris@0
|
14 # You should have received a copy of the GNU General Public License
|
Chris@0
|
15 # along with this program; if not, write to the Free Software
|
Chris@0
|
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
Chris@0
|
17
|
Chris@119
|
18 require File.expand_path('../../test_helper', __FILE__)
|
Chris@0
|
19
|
Chris@0
|
20 class RepositoriesGitControllerTest < ActionController::TestCase
|
Chris@1115
|
21 tests RepositoriesController
|
Chris@1115
|
22
|
Chris@909
|
23 fixtures :projects, :users, :roles, :members, :member_roles,
|
Chris@909
|
24 :repositories, :enabled_modules
|
Chris@0
|
25
|
Chris@909
|
26 REPOSITORY_PATH = Rails.root.join('tmp/test/git_repository').to_s
|
Chris@0
|
27 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
|
Chris@441
|
28 PRJ_ID = 3
|
Chris@441
|
29 CHAR_1_HEX = "\xc3\x9c"
|
Chris@1115
|
30 NUM_REV = 28
|
Chris@909
|
31
|
Chris@909
|
32 ## Git, Mercurial and CVS path encodings are binary.
|
Chris@909
|
33 ## Subversion supports URL encoding for path.
|
Chris@909
|
34 ## Redmine Mercurial adapter and extension use URL encoding.
|
Chris@909
|
35 ## Git accepts only binary path in command line parameter.
|
Chris@909
|
36 ## So, there is no way to use binary command line parameter in JRuby.
|
Chris@909
|
37 JRUBY_SKIP = (RUBY_PLATFORM == 'java')
|
Chris@909
|
38 JRUBY_SKIP_STR = "TODO: This test fails in JRuby"
|
Chris@0
|
39
|
Chris@0
|
40 def setup
|
Chris@441
|
41 @ruby19_non_utf8_pass =
|
Chris@441
|
42 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
|
Chris@441
|
43
|
Chris@0
|
44 User.current = nil
|
Chris@909
|
45 @project = Project.find(PRJ_ID)
|
Chris@441
|
46 @repository = Repository::Git.create(
|
Chris@909
|
47 :project => @project,
|
Chris@909
|
48 :url => REPOSITORY_PATH,
|
Chris@441
|
49 :path_encoding => 'ISO-8859-1'
|
Chris@441
|
50 )
|
Chris@119
|
51 assert @repository
|
Chris@441
|
52 @char_1 = CHAR_1_HEX.dup
|
Chris@441
|
53 if @char_1.respond_to?(:force_encoding)
|
Chris@441
|
54 @char_1.force_encoding('UTF-8')
|
Chris@441
|
55 end
|
Chris@1115
|
56 end
|
Chris@507
|
57
|
Chris@1115
|
58 def test_create_and_update
|
Chris@1115
|
59 @request.session[:user_id] = 1
|
Chris@1115
|
60 assert_difference 'Repository.count' do
|
Chris@1115
|
61 post :create, :project_id => 'subproject1',
|
Chris@1115
|
62 :repository_scm => 'Git',
|
Chris@1115
|
63 :repository => {
|
Chris@1115
|
64 :url => '/test',
|
Chris@1115
|
65 :is_default => '0',
|
Chris@1115
|
66 :identifier => 'test-create',
|
Chris@1115
|
67 :extra_report_last_commit => '1',
|
Chris@1115
|
68 }
|
Chris@1115
|
69 end
|
Chris@1115
|
70 assert_response 302
|
Chris@1115
|
71 repository = Repository.first(:order => 'id DESC')
|
Chris@1115
|
72 assert_kind_of Repository::Git, repository
|
Chris@1115
|
73 assert_equal '/test', repository.url
|
Chris@1115
|
74 assert_equal true, repository.extra_report_last_commit
|
Chris@1115
|
75
|
Chris@1115
|
76 put :update, :id => repository.id,
|
Chris@1115
|
77 :repository => {
|
Chris@1115
|
78 :extra_report_last_commit => '0'
|
Chris@1115
|
79 }
|
Chris@1115
|
80 assert_response 302
|
Chris@1115
|
81 repo2 = Repository.find(repository.id)
|
Chris@1115
|
82 assert_equal false, repo2.extra_report_last_commit
|
Chris@0
|
83 end
|
Chris@119
|
84
|
Chris@0
|
85 if File.directory?(REPOSITORY_PATH)
|
Chris@1115
|
86 ## Ruby uses ANSI api to fork a process on Windows.
|
Chris@1115
|
87 ## Japanese Shift_JIS and Traditional Chinese Big5 have 0x5c(backslash) problem
|
Chris@1115
|
88 ## and these are incompatible with ASCII.
|
Chris@1115
|
89 ## Git for Windows (msysGit) changed internal API from ANSI to Unicode in 1.7.10
|
Chris@1115
|
90 ## http://code.google.com/p/msysgit/issues/detail?id=80
|
Chris@1115
|
91 ## So, Latin-1 path tests fail on Japanese Windows
|
Chris@1115
|
92 WINDOWS_PASS = (Redmine::Platform.mswin? &&
|
Chris@1115
|
93 Redmine::Scm::Adapters::GitAdapter.client_version_above?([1, 7, 10]))
|
Chris@1115
|
94 WINDOWS_SKIP_STR = "TODO: This test fails in Git for Windows above 1.7.10"
|
Chris@1115
|
95
|
Chris@1115
|
96 def test_get_new
|
Chris@1115
|
97 @request.session[:user_id] = 1
|
Chris@1115
|
98 @project.repository.destroy
|
Chris@1115
|
99 get :new, :project_id => 'subproject1', :repository_scm => 'Git'
|
Chris@1115
|
100 assert_response :success
|
Chris@1115
|
101 assert_template 'new'
|
Chris@1115
|
102 assert_kind_of Repository::Git, assigns(:repository)
|
Chris@1115
|
103 assert assigns(:repository).new_record?
|
Chris@1115
|
104 end
|
Chris@1115
|
105
|
Chris@0
|
106 def test_browse_root
|
Chris@909
|
107 assert_equal 0, @repository.changesets.count
|
Chris@441
|
108 @repository.fetch_changesets
|
Chris@909
|
109 @project.reload
|
Chris@909
|
110 assert_equal NUM_REV, @repository.changesets.count
|
Chris@909
|
111
|
Chris@441
|
112 get :show, :id => PRJ_ID
|
Chris@0
|
113 assert_response :success
|
Chris@0
|
114 assert_template 'show'
|
Chris@0
|
115 assert_not_nil assigns(:entries)
|
chris@37
|
116 assert_equal 9, assigns(:entries).size
|
Chris@0
|
117 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
|
Chris@0
|
118 assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'}
|
Chris@0
|
119 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
|
Chris@0
|
120 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
|
Chris@0
|
121 assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'}
|
Chris@0
|
122 assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'}
|
Chris@0
|
123 assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
|
chris@37
|
124 assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'}
|
chris@37
|
125 assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'}
|
Chris@441
|
126 assert_not_nil assigns(:changesets)
|
Chris@909
|
127 assert assigns(:changesets).size > 0
|
Chris@0
|
128 end
|
Chris@0
|
129
|
Chris@0
|
130 def test_browse_branch
|
Chris@909
|
131 assert_equal 0, @repository.changesets.count
|
Chris@441
|
132 @repository.fetch_changesets
|
Chris@909
|
133 @project.reload
|
Chris@909
|
134 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
135 get :show, :id => PRJ_ID, :rev => 'test_branch'
|
Chris@0
|
136 assert_response :success
|
Chris@0
|
137 assert_template 'show'
|
Chris@0
|
138 assert_not_nil assigns(:entries)
|
Chris@0
|
139 assert_equal 4, assigns(:entries).size
|
Chris@0
|
140 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
|
Chris@0
|
141 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
|
Chris@0
|
142 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
|
Chris@0
|
143 assert assigns(:entries).detect {|e| e.name == 'test.txt' && e.kind == 'file'}
|
Chris@441
|
144 assert_not_nil assigns(:changesets)
|
Chris@909
|
145 assert assigns(:changesets).size > 0
|
Chris@441
|
146 end
|
Chris@441
|
147
|
Chris@441
|
148 def test_browse_tag
|
Chris@909
|
149 assert_equal 0, @repository.changesets.count
|
Chris@441
|
150 @repository.fetch_changesets
|
Chris@909
|
151 @project.reload
|
Chris@909
|
152 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
153 [
|
Chris@441
|
154 "tag00.lightweight",
|
Chris@441
|
155 "tag01.annotated",
|
Chris@441
|
156 ].each do |t1|
|
Chris@441
|
157 get :show, :id => PRJ_ID, :rev => t1
|
Chris@441
|
158 assert_response :success
|
Chris@441
|
159 assert_template 'show'
|
Chris@441
|
160 assert_not_nil assigns(:entries)
|
Chris@909
|
161 assert assigns(:entries).size > 0
|
Chris@441
|
162 assert_not_nil assigns(:changesets)
|
Chris@909
|
163 assert assigns(:changesets).size > 0
|
Chris@441
|
164 end
|
Chris@0
|
165 end
|
Chris@0
|
166
|
Chris@0
|
167 def test_browse_directory
|
Chris@909
|
168 assert_equal 0, @repository.changesets.count
|
Chris@441
|
169 @repository.fetch_changesets
|
Chris@909
|
170 @project.reload
|
Chris@909
|
171 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1115
|
172 get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param]
|
Chris@0
|
173 assert_response :success
|
Chris@0
|
174 assert_template 'show'
|
Chris@0
|
175 assert_not_nil assigns(:entries)
|
Chris@0
|
176 assert_equal ['edit.png'], assigns(:entries).collect(&:name)
|
Chris@0
|
177 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
|
Chris@0
|
178 assert_not_nil entry
|
Chris@0
|
179 assert_equal 'file', entry.kind
|
Chris@0
|
180 assert_equal 'images/edit.png', entry.path
|
Chris@441
|
181 assert_not_nil assigns(:changesets)
|
Chris@909
|
182 assert assigns(:changesets).size > 0
|
Chris@0
|
183 end
|
Chris@441
|
184
|
Chris@0
|
185 def test_browse_at_given_revision
|
Chris@909
|
186 assert_equal 0, @repository.changesets.count
|
Chris@441
|
187 @repository.fetch_changesets
|
Chris@909
|
188 @project.reload
|
Chris@909
|
189 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1115
|
190 get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param],
|
Chris@441
|
191 :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
|
Chris@0
|
192 assert_response :success
|
Chris@0
|
193 assert_template 'show'
|
Chris@0
|
194 assert_not_nil assigns(:entries)
|
Chris@0
|
195 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
|
Chris@441
|
196 assert_not_nil assigns(:changesets)
|
Chris@909
|
197 assert assigns(:changesets).size > 0
|
Chris@0
|
198 end
|
Chris@0
|
199
|
Chris@0
|
200 def test_changes
|
Chris@1115
|
201 get :changes, :id => PRJ_ID,
|
Chris@1115
|
202 :path => repository_path_hash(['images', 'edit.png'])[:param]
|
Chris@0
|
203 assert_response :success
|
Chris@0
|
204 assert_template 'changes'
|
Chris@0
|
205 assert_tag :tag => 'h2', :content => 'edit.png'
|
Chris@0
|
206 end
|
Chris@441
|
207
|
Chris@0
|
208 def test_entry_show
|
Chris@1115
|
209 get :entry, :id => PRJ_ID,
|
Chris@1115
|
210 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
|
Chris@0
|
211 assert_response :success
|
Chris@0
|
212 assert_template 'entry'
|
Chris@0
|
213 # Line 19
|
Chris@0
|
214 assert_tag :tag => 'th',
|
Chris@441
|
215 :content => '11',
|
Chris@441
|
216 :attributes => { :class => 'line-num' },
|
Chris@0
|
217 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
|
Chris@0
|
218 end
|
Chris@441
|
219
|
Chris@441
|
220 def test_entry_show_latin_1
|
Chris@441
|
221 if @ruby19_non_utf8_pass
|
Chris@441
|
222 puts_ruby19_non_utf8_pass()
|
Chris@1115
|
223 elsif WINDOWS_PASS
|
Chris@1115
|
224 puts WINDOWS_SKIP_STR
|
Chris@909
|
225 elsif JRUBY_SKIP
|
Chris@909
|
226 puts JRUBY_SKIP_STR
|
Chris@441
|
227 else
|
Chris@441
|
228 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
|
Chris@441
|
229 ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
|
Chris@441
|
230 get :entry, :id => PRJ_ID,
|
Chris@1115
|
231 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param],
|
Chris@1115
|
232 :rev => r1
|
Chris@441
|
233 assert_response :success
|
Chris@441
|
234 assert_template 'entry'
|
Chris@441
|
235 assert_tag :tag => 'th',
|
Chris@441
|
236 :content => '1',
|
Chris@441
|
237 :attributes => { :class => 'line-num' },
|
Chris@441
|
238 :sibling => { :tag => 'td',
|
Chris@441
|
239 :content => /test-#{@char_1}.txt/ }
|
Chris@441
|
240 end
|
Chris@441
|
241 end
|
Chris@441
|
242 end
|
Chris@441
|
243 end
|
Chris@441
|
244
|
Chris@0
|
245 def test_entry_download
|
Chris@1115
|
246 get :entry, :id => PRJ_ID,
|
Chris@1115
|
247 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param],
|
Chris@441
|
248 :format => 'raw'
|
Chris@0
|
249 assert_response :success
|
Chris@0
|
250 # File content
|
Chris@0
|
251 assert @response.body.include?('WITHOUT ANY WARRANTY')
|
Chris@0
|
252 end
|
Chris@441
|
253
|
Chris@0
|
254 def test_directory_entry
|
Chris@1115
|
255 get :entry, :id => PRJ_ID,
|
Chris@1115
|
256 :path => repository_path_hash(['sources'])[:param]
|
Chris@0
|
257 assert_response :success
|
Chris@0
|
258 assert_template 'show'
|
Chris@0
|
259 assert_not_nil assigns(:entry)
|
Chris@0
|
260 assert_equal 'sources', assigns(:entry).name
|
Chris@0
|
261 end
|
Chris@119
|
262
|
Chris@0
|
263 def test_diff
|
Chris@1115
|
264 assert_equal true, @repository.is_default
|
Chris@1115
|
265 assert_nil @repository.identifier
|
Chris@909
|
266 assert_equal 0, @repository.changesets.count
|
Chris@119
|
267 @repository.fetch_changesets
|
Chris@909
|
268 @project.reload
|
Chris@909
|
269 assert_equal NUM_REV, @repository.changesets.count
|
Chris@0
|
270 # Full diff of changeset 2f9c0091
|
Chris@909
|
271 ['inline', 'sbs'].each do |dt|
|
Chris@909
|
272 get :diff,
|
Chris@909
|
273 :id => PRJ_ID,
|
Chris@909
|
274 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7',
|
Chris@909
|
275 :type => dt
|
Chris@909
|
276 assert_response :success
|
Chris@909
|
277 assert_template 'diff'
|
Chris@909
|
278 # Line 22 removed
|
Chris@909
|
279 assert_tag :tag => 'th',
|
Chris@909
|
280 :content => /22/,
|
Chris@909
|
281 :sibling => { :tag => 'td',
|
Chris@909
|
282 :attributes => { :class => /diff_out/ },
|
Chris@909
|
283 :content => /def remove/ }
|
Chris@909
|
284 assert_tag :tag => 'h2', :content => /2f9c0091/
|
Chris@909
|
285 end
|
Chris@119
|
286 end
|
Chris@119
|
287
|
Chris@1115
|
288 def test_diff_with_rev_and_path
|
Chris@1115
|
289 assert_equal 0, @repository.changesets.count
|
Chris@1115
|
290 @repository.fetch_changesets
|
Chris@1115
|
291 @project.reload
|
Chris@1115
|
292 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1115
|
293 with_settings :diff_max_lines_displayed => 1000 do
|
Chris@1115
|
294 # Full diff of changeset 2f9c0091
|
Chris@1115
|
295 ['inline', 'sbs'].each do |dt|
|
Chris@1115
|
296 get :diff,
|
Chris@1115
|
297 :id => PRJ_ID,
|
Chris@1115
|
298 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7',
|
Chris@1115
|
299 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param],
|
Chris@1115
|
300 :type => dt
|
Chris@1115
|
301 assert_response :success
|
Chris@1115
|
302 assert_template 'diff'
|
Chris@1115
|
303 # Line 22 removed
|
Chris@1115
|
304 assert_tag :tag => 'th',
|
Chris@1115
|
305 :content => '22',
|
Chris@1115
|
306 :sibling => { :tag => 'td',
|
Chris@1115
|
307 :attributes => { :class => /diff_out/ },
|
Chris@1115
|
308 :content => /def remove/ }
|
Chris@1115
|
309 assert_tag :tag => 'h2', :content => /2f9c0091/
|
Chris@1115
|
310 end
|
Chris@1115
|
311 end
|
Chris@1115
|
312 end
|
Chris@1115
|
313
|
Chris@507
|
314 def test_diff_truncated
|
Chris@909
|
315 assert_equal 0, @repository.changesets.count
|
Chris@507
|
316 @repository.fetch_changesets
|
Chris@909
|
317 @project.reload
|
Chris@909
|
318 assert_equal NUM_REV, @repository.changesets.count
|
Chris@507
|
319
|
Chris@1115
|
320 with_settings :diff_max_lines_displayed => 5 do
|
Chris@1115
|
321 # Truncated diff of changeset 2f9c0091
|
Chris@1115
|
322 with_cache do
|
Chris@1115
|
323 with_settings :default_language => 'en' do
|
Chris@1115
|
324 get :diff, :id => PRJ_ID, :type => 'inline',
|
Chris@1115
|
325 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
Chris@1115
|
326 assert_response :success
|
Chris@1115
|
327 assert @response.body.include?("... This diff was truncated")
|
Chris@1115
|
328 end
|
Chris@1115
|
329 with_settings :default_language => 'fr' do
|
Chris@1115
|
330 get :diff, :id => PRJ_ID, :type => 'inline',
|
Chris@1115
|
331 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
Chris@1115
|
332 assert_response :success
|
Chris@1115
|
333 assert ! @response.body.include?("... This diff was truncated")
|
Chris@1115
|
334 assert @response.body.include?("... Ce diff")
|
Chris@1115
|
335 end
|
Chris@1115
|
336 end
|
Chris@507
|
337 end
|
Chris@507
|
338 end
|
Chris@507
|
339
|
Chris@119
|
340 def test_diff_two_revs
|
Chris@909
|
341 assert_equal 0, @repository.changesets.count
|
Chris@119
|
342 @repository.fetch_changesets
|
Chris@909
|
343 @project.reload
|
Chris@909
|
344 assert_equal NUM_REV, @repository.changesets.count
|
Chris@909
|
345 ['inline', 'sbs'].each do |dt|
|
Chris@909
|
346 get :diff,
|
Chris@909
|
347 :id => PRJ_ID,
|
Chris@909
|
348 :rev => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
|
Chris@909
|
349 :rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7',
|
Chris@909
|
350 :type => dt
|
Chris@909
|
351 assert_response :success
|
Chris@909
|
352 assert_template 'diff'
|
Chris@909
|
353 diff = assigns(:diff)
|
Chris@909
|
354 assert_not_nil diff
|
Chris@909
|
355 assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/
|
Chris@1115
|
356 assert_tag :tag => "form",
|
Chris@1115
|
357 :attributes => {
|
Chris@1115
|
358 :action => "/projects/subproject1/repository/revisions/" +
|
Chris@1115
|
359 "61b685fbe55ab05b5ac68402d5720c1a6ac973d1/diff"
|
Chris@1115
|
360 }
|
Chris@1115
|
361 assert_tag :tag => 'input',
|
Chris@1115
|
362 :attributes => {
|
Chris@1115
|
363 :id => "rev_to",
|
Chris@1115
|
364 :name => "rev_to",
|
Chris@1115
|
365 :type => "hidden",
|
Chris@1115
|
366 :value => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
Chris@1115
|
367 }
|
Chris@909
|
368 end
|
Chris@0
|
369 end
|
Chris@0
|
370
|
Chris@1115
|
371 def test_diff_path_in_subrepo
|
Chris@1115
|
372 repo = Repository::Git.create(
|
Chris@1115
|
373 :project => @project,
|
Chris@1115
|
374 :url => REPOSITORY_PATH,
|
Chris@1115
|
375 :identifier => 'test-diff-path',
|
Chris@1115
|
376 :path_encoding => 'ISO-8859-1'
|
Chris@1115
|
377 );
|
Chris@1115
|
378 assert repo
|
Chris@1115
|
379 assert_equal false, repo.is_default
|
Chris@1115
|
380 assert_equal 'test-diff-path', repo.identifier
|
Chris@1115
|
381 get :diff,
|
Chris@1115
|
382 :id => PRJ_ID,
|
Chris@1115
|
383 :repository_id => 'test-diff-path',
|
Chris@1115
|
384 :rev => '61b685fbe55ab05b',
|
Chris@1115
|
385 :rev_to => '2f9c0091c754a91a',
|
Chris@1115
|
386 :type => 'inline'
|
Chris@1115
|
387 assert_response :success
|
Chris@1115
|
388 assert_template 'diff'
|
Chris@1115
|
389 diff = assigns(:diff)
|
Chris@1115
|
390 assert_not_nil diff
|
Chris@1115
|
391 assert_tag :tag => "form",
|
Chris@1115
|
392 :attributes => {
|
Chris@1115
|
393 :action => "/projects/subproject1/repository/test-diff-path/" +
|
Chris@1115
|
394 "revisions/61b685fbe55ab05b/diff"
|
Chris@1115
|
395 }
|
Chris@1115
|
396 assert_tag :tag => 'input',
|
Chris@1115
|
397 :attributes => {
|
Chris@1115
|
398 :id => "rev_to",
|
Chris@1115
|
399 :name => "rev_to",
|
Chris@1115
|
400 :type => "hidden",
|
Chris@1115
|
401 :value => '2f9c0091c754a91a'
|
Chris@1115
|
402 }
|
Chris@1115
|
403 end
|
Chris@1115
|
404
|
Chris@441
|
405 def test_diff_latin_1
|
Chris@441
|
406 if @ruby19_non_utf8_pass
|
Chris@441
|
407 puts_ruby19_non_utf8_pass()
|
Chris@441
|
408 else
|
Chris@441
|
409 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
|
Chris@441
|
410 ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
|
Chris@909
|
411 ['inline', 'sbs'].each do |dt|
|
Chris@909
|
412 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
|
Chris@909
|
413 assert_response :success
|
Chris@909
|
414 assert_template 'diff'
|
Chris@909
|
415 assert_tag :tag => 'thead',
|
Chris@441
|
416 :descendant => {
|
Chris@909
|
417 :tag => 'th',
|
Chris@909
|
418 :attributes => { :class => 'filename' } ,
|
Chris@909
|
419 :content => /latin-1-dir\/test-#{@char_1}.txt/ ,
|
Chris@909
|
420 },
|
Chris@909
|
421 :sibling => {
|
Chris@909
|
422 :tag => 'tbody',
|
Chris@909
|
423 :descendant => {
|
Chris@909
|
424 :tag => 'td',
|
Chris@909
|
425 :attributes => { :class => /diff_in/ },
|
Chris@909
|
426 :content => /test-#{@char_1}.txt/
|
Chris@909
|
427 }
|
Chris@441
|
428 }
|
Chris@909
|
429 end
|
Chris@441
|
430 end
|
Chris@441
|
431 end
|
Chris@441
|
432 end
|
Chris@441
|
433 end
|
Chris@441
|
434
|
Chris@1115
|
435 def test_diff_should_show_filenames
|
Chris@1115
|
436 get :diff, :id => PRJ_ID, :rev => 'deff712f05a90d96edbd70facc47d944be5897e3', :type => 'inline'
|
Chris@1115
|
437 assert_response :success
|
Chris@1115
|
438 assert_template 'diff'
|
Chris@1115
|
439 # modified file
|
Chris@1115
|
440 assert_select 'th.filename', :text => 'sources/watchers_controller.rb'
|
Chris@1115
|
441 # deleted file
|
Chris@1115
|
442 assert_select 'th.filename', :text => 'test.txt'
|
Chris@1115
|
443 end
|
Chris@1115
|
444
|
Chris@909
|
445 def test_save_diff_type
|
Chris@1115
|
446 user1 = User.find(1)
|
Chris@1115
|
447 user1.pref[:diff_type] = nil
|
Chris@1115
|
448 user1.preference.save
|
Chris@1115
|
449 user = User.find(1)
|
Chris@1115
|
450 assert_nil user.pref[:diff_type]
|
Chris@1115
|
451
|
Chris@909
|
452 @request.session[:user_id] = 1 # admin
|
Chris@909
|
453 get :diff,
|
Chris@909
|
454 :id => PRJ_ID,
|
Chris@909
|
455 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
|
Chris@909
|
456 assert_response :success
|
Chris@909
|
457 assert_template 'diff'
|
Chris@909
|
458 user.reload
|
Chris@909
|
459 assert_equal "inline", user.pref[:diff_type]
|
Chris@909
|
460 get :diff,
|
Chris@909
|
461 :id => PRJ_ID,
|
Chris@909
|
462 :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7',
|
Chris@909
|
463 :type => 'sbs'
|
Chris@909
|
464 assert_response :success
|
Chris@909
|
465 assert_template 'diff'
|
Chris@909
|
466 user.reload
|
Chris@909
|
467 assert_equal "sbs", user.pref[:diff_type]
|
Chris@909
|
468 end
|
Chris@909
|
469
|
Chris@0
|
470 def test_annotate
|
Chris@1115
|
471 get :annotate, :id => PRJ_ID,
|
Chris@1115
|
472 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
|
Chris@0
|
473 assert_response :success
|
Chris@0
|
474 assert_template 'annotate'
|
Chris@1115
|
475
|
Chris@1115
|
476 # Line 23, changeset 2f9c0091
|
Chris@1115
|
477 assert_select 'tr' do
|
Chris@1115
|
478 assert_select 'th.line-num', :text => '23'
|
Chris@1115
|
479 assert_select 'td.revision', :text => /2f9c0091/
|
Chris@1115
|
480 assert_select 'td.author', :text => 'jsmith'
|
Chris@1115
|
481 assert_select 'td', :text => /remove_watcher/
|
Chris@1115
|
482 end
|
Chris@0
|
483 end
|
Chris@119
|
484
|
Chris@210
|
485 def test_annotate_at_given_revision
|
Chris@909
|
486 assert_equal 0, @repository.changesets.count
|
Chris@210
|
487 @repository.fetch_changesets
|
Chris@909
|
488 @project.reload
|
Chris@909
|
489 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
490 get :annotate, :id => PRJ_ID, :rev => 'deff7',
|
Chris@1115
|
491 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param]
|
Chris@210
|
492 assert_response :success
|
Chris@210
|
493 assert_template 'annotate'
|
Chris@210
|
494 assert_tag :tag => 'h2', :content => /@ deff712f/
|
Chris@210
|
495 end
|
Chris@210
|
496
|
Chris@0
|
497 def test_annotate_binary_file
|
Chris@1115
|
498 get :annotate, :id => PRJ_ID,
|
Chris@1115
|
499 :path => repository_path_hash(['images', 'edit.png'])[:param]
|
Chris@0
|
500 assert_response 500
|
chris@37
|
501 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
|
Chris@441
|
502 :content => /cannot be annotated/
|
Chris@441
|
503 end
|
Chris@441
|
504
|
Chris@909
|
505 def test_annotate_error_when_too_big
|
Chris@909
|
506 with_settings :file_max_size_displayed => 1 do
|
Chris@1115
|
507 get :annotate, :id => PRJ_ID,
|
Chris@1115
|
508 :path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param],
|
Chris@1115
|
509 :rev => 'deff712f'
|
Chris@909
|
510 assert_response 500
|
Chris@909
|
511 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
|
Chris@909
|
512 :content => /exceeds the maximum text file size/
|
Chris@909
|
513
|
Chris@1115
|
514 get :annotate, :id => PRJ_ID,
|
Chris@1115
|
515 :path => repository_path_hash(['README'])[:param],
|
Chris@1115
|
516 :rev => '7234cb2'
|
Chris@909
|
517 assert_response :success
|
Chris@909
|
518 assert_template 'annotate'
|
Chris@909
|
519 end
|
Chris@909
|
520 end
|
Chris@909
|
521
|
Chris@441
|
522 def test_annotate_latin_1
|
Chris@441
|
523 if @ruby19_non_utf8_pass
|
Chris@441
|
524 puts_ruby19_non_utf8_pass()
|
Chris@1115
|
525 elsif WINDOWS_PASS
|
Chris@1115
|
526 puts WINDOWS_SKIP_STR
|
Chris@909
|
527 elsif JRUBY_SKIP
|
Chris@909
|
528 puts JRUBY_SKIP_STR
|
Chris@441
|
529 else
|
Chris@441
|
530 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
|
Chris@441
|
531 ['57ca437c', '57ca437c0acbbcb749821fdf3726a1367056d364'].each do |r1|
|
Chris@441
|
532 get :annotate, :id => PRJ_ID,
|
Chris@1115
|
533 :path => repository_path_hash(['latin-1-dir', "test-#{@char_1}.txt"])[:param],
|
Chris@1115
|
534 :rev => r1
|
Chris@441
|
535 assert_tag :tag => 'th',
|
Chris@441
|
536 :content => '1',
|
Chris@441
|
537 :attributes => { :class => 'line-num' },
|
Chris@441
|
538 :sibling => { :tag => 'td',
|
Chris@441
|
539 :content => /test-#{@char_1}.txt/ }
|
Chris@441
|
540 end
|
Chris@441
|
541 end
|
Chris@441
|
542 end
|
Chris@0
|
543 end
|
Chris@119
|
544
|
Chris@1115
|
545 def test_revisions
|
Chris@1115
|
546 assert_equal 0, @repository.changesets.count
|
Chris@1115
|
547 @repository.fetch_changesets
|
Chris@1115
|
548 @project.reload
|
Chris@1115
|
549 assert_equal NUM_REV, @repository.changesets.count
|
Chris@1115
|
550 get :revisions, :id => PRJ_ID
|
Chris@1115
|
551 assert_response :success
|
Chris@1115
|
552 assert_template 'revisions'
|
Chris@1115
|
553 assert_tag :tag => 'form',
|
Chris@1115
|
554 :attributes => {
|
Chris@1115
|
555 :method => 'get',
|
Chris@1115
|
556 :action => '/projects/subproject1/repository/revision'
|
Chris@1115
|
557 }
|
Chris@1115
|
558 end
|
Chris@1115
|
559
|
Chris@119
|
560 def test_revision
|
Chris@909
|
561 assert_equal 0, @repository.changesets.count
|
Chris@119
|
562 @repository.fetch_changesets
|
Chris@909
|
563 @project.reload
|
Chris@909
|
564 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
565 ['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r|
|
Chris@441
|
566 get :revision, :id => PRJ_ID, :rev => r
|
Chris@119
|
567 assert_response :success
|
Chris@119
|
568 assert_template 'revision'
|
Chris@119
|
569 end
|
Chris@119
|
570 end
|
Chris@119
|
571
|
Chris@119
|
572 def test_empty_revision
|
Chris@909
|
573 assert_equal 0, @repository.changesets.count
|
Chris@119
|
574 @repository.fetch_changesets
|
Chris@909
|
575 @project.reload
|
Chris@909
|
576 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
577 ['', ' ', nil].each do |r|
|
Chris@441
|
578 get :revision, :id => PRJ_ID, :rev => r
|
Chris@128
|
579 assert_response 404
|
Chris@119
|
580 assert_error_tag :content => /was not found/
|
Chris@119
|
581 end
|
Chris@119
|
582 end
|
Chris@441
|
583
|
Chris@909
|
584 def test_destroy_valid_repository
|
Chris@909
|
585 @request.session[:user_id] = 1 # admin
|
Chris@909
|
586 assert_equal 0, @repository.changesets.count
|
Chris@909
|
587 @repository.fetch_changesets
|
Chris@909
|
588 @project.reload
|
Chris@909
|
589 assert_equal NUM_REV, @repository.changesets.count
|
Chris@909
|
590
|
Chris@1115
|
591 assert_difference 'Repository.count', -1 do
|
Chris@1115
|
592 delete :destroy, :id => @repository.id
|
Chris@1115
|
593 end
|
Chris@909
|
594 assert_response 302
|
Chris@909
|
595 @project.reload
|
Chris@909
|
596 assert_nil @project.repository
|
Chris@909
|
597 end
|
Chris@909
|
598
|
Chris@909
|
599 def test_destroy_invalid_repository
|
Chris@909
|
600 @request.session[:user_id] = 1 # admin
|
Chris@1115
|
601 @project.repository.destroy
|
Chris@1115
|
602 @repository = Repository::Git.create!(
|
Chris@909
|
603 :project => @project,
|
Chris@909
|
604 :url => "/invalid",
|
Chris@909
|
605 :path_encoding => 'ISO-8859-1'
|
Chris@909
|
606 )
|
Chris@909
|
607 @repository.fetch_changesets
|
Chris@909
|
608 @repository.reload
|
Chris@909
|
609 assert_equal 0, @repository.changesets.count
|
Chris@909
|
610
|
Chris@1115
|
611 assert_difference 'Repository.count', -1 do
|
Chris@1115
|
612 delete :destroy, :id => @repository.id
|
Chris@1115
|
613 end
|
Chris@909
|
614 assert_response 302
|
Chris@909
|
615 @project.reload
|
Chris@909
|
616 assert_nil @project.repository
|
Chris@909
|
617 end
|
Chris@909
|
618
|
Chris@441
|
619 private
|
Chris@441
|
620
|
Chris@441
|
621 def puts_ruby19_non_utf8_pass
|
Chris@441
|
622 puts "TODO: This test fails in Ruby 1.9 " +
|
Chris@441
|
623 "and Encoding.default_external is not UTF-8. " +
|
Chris@441
|
624 "Current value is '#{Encoding.default_external.to_s}'"
|
Chris@441
|
625 end
|
Chris@0
|
626 else
|
Chris@0
|
627 puts "Git test repository NOT FOUND. Skipping functional tests !!!"
|
Chris@0
|
628 def test_fake; assert true end
|
Chris@0
|
629 end
|
Chris@507
|
630
|
Chris@507
|
631 private
|
Chris@507
|
632 def with_cache(&block)
|
Chris@507
|
633 before = ActionController::Base.perform_caching
|
Chris@507
|
634 ActionController::Base.perform_caching = true
|
Chris@507
|
635 block.call
|
Chris@507
|
636 ActionController::Base.perform_caching = before
|
Chris@507
|
637 end
|
Chris@0
|
638 end
|