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