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