##// END OF EJS Templates
scm: git: check entries and changesets size are greater than 0 in browse test in functional test....
Toshi MARUYAMA -
r5000:3c3e16e022e6
parent child
Show More
@@ -1,216 +1,236
1 # redMine - project management software
1 # redMine - project management software
2 # Copyright (C) 2006-2008 Jean-Philippe Lang
2 # Copyright (C) 2006-2008 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 RepositoriesGitControllerTest < ActionController::TestCase
24 class RepositoriesGitControllerTest < ActionController::TestCase
25 fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
25 fixtures :projects, :users, :roles, :members, :member_roles, :repositories, :enabled_modules
26
26
27 # No '..' in the repository path
27 # No '..' in the repository path
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/git_repository'
29 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
29 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
30
30
31 def setup
31 def setup
32 @controller = RepositoriesController.new
32 @controller = RepositoriesController.new
33 @request = ActionController::TestRequest.new
33 @request = ActionController::TestRequest.new
34 @response = ActionController::TestResponse.new
34 @response = ActionController::TestResponse.new
35 User.current = nil
35 User.current = nil
36 @repository = Repository::Git.create(
36 @repository = Repository::Git.create(
37 :project => Project.find(3),
37 :project => Project.find(3),
38 :url => REPOSITORY_PATH,
38 :url => REPOSITORY_PATH,
39 :path_encoding => 'ISO-8859-1'
39 :path_encoding => 'ISO-8859-1'
40 )
40 )
41 assert @repository
41 assert @repository
42 end
42 end
43
43
44 if File.directory?(REPOSITORY_PATH)
44 if File.directory?(REPOSITORY_PATH)
45 def test_show
45 def test_show
46 @repository.fetch_changesets
47 @repository.reload
46 get :show, :id => 3
48 get :show, :id => 3
47 assert_response :success
49 assert_response :success
48 assert_template 'show'
50 assert_template 'show'
49 assert_not_nil assigns(:entries)
51 assert_not_nil assigns(:entries)
52 assert assigns(:entries).size > 0
50 assert_not_nil assigns(:changesets)
53 assert_not_nil assigns(:changesets)
54 assigns(:changesets).size > 0
51 end
55 end
52
56
53 def test_browse_root
57 def test_browse_root
58 @repository.fetch_changesets
59 @repository.reload
54 get :show, :id => 3
60 get :show, :id => 3
55 assert_response :success
61 assert_response :success
56 assert_template 'show'
62 assert_template 'show'
57 assert_not_nil assigns(:entries)
63 assert_not_nil assigns(:entries)
58 assert_equal 9, assigns(:entries).size
64 assert_equal 9, assigns(:entries).size
59 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
65 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
60 assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'}
66 assert assigns(:entries).detect {|e| e.name == 'this_is_a_really_long_and_verbose_directory_name' && e.kind == 'dir'}
61 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
67 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
62 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
68 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
63 assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'}
69 assert assigns(:entries).detect {|e| e.name == 'copied_README' && e.kind == 'file'}
64 assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'}
70 assert assigns(:entries).detect {|e| e.name == 'new_file.txt' && e.kind == 'file'}
65 assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
71 assert assigns(:entries).detect {|e| e.name == 'renamed_test.txt' && e.kind == 'file'}
66 assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'}
72 assert assigns(:entries).detect {|e| e.name == 'filemane with spaces.txt' && e.kind == 'file'}
67 assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'}
73 assert assigns(:entries).detect {|e| e.name == ' filename with a leading space.txt ' && e.kind == 'file'}
74 assert_not_nil assigns(:changesets)
75 assigns(:changesets).size > 0
68 end
76 end
69
77
70 def test_browse_branch
78 def test_browse_branch
79 @repository.fetch_changesets
80 @repository.reload
71 get :show, :id => 3, :rev => 'test_branch'
81 get :show, :id => 3, :rev => 'test_branch'
72 assert_response :success
82 assert_response :success
73 assert_template 'show'
83 assert_template 'show'
74 assert_not_nil assigns(:entries)
84 assert_not_nil assigns(:entries)
75 assert_equal 4, assigns(:entries).size
85 assert_equal 4, assigns(:entries).size
76 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
86 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
77 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
87 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
78 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
88 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
79 assert assigns(:entries).detect {|e| e.name == 'test.txt' && e.kind == 'file'}
89 assert assigns(:entries).detect {|e| e.name == 'test.txt' && e.kind == 'file'}
90 assert_not_nil assigns(:changesets)
91 assigns(:changesets).size > 0
80 end
92 end
81
93
82 def test_browse_directory
94 def test_browse_directory
95 @repository.fetch_changesets
96 @repository.reload
83 get :show, :id => 3, :path => ['images']
97 get :show, :id => 3, :path => ['images']
84 assert_response :success
98 assert_response :success
85 assert_template 'show'
99 assert_template 'show'
86 assert_not_nil assigns(:entries)
100 assert_not_nil assigns(:entries)
87 assert_equal ['edit.png'], assigns(:entries).collect(&:name)
101 assert_equal ['edit.png'], assigns(:entries).collect(&:name)
88 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
102 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
89 assert_not_nil entry
103 assert_not_nil entry
90 assert_equal 'file', entry.kind
104 assert_equal 'file', entry.kind
91 assert_equal 'images/edit.png', entry.path
105 assert_equal 'images/edit.png', entry.path
106 assert_not_nil assigns(:changesets)
107 assigns(:changesets).size > 0
92 end
108 end
93
109
94 def test_browse_at_given_revision
110 def test_browse_at_given_revision
111 @repository.fetch_changesets
112 @repository.reload
95 get :show, :id => 3, :path => ['images'], :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
113 get :show, :id => 3, :path => ['images'], :rev => '7234cb2750b63f47bff735edc50a1c0a433c2518'
96 assert_response :success
114 assert_response :success
97 assert_template 'show'
115 assert_template 'show'
98 assert_not_nil assigns(:entries)
116 assert_not_nil assigns(:entries)
99 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
117 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
118 assert_not_nil assigns(:changesets)
119 assigns(:changesets).size > 0
100 end
120 end
101
121
102 def test_changes
122 def test_changes
103 get :changes, :id => 3, :path => ['images', 'edit.png']
123 get :changes, :id => 3, :path => ['images', 'edit.png']
104 assert_response :success
124 assert_response :success
105 assert_template 'changes'
125 assert_template 'changes'
106 assert_tag :tag => 'h2', :content => 'edit.png'
126 assert_tag :tag => 'h2', :content => 'edit.png'
107 end
127 end
108
128
109 def test_entry_show
129 def test_entry_show
110 get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
130 get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb']
111 assert_response :success
131 assert_response :success
112 assert_template 'entry'
132 assert_template 'entry'
113 # Line 19
133 # Line 19
114 assert_tag :tag => 'th',
134 assert_tag :tag => 'th',
115 :content => /11/,
135 :content => /11/,
116 :attributes => { :class => /line-num/ },
136 :attributes => { :class => /line-num/ },
117 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
137 :sibling => { :tag => 'td', :content => /WITHOUT ANY WARRANTY/ }
118 end
138 end
119
139
120 def test_entry_download
140 def test_entry_download
121 get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
141 get :entry, :id => 3, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
122 assert_response :success
142 assert_response :success
123 # File content
143 # File content
124 assert @response.body.include?('WITHOUT ANY WARRANTY')
144 assert @response.body.include?('WITHOUT ANY WARRANTY')
125 end
145 end
126
146
127 def test_directory_entry
147 def test_directory_entry
128 get :entry, :id => 3, :path => ['sources']
148 get :entry, :id => 3, :path => ['sources']
129 assert_response :success
149 assert_response :success
130 assert_template 'show'
150 assert_template 'show'
131 assert_not_nil assigns(:entry)
151 assert_not_nil assigns(:entry)
132 assert_equal 'sources', assigns(:entry).name
152 assert_equal 'sources', assigns(:entry).name
133 end
153 end
134
154
135 def test_diff
155 def test_diff
136 @repository.fetch_changesets
156 @repository.fetch_changesets
137 @repository.reload
157 @repository.reload
138
158
139 # Full diff of changeset 2f9c0091
159 # Full diff of changeset 2f9c0091
140 get :diff, :id => 3, :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
160 get :diff, :id => 3, :rev => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
141 assert_response :success
161 assert_response :success
142 assert_template 'diff'
162 assert_template 'diff'
143 # Line 22 removed
163 # Line 22 removed
144 assert_tag :tag => 'th',
164 assert_tag :tag => 'th',
145 :content => /22/,
165 :content => /22/,
146 :sibling => { :tag => 'td',
166 :sibling => { :tag => 'td',
147 :attributes => { :class => /diff_out/ },
167 :attributes => { :class => /diff_out/ },
148 :content => /def remove/ }
168 :content => /def remove/ }
149 assert_tag :tag => 'h2', :content => /2f9c0091/
169 assert_tag :tag => 'h2', :content => /2f9c0091/
150 end
170 end
151
171
152 def test_diff_two_revs
172 def test_diff_two_revs
153 @repository.fetch_changesets
173 @repository.fetch_changesets
154 @repository.reload
174 @repository.reload
155
175
156 get :diff, :id => 3, :rev => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
176 get :diff, :id => 3, :rev => '61b685fbe55ab05b5ac68402d5720c1a6ac973d1',
157 :rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
177 :rev_to => '2f9c0091c754a91af7a9c478e36556b4bde8dcf7'
158 assert_response :success
178 assert_response :success
159 assert_template 'diff'
179 assert_template 'diff'
160
180
161 diff = assigns(:diff)
181 diff = assigns(:diff)
162 assert_not_nil diff
182 assert_not_nil diff
163 assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/
183 assert_tag :tag => 'h2', :content => /2f9c0091:61b685fb/
164 end
184 end
165
185
166 def test_annotate
186 def test_annotate
167 get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
187 get :annotate, :id => 3, :path => ['sources', 'watchers_controller.rb']
168 assert_response :success
188 assert_response :success
169 assert_template 'annotate'
189 assert_template 'annotate'
170 # Line 23, changeset 2f9c0091
190 # Line 23, changeset 2f9c0091
171 assert_tag :tag => 'th', :content => /24/,
191 assert_tag :tag => 'th', :content => /24/,
172 :sibling => { :tag => 'td', :child => { :tag => 'a', :content => /2f9c0091/ } },
192 :sibling => { :tag => 'td', :child => { :tag => 'a', :content => /2f9c0091/ } },
173 :sibling => { :tag => 'td', :content => /jsmith/ },
193 :sibling => { :tag => 'td', :content => /jsmith/ },
174 :sibling => { :tag => 'td', :content => /watcher =/ }
194 :sibling => { :tag => 'td', :content => /watcher =/ }
175 end
195 end
176
196
177 def test_annotate_at_given_revision
197 def test_annotate_at_given_revision
178 @repository.fetch_changesets
198 @repository.fetch_changesets
179 @repository.reload
199 @repository.reload
180 get :annotate, :id => 3, :rev => 'deff7', :path => ['sources', 'watchers_controller.rb']
200 get :annotate, :id => 3, :rev => 'deff7', :path => ['sources', 'watchers_controller.rb']
181 assert_response :success
201 assert_response :success
182 assert_template 'annotate'
202 assert_template 'annotate'
183 assert_tag :tag => 'h2', :content => /@ deff712f/
203 assert_tag :tag => 'h2', :content => /@ deff712f/
184 end
204 end
185
205
186 def test_annotate_binary_file
206 def test_annotate_binary_file
187 get :annotate, :id => 3, :path => ['images', 'edit.png']
207 get :annotate, :id => 3, :path => ['images', 'edit.png']
188 assert_response 500
208 assert_response 500
189 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
209 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
190 :content => /can not be annotated/
210 :content => /can not be annotated/
191 end
211 end
192
212
193 def test_revision
213 def test_revision
194 @repository.fetch_changesets
214 @repository.fetch_changesets
195 @repository.reload
215 @repository.reload
196 ['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r|
216 ['61b685fbe55ab05b5ac68402d5720c1a6ac973d1', '61b685f'].each do |r|
197 get :revision, :id => 3, :rev => r
217 get :revision, :id => 3, :rev => r
198 assert_response :success
218 assert_response :success
199 assert_template 'revision'
219 assert_template 'revision'
200 end
220 end
201 end
221 end
202
222
203 def test_empty_revision
223 def test_empty_revision
204 @repository.fetch_changesets
224 @repository.fetch_changesets
205 @repository.reload
225 @repository.reload
206 ['', ' ', nil].each do |r|
226 ['', ' ', nil].each do |r|
207 get :revision, :id => 3, :rev => r
227 get :revision, :id => 3, :rev => r
208 assert_response 404
228 assert_response 404
209 assert_error_tag :content => /was not found/
229 assert_error_tag :content => /was not found/
210 end
230 end
211 end
231 end
212 else
232 else
213 puts "Git test repository NOT FOUND. Skipping functional tests !!!"
233 puts "Git test repository NOT FOUND. Skipping functional tests !!!"
214 def test_fake; assert true end
234 def test_fake; assert true end
215 end
235 end
216 end
236 end
General Comments 0
You need to be logged in to leave comments. Login now