##// END OF EJS Templates
scm: cvs: code clean up functional test....
Toshi MARUYAMA -
r4961:f41848fda457
parent child
Show More
@@ -1,206 +1,206
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_show
50 def test_show
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_not_nil assigns(:changesets)
57 assert_not_nil assigns(:changesets)
58 end
58 end
59
59
60 def test_browse_root
60 def test_browse_root
61 @repository.fetch_changesets
61 @repository.fetch_changesets
62 @repository.reload
62 @repository.reload
63 get :show, :id => PRJ_ID
63 get :show, :id => PRJ_ID
64 assert_response :success
64 assert_response :success
65 assert_template 'show'
65 assert_template 'show'
66 assert_not_nil assigns(:entries)
66 assert_not_nil assigns(:entries)
67 assert_equal 3, assigns(:entries).size
67 assert_equal 3, assigns(:entries).size
68
68
69 entry = assigns(:entries).detect {|e| e.name == 'images'}
69 entry = assigns(:entries).detect {|e| e.name == 'images'}
70 assert_equal 'dir', entry.kind
70 assert_equal 'dir', entry.kind
71
71
72 entry = assigns(:entries).detect {|e| e.name == 'README'}
72 entry = assigns(:entries).detect {|e| e.name == 'README'}
73 assert_equal 'file', entry.kind
73 assert_equal 'file', entry.kind
74 end
74 end
75
75
76 def test_browse_directory
76 def test_browse_directory
77 @repository.fetch_changesets
77 @repository.fetch_changesets
78 @repository.reload
78 @repository.reload
79 get :show, :id => PRJ_ID, :path => ['images']
79 get :show, :id => PRJ_ID, :path => ['images']
80 assert_response :success
80 assert_response :success
81 assert_template 'show'
81 assert_template 'show'
82 assert_not_nil assigns(:entries)
82 assert_not_nil assigns(:entries)
83 assert_equal ['add.png', 'delete.png', 'edit.png'], assigns(:entries).collect(&:name)
83 assert_equal ['add.png', 'delete.png', 'edit.png'], assigns(:entries).collect(&:name)
84 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
84 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
85 assert_not_nil entry
85 assert_not_nil entry
86 assert_equal 'file', entry.kind
86 assert_equal 'file', entry.kind
87 assert_equal 'images/edit.png', entry.path
87 assert_equal 'images/edit.png', entry.path
88 end
88 end
89
89
90 def test_browse_at_given_revision
90 def test_browse_at_given_revision
91 @repository.fetch_changesets
91 @repository.fetch_changesets
92 @repository.reload
92 @repository.reload
93 get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
93 get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
94 assert_response :success
94 assert_response :success
95 assert_template 'show'
95 assert_template 'show'
96 assert_not_nil assigns(:entries)
96 assert_not_nil assigns(:entries)
97 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
97 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
98 end
98 end
99
99
100 def test_entry
100 def test_entry
101 @repository.fetch_changesets
101 @repository.fetch_changesets
102 @repository.reload
102 @repository.reload
103 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
103 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
104 assert_response :success
104 assert_response :success
105 assert_template 'entry'
105 assert_template 'entry'
106 assert_no_tag :tag => 'td', :attributes => { :class => /line-code/},
106 assert_no_tag :tag => 'td', :attributes => { :class => /line-code/},
107 :content => /before_filter/
107 :content => /before_filter/
108 end
108 end
109
109
110 def test_entry_at_given_revision
110 def test_entry_at_given_revision
111 # changesets must be loaded
111 # changesets must be loaded
112 @repository.fetch_changesets
112 @repository.fetch_changesets
113 @repository.reload
113 @repository.reload
114 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :rev => 2
114 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :rev => 2
115 assert_response :success
115 assert_response :success
116 assert_template 'entry'
116 assert_template 'entry'
117 # this line was removed in r3
117 # this line was removed in r3
118 assert_tag :tag => 'td', :attributes => { :class => /line-code/},
118 assert_tag :tag => 'td', :attributes => { :class => /line-code/},
119 :content => /before_filter/
119 :content => /before_filter/
120 end
120 end
121
121
122 def test_entry_not_found
122 def test_entry_not_found
123 @repository.fetch_changesets
123 @repository.fetch_changesets
124 @repository.reload
124 @repository.reload
125 get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
125 get :entry, :id => PRJ_ID, :path => ['sources', 'zzz.c']
126 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
126 assert_tag :tag => 'p', :attributes => { :id => /errorExplanation/ },
127 :content => /The entry or revision was not found in the repository/
127 :content => /The entry or revision was not found in the repository/
128 end
128 end
129
129
130 def test_entry_download
130 def test_entry_download
131 @repository.fetch_changesets
131 @repository.fetch_changesets
132 @repository.reload
132 @repository.reload
133 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
133 get :entry, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb'], :format => 'raw'
134 assert_response :success
134 assert_response :success
135 end
135 end
136
136
137 def test_directory_entry
137 def test_directory_entry
138 @repository.fetch_changesets
138 @repository.fetch_changesets
139 @repository.reload
139 @repository.reload
140 get :entry, :id => PRJ_ID, :path => ['sources']
140 get :entry, :id => PRJ_ID, :path => ['sources']
141 assert_response :success
141 assert_response :success
142 assert_template 'show'
142 assert_template 'show'
143 assert_not_nil assigns(:entry)
143 assert_not_nil assigns(:entry)
144 assert_equal 'sources', assigns(:entry).name
144 assert_equal 'sources', assigns(:entry).name
145 end
145 end
146
146
147 def test_diff
147 def test_diff
148 @repository.fetch_changesets
148 @repository.fetch_changesets
149 @repository.reload
149 @repository.reload
150 get :diff, :id => PRJ_ID, :rev => 3, :type => 'inline'
150 get :diff, :id => PRJ_ID, :rev => 3, :type => 'inline'
151 assert_response :success
151 assert_response :success
152 assert_template 'diff'
152 assert_template 'diff'
153 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
153 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' },
154 :content => /watched.remove_watcher/
154 :content => /watched.remove_watcher/
155 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
155 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
156 :content => /watched.remove_all_watcher/
156 :content => /watched.remove_all_watcher/
157 end
157 end
158
158
159 def test_diff_new_files
159 def test_diff_new_files
160 @repository.fetch_changesets
160 @repository.fetch_changesets
161 @repository.reload
161 @repository.reload
162 get :diff, :id => PRJ_ID, :rev => 1, :type => 'inline'
162 get :diff, :id => PRJ_ID, :rev => 1, :type => 'inline'
163 assert_response :success
163 assert_response :success
164 assert_template 'diff'
164 assert_template 'diff'
165 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
165 assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' },
166 :content => /watched.remove_watcher/
166 :content => /watched.remove_watcher/
167 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
167 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
168 :content => /test\/README/
168 :content => /test\/README/
169 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
169 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
170 :content => /test\/images\/delete.png /
170 :content => /test\/images\/delete.png /
171 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
171 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
172 :content => /test\/images\/edit.png/
172 :content => /test\/images\/edit.png/
173 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
173 assert_tag :tag => 'th', :attributes => { :class => 'filename' },
174 :content => /test\/sources\/watchers_controller.rb/
174 :content => /test\/sources\/watchers_controller.rb/
175 end
175 end
176
176
177 def test_annotate
177 def test_annotate
178 @repository.fetch_changesets
178 @repository.fetch_changesets
179 @repository.reload
179 @repository.reload
180 get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
180 get :annotate, :id => PRJ_ID, :path => ['sources', 'watchers_controller.rb']
181 assert_response :success
181 assert_response :success
182 assert_template 'annotate'
182 assert_template 'annotate'
183 # 1.1 line
183 # 1.1 line
184 assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
184 assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
185 :content => '18',
185 :content => '18',
186 :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
186 :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
187 :content => /1.1/,
187 :content => /1.1/,
188 :sibling => { :tag => 'td', :attributes => { :class => 'author' },
188 :sibling => { :tag => 'td', :attributes => { :class => 'author' },
189 :content => /LANG/
189 :content => /LANG/
190 }
190 }
191 }
191 }
192 # 1.2 line
192 # 1.2 line
193 assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
193 assert_tag :tag => 'th', :attributes => { :class => 'line-num' },
194 :content => '32',
194 :content => '32',
195 :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
195 :sibling => { :tag => 'td', :attributes => { :class => 'revision' },
196 :content => /1.2/,
196 :content => /1.2/,
197 :sibling => { :tag => 'td', :attributes => { :class => 'author' },
197 :sibling => { :tag => 'td', :attributes => { :class => 'author' },
198 :content => /LANG/
198 :content => /LANG/
199 }
199 }
200 }
200 }
201 end
201 end
202 else
202 else
203 puts "CVS test repository NOT FOUND. Skipping functional tests !!!"
203 puts "CVS test repository NOT FOUND. Skipping functional tests !!!"
204 def test_fake; assert true end
204 def test_fake; assert true end
205 end
205 end
206 end
206 end
General Comments 0
You need to be logged in to leave comments. Login now