Chris@441
|
1 # Redmine - project management software
|
Chris@441
|
2 # Copyright (C) 2006-2011 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 require 'repositories_controller'
|
Chris@0
|
20
|
Chris@0
|
21 # Re-raise errors caught by the controller.
|
Chris@0
|
22 class RepositoriesController; def rescue_action(e) raise e end; end
|
Chris@0
|
23
|
Chris@0
|
24 class RepositoriesMercurialControllerTest < ActionController::TestCase
|
Chris@909
|
25 fixtures :projects, :users, :roles, :members, :member_roles,
|
Chris@909
|
26 :repositories, :enabled_modules
|
Chris@0
|
27
|
Chris@909
|
28 REPOSITORY_PATH = Rails.root.join('tmp/test/mercurial_repository').to_s
|
Chris@441
|
29 CHAR_1_HEX = "\xc3\x9c"
|
Chris@441
|
30 PRJ_ID = 3
|
Chris@909
|
31 NUM_REV = 32
|
Chris@441
|
32
|
Chris@441
|
33 ruby19_non_utf8_pass =
|
Chris@441
|
34 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
|
Chris@0
|
35
|
Chris@0
|
36 def setup
|
Chris@0
|
37 @controller = RepositoriesController.new
|
Chris@0
|
38 @request = ActionController::TestRequest.new
|
Chris@0
|
39 @response = ActionController::TestResponse.new
|
Chris@0
|
40 User.current = nil
|
Chris@507
|
41 @project = Project.find(PRJ_ID)
|
Chris@441
|
42 @repository = Repository::Mercurial.create(
|
Chris@507
|
43 :project => @project,
|
Chris@441
|
44 :url => REPOSITORY_PATH,
|
Chris@441
|
45 :path_encoding => 'ISO-8859-1'
|
Chris@441
|
46 )
|
Chris@119
|
47 assert @repository
|
Chris@245
|
48 @diff_c_support = true
|
Chris@441
|
49 @char_1 = CHAR_1_HEX.dup
|
Chris@441
|
50 @tag_char_1 = "tag-#{CHAR_1_HEX}-00"
|
Chris@441
|
51 @branch_char_0 = "branch-#{CHAR_1_HEX}-00"
|
Chris@441
|
52 @branch_char_1 = "branch-#{CHAR_1_HEX}-01"
|
Chris@441
|
53 if @char_1.respond_to?(:force_encoding)
|
Chris@441
|
54 @char_1.force_encoding('UTF-8')
|
Chris@441
|
55 @tag_char_1.force_encoding('UTF-8')
|
Chris@441
|
56 @branch_char_0.force_encoding('UTF-8')
|
Chris@441
|
57 @branch_char_1.force_encoding('UTF-8')
|
Chris@441
|
58 end
|
Chris@0
|
59 end
|
Chris@119
|
60
|
Chris@441
|
61 if ruby19_non_utf8_pass
|
Chris@441
|
62 puts "TODO: Mercurial functional test fails in Ruby 1.9 " +
|
Chris@441
|
63 "and Encoding.default_external is not UTF-8. " +
|
Chris@441
|
64 "Current value is '#{Encoding.default_external.to_s}'"
|
Chris@441
|
65 def test_fake; assert true end
|
Chris@441
|
66 elsif File.directory?(REPOSITORY_PATH)
|
Chris@0
|
67 def test_show_root
|
Chris@909
|
68 assert_equal 0, @repository.changesets.count
|
Chris@441
|
69 @repository.fetch_changesets
|
Chris@909
|
70 @project.reload
|
Chris@909
|
71 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
72 get :show, :id => PRJ_ID
|
Chris@0
|
73 assert_response :success
|
Chris@0
|
74 assert_template 'show'
|
Chris@0
|
75 assert_not_nil assigns(:entries)
|
Chris@119
|
76 assert_equal 4, assigns(:entries).size
|
Chris@119
|
77 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
|
Chris@0
|
78 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
|
Chris@119
|
79 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
|
Chris@441
|
80 assert_not_nil assigns(:changesets)
|
Chris@909
|
81 assert assigns(:changesets).size > 0
|
Chris@0
|
82 end
|
Chris@128
|
83
|
Chris@0
|
84 def test_show_directory
|
Chris@909
|
85 assert_equal 0, @repository.changesets.count
|
Chris@441
|
86 @repository.fetch_changesets
|
Chris@909
|
87 @project.reload
|
Chris@909
|
88 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
89 get :show, :id => PRJ_ID, :path => ['images']
|
Chris@0
|
90 assert_response :success
|
Chris@0
|
91 assert_template 'show'
|
Chris@0
|
92 assert_not_nil assigns(:entries)
|
Chris@0
|
93 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
|
Chris@0
|
94 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
|
Chris@0
|
95 assert_not_nil entry
|
Chris@0
|
96 assert_equal 'file', entry.kind
|
Chris@0
|
97 assert_equal 'images/edit.png', entry.path
|
Chris@441
|
98 assert_not_nil assigns(:changesets)
|
Chris@909
|
99 assert assigns(:changesets).size > 0
|
Chris@0
|
100 end
|
Chris@119
|
101
|
Chris@0
|
102 def test_show_at_given_revision
|
Chris@909
|
103 assert_equal 0, @repository.changesets.count
|
Chris@441
|
104 @repository.fetch_changesets
|
Chris@909
|
105 @project.reload
|
Chris@909
|
106 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
107 [0, '0', '0885933ad4f6'].each do |r1|
|
Chris@441
|
108 get :show, :id => PRJ_ID, :path => ['images'], :rev => r1
|
Chris@119
|
109 assert_response :success
|
Chris@119
|
110 assert_template 'show'
|
Chris@119
|
111 assert_not_nil assigns(:entries)
|
Chris@119
|
112 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
|
Chris@441
|
113 assert_not_nil assigns(:changesets)
|
Chris@909
|
114 assert assigns(:changesets).size > 0
|
Chris@119
|
115 end
|
Chris@0
|
116 end
|
Chris@119
|
117
|
Chris@119
|
118 def test_show_directory_sql_escape_percent
|
Chris@909
|
119 assert_equal 0, @repository.changesets.count
|
Chris@441
|
120 @repository.fetch_changesets
|
Chris@909
|
121 @project.reload
|
Chris@909
|
122 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
123 [13, '13', '3a330eb32958'].each do |r1|
|
Chris@441
|
124 get :show, :id => PRJ_ID, :path => ['sql_escape', 'percent%dir'],
|
Chris@441
|
125 :rev => r1
|
Chris@119
|
126 assert_response :success
|
Chris@119
|
127 assert_template 'show'
|
Chris@119
|
128
|
Chris@119
|
129 assert_not_nil assigns(:entries)
|
Chris@441
|
130 assert_equal ['percent%file1.txt', 'percentfile1.txt'],
|
Chris@441
|
131 assigns(:entries).collect(&:name)
|
Chris@119
|
132 changesets = assigns(:changesets)
|
Chris@441
|
133 assert_not_nil changesets
|
Chris@909
|
134 assert assigns(:changesets).size > 0
|
Chris@441
|
135 assert_equal %w(13 11 10 9), changesets.collect(&:revision)
|
Chris@441
|
136 end
|
Chris@441
|
137 end
|
Chris@119
|
138
|
Chris@441
|
139 def test_show_directory_latin_1_path
|
Chris@909
|
140 assert_equal 0, @repository.changesets.count
|
Chris@441
|
141 @repository.fetch_changesets
|
Chris@909
|
142 @project.reload
|
Chris@909
|
143 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
144 [21, '21', 'adf805632193'].each do |r1|
|
Chris@441
|
145 get :show, :id => PRJ_ID, :path => ['latin-1-dir'], :rev => r1
|
Chris@441
|
146 assert_response :success
|
Chris@441
|
147 assert_template 'show'
|
Chris@441
|
148
|
Chris@441
|
149 assert_not_nil assigns(:entries)
|
Chris@441
|
150 assert_equal ["make-latin-1-file.rb",
|
Chris@441
|
151 "test-#{@char_1}-1.txt",
|
Chris@441
|
152 "test-#{@char_1}-2.txt",
|
Chris@441
|
153 "test-#{@char_1}.txt"], assigns(:entries).collect(&:name)
|
Chris@441
|
154 changesets = assigns(:changesets)
|
Chris@441
|
155 assert_not_nil changesets
|
Chris@441
|
156 assert_equal %w(21 20 19 18 17), changesets.collect(&:revision)
|
Chris@441
|
157 end
|
Chris@441
|
158 end
|
Chris@441
|
159
|
Chris@441
|
160 def test_show_branch
|
Chris@909
|
161 assert_equal 0, @repository.changesets.count
|
Chris@441
|
162 @repository.fetch_changesets
|
Chris@909
|
163 @project.reload
|
Chris@909
|
164 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
165 [
|
Chris@441
|
166 'default',
|
Chris@441
|
167 @branch_char_1,
|
Chris@441
|
168 'branch (1)[2]&,%.-3_4',
|
Chris@441
|
169 @branch_char_0,
|
Chris@441
|
170 'test_branch.latin-1',
|
Chris@441
|
171 'test-branch-00',
|
Chris@441
|
172 ].each do |bra|
|
Chris@441
|
173 get :show, :id => PRJ_ID, :rev => bra
|
Chris@441
|
174 assert_response :success
|
Chris@441
|
175 assert_template 'show'
|
Chris@441
|
176 assert_not_nil assigns(:entries)
|
Chris@441
|
177 assert assigns(:entries).size > 0
|
Chris@441
|
178 assert_not_nil assigns(:changesets)
|
Chris@909
|
179 assert assigns(:changesets).size > 0
|
Chris@441
|
180 end
|
Chris@441
|
181 end
|
Chris@441
|
182
|
Chris@441
|
183 def test_show_tag
|
Chris@909
|
184 assert_equal 0, @repository.changesets.count
|
Chris@441
|
185 @repository.fetch_changesets
|
Chris@909
|
186 @project.reload
|
Chris@909
|
187 assert_equal NUM_REV, @repository.changesets.count
|
Chris@441
|
188 [
|
Chris@441
|
189 @tag_char_1,
|
Chris@441
|
190 'tag_test.00',
|
Chris@441
|
191 'tag-init-revision'
|
Chris@441
|
192 ].each do |tag|
|
Chris@441
|
193 get :show, :id => PRJ_ID, :rev => tag
|
Chris@441
|
194 assert_response :success
|
Chris@441
|
195 assert_template 'show'
|
Chris@441
|
196 assert_not_nil assigns(:entries)
|
Chris@441
|
197 assert assigns(:entries).size > 0
|
Chris@441
|
198 assert_not_nil assigns(:changesets)
|
Chris@909
|
199 assert assigns(:changesets).size > 0
|
Chris@119
|
200 end
|
Chris@119
|
201 end
|
Chris@119
|
202
|
Chris@0
|
203 def test_changes
|
Chris@441
|
204 get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
|
Chris@0
|
205 assert_response :success
|
Chris@0
|
206 assert_template 'changes'
|
Chris@0
|
207 assert_tag :tag => 'h2', :content => 'edit.png'
|
Chris@0
|
208 end
|
Chris@441
|
209
|
Chris@0
|
210 def test_entry_show
|
Chris@441
|
211 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
|
Chris@0
|
212 assert_response :success
|
Chris@0
|
213 assert_template 'entry'
|
Chris@119
|
214 # Line 10
|
Chris@0
|
215 assert_tag :tag => 'th',
|
Chris@119
|
216 :content => '10',
|
Chris@119
|
217 :attributes => { :class => 'line-num' },
|
Chris@0
|
218 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
|
Chris@0
|
219 end
|
Chris@441
|
220
|
Chris@441
|
221 def test_entry_show_latin_1_path
|
Chris@441
|
222 [21, '21', 'adf805632193'].each do |r1|
|
Chris@441
|
223 get :entry, :id => PRJ_ID,
|
Chris@441
|
224 :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
|
Chris@441
|
225 assert_response :success
|
Chris@441
|
226 assert_template 'entry'
|
Chris@441
|
227 assert_tag :tag => 'th',
|
Chris@441
|
228 :content => '1',
|
Chris@441
|
229 :attributes => { :class => 'line-num' },
|
Chris@441
|
230 :sibling => { :tag => 'td',
|
Chris@441
|
231 :content => /Mercurial is a distributed version control system/ }
|
Chris@441
|
232 end
|
Chris@441
|
233 end
|
Chris@441
|
234
|
Chris@441
|
235 def test_entry_show_latin_1_contents
|
Chris@441
|
236 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
|
Chris@441
|
237 [27, '27', '7bbf4c738e71'].each do |r1|
|
Chris@441
|
238 get :entry, :id => PRJ_ID,
|
Chris@441
|
239 :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
|
Chris@441
|
240 assert_response :success
|
Chris@441
|
241 assert_template 'entry'
|
Chris@441
|
242 assert_tag :tag => 'th',
|
Chris@441
|
243 :content => '1',
|
Chris@441
|
244 :attributes => { :class => 'line-num' },
|
Chris@441
|
245 :sibling => { :tag => 'td',
|
Chris@441
|
246 :content => /test-#{@char_1}.txt/ }
|
Chris@441
|
247 end
|
Chris@441
|
248 end
|
Chris@441
|
249 end
|
Chris@441
|
250
|
Chris@0
|
251 def test_entry_download
|
Chris@441
|
252 get :entry, :id => PRJ_ID,
|
Chris@441
|
253 :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
|
Chris@0
|
254 assert_response :success
|
Chris@0
|
255 # File content
|
Chris@0
|
256 assert @response.body.include?('WITHOUT ANY WARRANTY')
|
Chris@0
|
257 end
|
Chris@0
|
258
|
Chris@441
|
259 def test_entry_binary_force_download
|
Chris@441
|
260 get :entry, :id => PRJ_ID, :rev => 1, :path => ['images', 'edit.png']
|
Chris@441
|
261 assert_response :success
|
Chris@441
|
262 assert_equal 'image/png', @response.content_type
|
Chris@441
|
263 end
|
Chris@441
|
264
|
Chris@0
|
265 def test_directory_entry
|
Chris@441
|
266 get :entry, :id => PRJ_ID, :path => ['sources']
|
Chris@0
|
267 assert_response :success
|
Chris@0
|
268 assert_template 'show'
|
Chris@0
|
269 assert_not_nil assigns(:entry)
|
Chris@0
|
270 assert_equal 'sources', assigns(:entry).name
|
Chris@0
|
271 end
|
Chris@441
|
272
|
Chris@0
|
273 def test_diff
|
Chris@909
|
274 assert_equal 0, @repository.changesets.count
|
Chris@119
|
275 @repository.fetch_changesets
|
Chris@909
|
276 @project.reload
|
Chris@909
|
277 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
278 [4, '4', 'def6d2f1254a'].each do |r1|
|
Chris@119
|
279 # Full diff of changeset 4
|
Chris@909
|
280 ['inline', 'sbs'].each do |dt|
|
Chris@909
|
281 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
|
Chris@909
|
282 assert_response :success
|
Chris@909
|
283 assert_template 'diff'
|
Chris@909
|
284 if @diff_c_support
|
Chris@909
|
285 # Line 22 removed
|
Chris@909
|
286 assert_tag :tag => 'th',
|
Chris@909
|
287 :content => '22',
|
Chris@909
|
288 :sibling => { :tag => 'td',
|
Chris@909
|
289 :attributes => { :class => /diff_out/ },
|
Chris@909
|
290 :content => /def remove/ }
|
Chris@909
|
291 assert_tag :tag => 'h2', :content => /4:def6d2f1254a/
|
Chris@909
|
292 end
|
Chris@119
|
293 end
|
Chris@119
|
294 end
|
Chris@0
|
295 end
|
Chris@119
|
296
|
Chris@119
|
297 def test_diff_two_revs
|
Chris@909
|
298 assert_equal 0, @repository.changesets.count
|
Chris@119
|
299 @repository.fetch_changesets
|
Chris@909
|
300 @project.reload
|
Chris@909
|
301 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
302 [2, '400bb8672109', '400', 400].each do |r1|
|
Chris@119
|
303 [4, 'def6d2f1254a'].each do |r2|
|
Chris@909
|
304 ['inline', 'sbs'].each do |dt|
|
Chris@909
|
305 get :diff,
|
Chris@909
|
306 :id => PRJ_ID,
|
Chris@909
|
307 :rev => r1,
|
Chris@909
|
308 :rev_to => r2,
|
Chris@909
|
309 :type => dt
|
Chris@909
|
310 assert_response :success
|
Chris@909
|
311 assert_template 'diff'
|
Chris@909
|
312 diff = assigns(:diff)
|
Chris@909
|
313 assert_not_nil diff
|
Chris@909
|
314 assert_tag :tag => 'h2',
|
Chris@909
|
315 :content => /4:def6d2f1254a 2:400bb8672109/
|
Chris@909
|
316 end
|
Chris@119
|
317 end
|
Chris@119
|
318 end
|
Chris@119
|
319 end
|
Chris@119
|
320
|
Chris@441
|
321 def test_diff_latin_1_path
|
Chris@441
|
322 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
|
Chris@441
|
323 [21, 'adf805632193'].each do |r1|
|
Chris@909
|
324 ['inline', 'sbs'].each do |dt|
|
Chris@909
|
325 get :diff, :id => PRJ_ID, :rev => r1, :type => dt
|
Chris@909
|
326 assert_response :success
|
Chris@909
|
327 assert_template 'diff'
|
Chris@909
|
328 assert_tag :tag => 'thead',
|
Chris@441
|
329 :descendant => {
|
Chris@909
|
330 :tag => 'th',
|
Chris@909
|
331 :attributes => { :class => 'filename' } ,
|
Chris@909
|
332 :content => /latin-1-dir\/test-#{@char_1}-2.txt/ ,
|
Chris@909
|
333 },
|
Chris@909
|
334 :sibling => {
|
Chris@909
|
335 :tag => 'tbody',
|
Chris@909
|
336 :descendant => {
|
Chris@909
|
337 :tag => 'td',
|
Chris@909
|
338 :attributes => { :class => /diff_in/ },
|
Chris@909
|
339 :content => /It is written in Python/
|
Chris@909
|
340 }
|
Chris@441
|
341 }
|
Chris@909
|
342 end
|
Chris@441
|
343 end
|
Chris@441
|
344 end
|
Chris@441
|
345 end
|
Chris@441
|
346
|
Chris@0
|
347 def test_annotate
|
Chris@441
|
348 get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
|
Chris@0
|
349 assert_response :success
|
Chris@0
|
350 assert_template 'annotate'
|
Chris@119
|
351 # Line 23, revision 4:def6d2f1254a
|
Chris@119
|
352 assert_tag :tag => 'th',
|
Chris@119
|
353 :content => '23',
|
Chris@119
|
354 :attributes => { :class => 'line-num' },
|
Chris@119
|
355 :sibling =>
|
Chris@119
|
356 {
|
Chris@119
|
357 :tag => 'td',
|
Chris@119
|
358 :attributes => { :class => 'revision' },
|
Chris@119
|
359 :child => { :tag => 'a', :content => '4:def6d2f1254a' }
|
Chris@119
|
360 }
|
Chris@119
|
361 assert_tag :tag => 'th',
|
Chris@119
|
362 :content => '23',
|
Chris@119
|
363 :attributes => { :class => 'line-num' },
|
Chris@119
|
364 :sibling =>
|
Chris@119
|
365 {
|
Chris@119
|
366 :tag => 'td' ,
|
Chris@119
|
367 :content => 'jsmith' ,
|
Chris@119
|
368 :attributes => { :class => 'author' },
|
Chris@119
|
369 }
|
Chris@119
|
370 assert_tag :tag => 'th',
|
Chris@119
|
371 :content => '23',
|
Chris@119
|
372 :attributes => { :class => 'line-num' },
|
Chris@0
|
373 :sibling => { :tag => 'td', :content => /watcher =/ }
|
Chris@0
|
374 end
|
Chris@119
|
375
|
Chris@507
|
376 def test_annotate_not_in_tip
|
Chris@909
|
377 assert_equal 0, @repository.changesets.count
|
Chris@507
|
378 @repository.fetch_changesets
|
Chris@909
|
379 @project.reload
|
Chris@909
|
380 assert_equal NUM_REV, @repository.changesets.count
|
Chris@507
|
381
|
Chris@507
|
382 get :annotate, :id => PRJ_ID,
|
Chris@507
|
383 :path => ['sources', 'welcome_controller.rb']
|
Chris@507
|
384 assert_response 404
|
Chris@507
|
385 assert_error_tag :content => /was not found/
|
Chris@507
|
386 end
|
Chris@507
|
387
|
Chris@210
|
388 def test_annotate_at_given_revision
|
Chris@909
|
389 assert_equal 0, @repository.changesets.count
|
Chris@210
|
390 @repository.fetch_changesets
|
Chris@909
|
391 @project.reload
|
Chris@909
|
392 assert_equal NUM_REV, @repository.changesets.count
|
Chris@210
|
393 [2, '400bb8672109', '400', 400].each do |r1|
|
Chris@441
|
394 get :annotate, :id => PRJ_ID, :rev => r1,
|
Chris@441
|
395 :path => ['sources', 'watchers_controller.rb']
|
Chris@210
|
396 assert_response :success
|
Chris@210
|
397 assert_template 'annotate'
|
Chris@210
|
398 assert_tag :tag => 'h2', :content => /@ 2:400bb8672109/
|
Chris@210
|
399 end
|
Chris@210
|
400 end
|
Chris@210
|
401
|
Chris@441
|
402 def test_annotate_latin_1_path
|
Chris@441
|
403 [21, '21', 'adf805632193'].each do |r1|
|
Chris@441
|
404 get :annotate, :id => PRJ_ID,
|
Chris@441
|
405 :path => ['latin-1-dir', "test-#{@char_1}-2.txt"], :rev => r1
|
Chris@441
|
406 assert_response :success
|
Chris@441
|
407 assert_template 'annotate'
|
Chris@441
|
408 assert_tag :tag => 'th',
|
Chris@441
|
409 :content => '1',
|
Chris@441
|
410 :attributes => { :class => 'line-num' },
|
Chris@441
|
411 :sibling =>
|
Chris@441
|
412 {
|
Chris@441
|
413 :tag => 'td',
|
Chris@441
|
414 :attributes => { :class => 'revision' },
|
Chris@441
|
415 :child => { :tag => 'a', :content => '20:709858aafd1b' }
|
Chris@441
|
416 }
|
Chris@441
|
417 assert_tag :tag => 'th',
|
Chris@441
|
418 :content => '1',
|
Chris@441
|
419 :attributes => { :class => 'line-num' },
|
Chris@441
|
420 :sibling =>
|
Chris@441
|
421 {
|
Chris@441
|
422 :tag => 'td' ,
|
Chris@441
|
423 :content => 'jsmith' ,
|
Chris@441
|
424 :attributes => { :class => 'author' },
|
Chris@441
|
425 }
|
Chris@441
|
426 assert_tag :tag => 'th',
|
Chris@441
|
427 :content => '1',
|
Chris@441
|
428 :attributes => { :class => 'line-num' },
|
Chris@441
|
429 :sibling => { :tag => 'td',
|
Chris@441
|
430 :content => /Mercurial is a distributed version control system/ }
|
Chris@441
|
431
|
Chris@441
|
432 end
|
Chris@441
|
433 end
|
Chris@441
|
434
|
Chris@441
|
435 def test_annotate_latin_1_contents
|
Chris@441
|
436 with_settings :repositories_encodings => 'UTF-8,ISO-8859-1' do
|
Chris@441
|
437 [27, '7bbf4c738e71'].each do |r1|
|
Chris@441
|
438 get :annotate, :id => PRJ_ID,
|
Chris@441
|
439 :path => ['latin-1-dir', "test-#{@char_1}.txt"], :rev => r1
|
Chris@441
|
440 assert_tag :tag => 'th',
|
Chris@441
|
441 :content => '1',
|
Chris@441
|
442 :attributes => { :class => 'line-num' },
|
Chris@441
|
443 :sibling => { :tag => 'td',
|
Chris@441
|
444 :content => /test-#{@char_1}.txt/ }
|
Chris@441
|
445 end
|
Chris@441
|
446 end
|
Chris@441
|
447 end
|
Chris@441
|
448
|
Chris@119
|
449 def test_empty_revision
|
Chris@909
|
450 assert_equal 0, @repository.changesets.count
|
Chris@119
|
451 @repository.fetch_changesets
|
Chris@909
|
452 @project.reload
|
Chris@909
|
453 assert_equal NUM_REV, @repository.changesets.count
|
Chris@119
|
454 ['', ' ', nil].each do |r|
|
Chris@441
|
455 get :revision, :id => PRJ_ID, :rev => r
|
Chris@128
|
456 assert_response 404
|
Chris@119
|
457 assert_error_tag :content => /was not found/
|
Chris@119
|
458 end
|
Chris@119
|
459 end
|
Chris@507
|
460
|
Chris@507
|
461 def test_destroy_valid_repository
|
Chris@507
|
462 @request.session[:user_id] = 1 # admin
|
Chris@909
|
463 assert_equal 0, @repository.changesets.count
|
Chris@507
|
464 @repository.fetch_changesets
|
Chris@909
|
465 @project.reload
|
Chris@909
|
466 assert_equal NUM_REV, @repository.changesets.count
|
Chris@507
|
467
|
Chris@507
|
468 get :destroy, :id => PRJ_ID
|
Chris@507
|
469 assert_response 302
|
Chris@507
|
470 @project.reload
|
Chris@507
|
471 assert_nil @project.repository
|
Chris@507
|
472 end
|
Chris@507
|
473
|
Chris@507
|
474 def test_destroy_invalid_repository
|
Chris@507
|
475 @request.session[:user_id] = 1 # admin
|
Chris@909
|
476 assert_equal 0, @repository.changesets.count
|
Chris@507
|
477 @repository.fetch_changesets
|
Chris@909
|
478 @project.reload
|
Chris@909
|
479 assert_equal NUM_REV, @repository.changesets.count
|
Chris@507
|
480
|
Chris@507
|
481 get :destroy, :id => PRJ_ID
|
Chris@507
|
482 assert_response 302
|
Chris@507
|
483 @project.reload
|
Chris@507
|
484 assert_nil @project.repository
|
Chris@507
|
485
|
Chris@507
|
486 @repository = Repository::Mercurial.create(
|
Chris@507
|
487 :project => Project.find(PRJ_ID),
|
Chris@507
|
488 :url => "/invalid",
|
Chris@507
|
489 :path_encoding => 'ISO-8859-1'
|
Chris@507
|
490 )
|
Chris@507
|
491 assert @repository
|
Chris@507
|
492 @repository.fetch_changesets
|
Chris@909
|
493 @project.reload
|
Chris@507
|
494 assert_equal 0, @repository.changesets.count
|
Chris@507
|
495
|
Chris@507
|
496 get :destroy, :id => PRJ_ID
|
Chris@507
|
497 assert_response 302
|
Chris@507
|
498 @project.reload
|
Chris@507
|
499 assert_nil @project.repository
|
Chris@507
|
500 end
|
Chris@0
|
501 else
|
Chris@0
|
502 puts "Mercurial test repository NOT FOUND. Skipping functional tests !!!"
|
Chris@0
|
503 def test_fake; assert true end
|
Chris@0
|
504 end
|
Chris@0
|
505 end
|