##// END OF EJS Templates
scm: cvs: code clean up functional test....
Toshi MARUYAMA -
r5332:a20f140734e4
parent child
Show More
@@ -1,199 +1,212
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 RepositoriesCvsControllerTest < ActionController::TestCase
24 class RepositoriesCvsControllerTest < 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/cvs_repository'
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/cvs_repository'
29 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
29 REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin?
30 # CVS module
30 # CVS module
31 MODULE_NAME = 'test'
31 MODULE_NAME = 'test'
32 PRJ_ID = 3
32 PRJ_ID = 3
33
33
34 def setup
34 def setup
35 @controller = RepositoriesController.new
35 @controller = RepositoriesController.new
36 @request = ActionController::TestRequest.new
36 @request = ActionController::TestRequest.new
37 @response = ActionController::TestResponse.new
37 @response = ActionController::TestResponse.new
38 Setting.default_language = 'en'
38 Setting.default_language = 'en'
39 User.current = nil
39 User.current = nil
40
40
41 @project = Project.find(PRJ_ID)
41 @project = Project.find(PRJ_ID)
42 @repository = Repository::Cvs.create(:project => Project.find(PRJ_ID),
42 @repository = Repository::Cvs.create(:project => Project.find(PRJ_ID),
43 :root_url => REPOSITORY_PATH,
43 :root_url => REPOSITORY_PATH,
44 :url => MODULE_NAME,
44 :url => MODULE_NAME,
45 :log_encoding => 'UTF-8')
45 :log_encoding => 'UTF-8')
46 assert @repository
46 assert @repository
47 end
47 end
48
48
49 if File.directory?(REPOSITORY_PATH)
49 if File.directory?(REPOSITORY_PATH)
50 def test_browse_root
50 def test_browse_root
51 @repository.fetch_changesets
51 @repository.fetch_changesets
52 @repository.reload
52 @repository.reload
53 get :show, :id => PRJ_ID
53 get :show, :id => PRJ_ID
54 assert_response :success
54 assert_response :success
55 assert_template 'show'
55 assert_template 'show'
56 assert_not_nil assigns(:entries)
56 assert_not_nil assigns(:entries)
57 assert_equal 3, assigns(:entries).size
57 assert_equal 3, assigns(:entries).size
58
58
59 entry = assigns(:entries).detect {|e| e.name == 'images'}
59 entry = assigns(:entries).detect {|e| e.name == 'images'}
60 assert_equal 'dir', entry.kind
60 assert_equal 'dir', entry.kind
61
61
62 entry = assigns(:entries).detect {|e| e.name == 'README'}
62 entry = assigns(:entries).detect {|e| e.name == 'README'}
63 assert_equal 'file', entry.kind
63 assert_equal 'file', entry.kind
64
64
65 assert_not_nil assigns(:changesets)
65 assert_not_nil assigns(:changesets)
66 assigns(:changesets).size > 0
66 assigns(:changesets).size > 0
67 end
67 end
68
68
69 def test_browse_directory
69 def test_browse_directory
70 @repository.fetch_changesets
70 @repository.fetch_changesets
71 @repository.reload
71 @repository.reload
72 get :show, :id => PRJ_ID, :path => ['images']
72 get :show, :id => PRJ_ID, :path => ['images']
73 assert_response :success
73 assert_response :success
74 assert_template 'show'
74 assert_template 'show'
75 assert_not_nil assigns(:entries)
75 assert_not_nil assigns(:entries)
76 assert_equal ['add.png', 'delete.png', 'edit.png'], assigns(:entries).collect(&:name)
76 assert_equal ['add.png', 'delete.png', 'edit.png'], assigns(:entries).collect(&:name)
77 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
77 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
78 assert_not_nil entry
78 assert_not_nil entry
79 assert_equal 'file', entry.kind
79 assert_equal 'file', entry.kind
80 assert_equal 'images/edit.png', entry.path
80 assert_equal 'images/edit.png', entry.path
81 end
81 end
82
82
83 def test_browse_at_given_revision
83 def test_browse_at_given_revision
84 @repository.fetch_changesets
84 @repository.fetch_changesets
85 @repository.reload
85 @repository.reload
86 get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
86 get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
87 assert_response :success
87 assert_response :success
88 assert_template 'show'
88 assert_template 'show'
89 assert_not_nil assigns(:entries)
89 assert_not_nil assigns(:entries)
90 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
90 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
91 end
91 end
92
92
93 def test_entry
93 def test_entry
94 @repository.fetch_changesets
94 @repository.fetch_changesets
95 @repository.reload
95 @repository.reload
96 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
96 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
97 assert_response :success
97 assert_response :success
98 assert_template 'entry'
98 assert_template 'entry'
99 assert_no_tag :tag => 'td', :attributes => { :class => /line-code/},
99 assert_no_tag :tag => 'td',
100 :content => /before_filter/
100 :attributes => { :class => /line-code/},
101 :content => /before_filter/
101 end
102 end
102
103
103 def test_entry_at_given_revision
104 def test_entry_at_given_revision
104 # changesets must be loaded
105 # changesets must be loaded
105 @repository.fetch_changesets
106 @repository.fetch_changesets
106 @repository.reload
107 @repository.reload
107 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :rev => 2
108 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :rev => 2
108 assert_response :success
109 assert_response :success
109 assert_template 'entry'
110 assert_template 'entry'
110 # this line was removed in r3
111 # this line was removed in r3
111 assert_tag :tag => 'td', :attributes => { :class => /line-code/},
112 assert_tag :tag => 'td',
112 :content => /before_filter/
113 :attributes => { :class => /line-code/},
114 :content => /before_filter/
113 end
115 end
114
116
115 def test_entry_not_found
117 def test_entry_not_found
116 @repository.fetch_changesets
118 @repository.fetch_changesets
117 @repository.reload
119 @repository.reload
118 get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
120 get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
119 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
121 assert_tag :tag => 'p',
120 :content => /The entry or revision was not found in the repository/
122 :attributes => { :id => /errorExplanation/ },
123 :content => /The entry or revision was not found in the repository/
121 end
124 end
122
125
123 def test_entry_download
126 def test_entry_download
124 @repository.fetch_changesets
127 @repository.fetch_changesets
125 @repository.reload
128 @repository.reload
126 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
129 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
127 assert_response :success
130 assert_response :success
128 end
131 end
129
132
130 def test_directory_entry
133 def test_directory_entry
131 @repository.fetch_changesets
134 @repository.fetch_changesets
132 @repository.reload
135 @repository.reload
133 get :entry, :id => PRJ_ID, :path => ['sources']
136 get :entry, :id => PRJ_ID, :path => ['sources']
134 assert_response :success
137 assert_response :success
135 assert_template 'show'
138 assert_template 'show'
136 assert_not_nil assigns(:entry)
139 assert_not_nil assigns(:entry)
137 assert_equal 'sources', assigns(:entry).name
140 assert_equal 'sources', assigns(:entry).name
138 end
141 end
139
142
140 def test_diff
143 def test_diff
141 @repository.fetch_changesets
144 @repository.fetch_changesets
142 @repository.reload
145 @repository.reload
143 get :diff, :id => PRJ_ID, :rev => 3, :type => 'inline'
146 get :diff, :id => PRJ_ID, :rev => 3, :type => 'inline'
144 assert_response :success
147 assert_response :success
145 assert_template 'diff'
148 assert_template 'diff'
146 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
149 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
147 :content => /before_filter :require_login/
150 :content => /before_filter :require_login/
148 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
151 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
149 :content => /with one change/
152 :content => /with one change/
150 end
153 end
151
154
152 def test_diff_new_files
155 def test_diff_new_files
153 @repository.fetch_changesets
156 @repository.fetch_changesets
154 @repository.reload
157 @repository.reload
155 get :diff, :id => PRJ_ID, :rev => 1, :type => 'inline'
158 get :diff, :id => PRJ_ID, :rev => 1, :type => 'inline'
156 assert_response :success
159 assert_response :success
157 assert_template 'diff'
160 assert_template 'diff'
158 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
161 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
159 :content => /watched.remove_watcher/
162 :content => /watched.remove_watcher/
160 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
163 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
161 :content => /test\/README/
164 :content => /test\/README/
162 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
165 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
163 :content => /test\/images\/delete.png /
166 :content => /test\/images\/delete.png /
164 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
167 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
165 :content => /test\/images\/edit.png/
168 :content => /test\/images\/edit.png/
166 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
169 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
167 :content => /test\/sources\/watchers_controller.rb/
170 :content => /test\/sources\/watchers_controller.rb/
168 end
171 end
169
172
170 def test_annotate
173 def test_annotate
171 @repository.fetch_changesets
174 @repository.fetch_changesets
172 @repository.reload
175 @repository.reload
173 get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
176 get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
174 assert_response :success
177 assert_response :success
175 assert_template 'annotate'
178 assert_template 'annotate'
176 # 1.1 line
179 # 1.1 line
177 assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
180 assert_tag :tag => 'th',
178 :content => '18',
181 :attributes => { :class => 'line-num' },
179 :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
182 :content => '18',
180 :content => /1.1/,
183 :sibling => {
181 :sibling => { :tag => 'td', :attributes => { :class => 'author' },
184 :tag => 'td',
182 :content => /LANG/
185 :attributes => { :class => 'revision' },
183 }
186 :content => /1.1/,
184 }
187 :sibling => {
188 :tag => 'td',
189 :attributes => { :class => 'author' },
190 :content => /LANG/
191 }
192 }
185 # 1.2 line
193 # 1.2 line
186 assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
194 assert_tag :tag => 'th',
187 :content => '32',
195 :attributes => { :class => 'line-num' },
188 :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
196 :content => '32',
189 :content => /1.2/,
197 :sibling => {
190 :sibling => { :tag => 'td', :attributes => { :class => 'author' },
198 :tag => 'td',
191 :content => /LANG/
199 :attributes => { :class => 'revision' },
192 }
200 :content => /1.2/,
193 }
201 :sibling => {
202 :tag => 'td',
203 :attributes => { :class => 'author' },
204 :content => /LANG/
205 }
206 }
194 end
207 end
195 else
208 else
196 puts "CVS test repository NOT FOUND. Skipping functional tests !!!"
209 puts "CVS test repository NOT FOUND. Skipping functional tests !!!"
197 def test_fake; assert true end
210 def test_fake; assert true end
198 end
211 end
199 end
212 end
General Comments 0
You need to be logged in to leave comments. Login now