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