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