##// END OF EJS Templates
Merged r12146, r12147 and r12148 from trunk to 2.3-stable (#14931)...
Toshi MARUYAMA -
r11921:9d3377c92cbf
parent child
Show More
1 NO CONTENT: modified file, binary diff hidden
NO CONTENT: modified file, binary diff hidden
@@ -1,187 +1,210
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 RepositoriesBazaarControllerTest < ActionController::TestCase
20 class RepositoriesBazaarControllerTest < 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/bazaar_repository/trunk').to_s
26 REPOSITORY_PATH = Rails.root.join('tmp/test/bazaar_repository').to_s
27 REPOSITORY_PATH_TRUNK = File.join(REPOSITORY_PATH, "trunk")
27 PRJ_ID = 3
28 PRJ_ID = 3
28
29
29 def setup
30 def setup
30 User.current = nil
31 User.current = nil
31 @project = Project.find(PRJ_ID)
32 @project = Project.find(PRJ_ID)
32 @repository = Repository::Bazaar.create(
33 @repository = Repository::Bazaar.create(
33 :project => @project,
34 :project => @project,
34 :url => REPOSITORY_PATH,
35 :url => REPOSITORY_PATH_TRUNK,
35 :log_encoding => 'UTF-8')
36 :log_encoding => 'UTF-8')
36 assert @repository
37 assert @repository
37 end
38 end
38
39
39 if File.directory?(REPOSITORY_PATH)
40 if File.directory?(REPOSITORY_PATH)
40 def test_get_new
41 def test_get_new
41 @request.session[:user_id] = 1
42 @request.session[:user_id] = 1
42 @project.repository.destroy
43 @project.repository.destroy
43 get :new, :project_id => 'subproject1', :repository_scm => 'Bazaar'
44 get :new, :project_id => 'subproject1', :repository_scm => 'Bazaar'
44 assert_response :success
45 assert_response :success
45 assert_template 'new'
46 assert_template 'new'
46 assert_kind_of Repository::Bazaar, assigns(:repository)
47 assert_kind_of Repository::Bazaar, assigns(:repository)
47 assert assigns(:repository).new_record?
48 assert assigns(:repository).new_record?
48 end
49 end
49
50
50 def test_browse_root
51 def test_browse_root
51 get :show, :id => PRJ_ID
52 get :show, :id => PRJ_ID
52 assert_response :success
53 assert_response :success
53 assert_template 'show'
54 assert_template 'show'
54 assert_not_nil assigns(:entries)
55 assert_not_nil assigns(:entries)
55 assert_equal 2, assigns(:entries).size
56 assert_equal 2, assigns(:entries).size
56 assert assigns(:entries).detect {|e| e.name == 'directory' && e.kind == 'dir'}
57 assert assigns(:entries).detect {|e| e.name == 'directory' && e.kind == 'dir'}
57 assert assigns(:entries).detect {|e| e.name == 'doc-mkdir.txt' && e.kind == 'file'}
58 assert assigns(:entries).detect {|e| e.name == 'doc-mkdir.txt' && e.kind == 'file'}
58 end
59 end
59
60
60 def test_browse_directory
61 def test_browse_directory
61 get :show, :id => PRJ_ID, :path => repository_path_hash(['directory'])[:param]
62 get :show, :id => PRJ_ID, :path => repository_path_hash(['directory'])[:param]
62 assert_response :success
63 assert_response :success
63 assert_template 'show'
64 assert_template 'show'
64 assert_not_nil assigns(:entries)
65 assert_not_nil assigns(:entries)
65 assert_equal ['doc-ls.txt', 'document.txt', 'edit.png'], assigns(:entries).collect(&:name)
66 assert_equal ['doc-ls.txt', 'document.txt', 'edit.png'], assigns(:entries).collect(&:name)
66 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
67 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
67 assert_not_nil entry
68 assert_not_nil entry
68 assert_equal 'file', entry.kind
69 assert_equal 'file', entry.kind
69 assert_equal 'directory/edit.png', entry.path
70 assert_equal 'directory/edit.png', entry.path
70 end
71 end
71
72
72 def test_browse_at_given_revision
73 def test_browse_at_given_revision
73 get :show, :id => PRJ_ID, :path => repository_path_hash([])[:param],
74 get :show, :id => PRJ_ID, :path => repository_path_hash([])[:param],
74 :rev => 3
75 :rev => 3
75 assert_response :success
76 assert_response :success
76 assert_template 'show'
77 assert_template 'show'
77 assert_not_nil assigns(:entries)
78 assert_not_nil assigns(:entries)
78 assert_equal ['directory', 'doc-deleted.txt', 'doc-ls.txt', 'doc-mkdir.txt'],
79 assert_equal ['directory', 'doc-deleted.txt', 'doc-ls.txt', 'doc-mkdir.txt'],
79 assigns(:entries).collect(&:name)
80 assigns(:entries).collect(&:name)
80 end
81 end
81
82
82 def test_changes
83 def test_changes
83 get :changes, :id => PRJ_ID,
84 get :changes, :id => PRJ_ID,
84 :path => repository_path_hash(['doc-mkdir.txt'])[:param]
85 :path => repository_path_hash(['doc-mkdir.txt'])[:param]
85 assert_response :success
86 assert_response :success
86 assert_template 'changes'
87 assert_template 'changes'
87 assert_tag :tag => 'h2', :content => 'doc-mkdir.txt'
88 assert_tag :tag => 'h2', :content => 'doc-mkdir.txt'
88 end
89 end
89
90
90 def test_entry_show
91 def test_entry_show
91 get :entry, :id => PRJ_ID,
92 get :entry, :id => PRJ_ID,
92 :path => repository_path_hash(['directory', 'doc-ls.txt'])[:param]
93 :path => repository_path_hash(['directory', 'doc-ls.txt'])[:param]
93 assert_response :success
94 assert_response :success
94 assert_template 'entry'
95 assert_template 'entry'
95 # Line 19
96 # Line 19
96 assert_tag :tag => 'th',
97 assert_tag :tag => 'th',
97 :content => /29/,
98 :content => /29/,
98 :attributes => { :class => /line-num/ },
99 :attributes => { :class => /line-num/ },
99 :sibling => { :tag => 'td', :content => /Show help message/ }
100 :sibling => { :tag => 'td', :content => /Show help message/ }
100 end
101 end
101
102
102 def test_entry_download
103 def test_entry_download
103 get :entry, :id => PRJ_ID,
104 get :entry, :id => PRJ_ID,
104 :path => repository_path_hash(['directory', 'doc-ls.txt'])[:param],
105 :path => repository_path_hash(['directory', 'doc-ls.txt'])[:param],
105 :format => 'raw'
106 :format => 'raw'
106 assert_response :success
107 assert_response :success
107 # File content
108 # File content
108 assert @response.body.include?('Show help message')
109 assert @response.body.include?('Show help message')
109 end
110 end
110
111
111 def test_directory_entry
112 def test_directory_entry
112 get :entry, :id => PRJ_ID,
113 get :entry, :id => PRJ_ID,
113 :path => repository_path_hash(['directory'])[:param]
114 :path => repository_path_hash(['directory'])[:param]
114 assert_response :success
115 assert_response :success
115 assert_template 'show'
116 assert_template 'show'
116 assert_not_nil assigns(:entry)
117 assert_not_nil assigns(:entry)
117 assert_equal 'directory', assigns(:entry).name
118 assert_equal 'directory', assigns(:entry).name
118 end
119 end
119
120
120 def test_diff
121 def test_diff
121 # Full diff of changeset 3
122 # Full diff of changeset 3
122 ['inline', 'sbs'].each do |dt|
123 ['inline', 'sbs'].each do |dt|
123 get :diff, :id => PRJ_ID, :rev => 3, :type => dt
124 get :diff, :id => PRJ_ID, :rev => 3, :type => dt
124 assert_response :success
125 assert_response :success
125 assert_template 'diff'
126 assert_template 'diff'
126 # Line 11 removed
127 # Line 11 removed
127 assert_tag :tag => 'th',
128 assert_tag :tag => 'th',
128 :content => '11',
129 :content => '11',
129 :sibling => { :tag => 'td',
130 :sibling => { :tag => 'td',
130 :attributes => { :class => /diff_out/ },
131 :attributes => { :class => /diff_out/ },
131 :content => /Display more information/ }
132 :content => /Display more information/ }
132 end
133 end
133 end
134 end
134
135
135 def test_annotate
136 def test_annotate
136 get :annotate, :id => PRJ_ID,
137 get :annotate, :id => PRJ_ID,
137 :path => repository_path_hash(['doc-mkdir.txt'])[:param]
138 :path => repository_path_hash(['doc-mkdir.txt'])[:param]
138 assert_response :success
139 assert_response :success
139 assert_template 'annotate'
140 assert_template 'annotate'
140 assert_select "th.line-num", :text => '2' do
141 assert_select "th.line-num", :text => '2' do
141 assert_select "+ td.revision" do
142 assert_select "+ td.revision" do
142 assert_select "a", :text => '3'
143 assert_select "a", :text => '3'
143 assert_select "+ td.author", :text => "jsmith@" do
144 assert_select "+ td.author", :text => "jsmith@" do
144 assert_select "+ td",
145 assert_select "+ td",
145 :text => "Main purpose:"
146 :text => "Main purpose:"
146 end
147 end
147 end
148 end
148 end
149 end
149 end
150 end
150
151
152 def test_annotate_author_escaping
153 repository = Repository::Bazaar.create(
154 :project => @project,
155 :url => File.join(REPOSITORY_PATH, "author_escaping"),
156 :identifier => 'author_escaping',
157 :log_encoding => 'UTF-8')
158 assert repository
159 get :annotate, :id => PRJ_ID, :repository_id => 'author_escaping',
160 :path => repository_path_hash(['author-escaping-test.txt'])[:param]
161 assert_response :success
162 assert_template 'annotate'
163 assert_select "th.line-num", :text => '1' do
164 assert_select "+ td.revision" do
165 assert_select "a", :text => '2'
166 assert_select "+ td.author", :text => "test &amp;" do
167 assert_select "+ td",
168 :text => "author escaping test"
169 end
170 end
171 end
172 end
173
151 def test_destroy_valid_repository
174 def test_destroy_valid_repository
152 @request.session[:user_id] = 1 # admin
175 @request.session[:user_id] = 1 # admin
153 assert_equal 0, @repository.changesets.count
176 assert_equal 0, @repository.changesets.count
154 @repository.fetch_changesets
177 @repository.fetch_changesets
155 assert @repository.changesets.count > 0
178 assert @repository.changesets.count > 0
156
179
157 assert_difference 'Repository.count', -1 do
180 assert_difference 'Repository.count', -1 do
158 delete :destroy, :id => @repository.id
181 delete :destroy, :id => @repository.id
159 end
182 end
160 assert_response 302
183 assert_response 302
161 @project.reload
184 @project.reload
162 assert_nil @project.repository
185 assert_nil @project.repository
163 end
186 end
164
187
165 def test_destroy_invalid_repository
188 def test_destroy_invalid_repository
166 @request.session[:user_id] = 1 # admin
189 @request.session[:user_id] = 1 # admin
167 @project.repository.destroy
190 @project.repository.destroy
168 @repository = Repository::Bazaar.create!(
191 @repository = Repository::Bazaar.create!(
169 :project => @project,
192 :project => @project,
170 :url => "/invalid",
193 :url => "/invalid",
171 :log_encoding => 'UTF-8')
194 :log_encoding => 'UTF-8')
172 @repository.fetch_changesets
195 @repository.fetch_changesets
173 @repository.reload
196 @repository.reload
174 assert_equal 0, @repository.changesets.count
197 assert_equal 0, @repository.changesets.count
175
198
176 assert_difference 'Repository.count', -1 do
199 assert_difference 'Repository.count', -1 do
177 delete :destroy, :id => @repository.id
200 delete :destroy, :id => @repository.id
178 end
201 end
179 assert_response 302
202 assert_response 302
180 @project.reload
203 @project.reload
181 assert_nil @project.repository
204 assert_nil @project.repository
182 end
205 end
183 else
206 else
184 puts "Bazaar test repository NOT FOUND. Skipping functional tests !!!"
207 puts "Bazaar test repository NOT FOUND. Skipping functional tests !!!"
185 def test_fake; assert true end
208 def test_fake; assert true end
186 end
209 end
187 end
210 end
General Comments 0
You need to be logged in to leave comments. Login now