##// END OF EJS Templates
Test for repository edit and cleanup....
Jean-Philippe Lang -
r7931:a08fa696d493
parent child
Show More
@@ -1,153 +1,159
1 # Redmine - project management software
1 # Redmine - project management software
2 # Copyright (C) 2006-2011 Jean-Philippe Lang
2 # Copyright (C) 2006-2011 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'
20
21 # Re-raise errors caught by the controller.
22 class RepositoriesController; def rescue_action(e) raise e end; end
23
19
24 class RepositoriesFilesystemControllerTest < ActionController::TestCase
20 class RepositoriesFilesystemControllerTest < ActionController::TestCase
21 tests RepositoriesController
22
25 fixtures :projects, :users, :roles, :members, :member_roles,
23 fixtures :projects, :users, :roles, :members, :member_roles,
26 :repositories, :enabled_modules
24 :repositories, :enabled_modules
27
25
28 REPOSITORY_PATH = Rails.root.join('tmp/test/filesystem_repository').to_s
26 REPOSITORY_PATH = Rails.root.join('tmp/test/filesystem_repository').to_s
29 PRJ_ID = 3
27 PRJ_ID = 3
30
28
31 def setup
29 def setup
32 @ruby19_non_utf8_pass =
30 @ruby19_non_utf8_pass =
33 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
31 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
34 @controller = RepositoriesController.new
35 @request = ActionController::TestRequest.new
36 @response = ActionController::TestResponse.new
37 User.current = nil
32 User.current = nil
38 Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
33 Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
39 @project = Project.find(PRJ_ID)
34 @project = Project.find(PRJ_ID)
40 @repository = Repository::Filesystem.create(
35 @repository = Repository::Filesystem.create(
41 :project => @project,
36 :project => @project,
42 :url => REPOSITORY_PATH,
37 :url => REPOSITORY_PATH,
43 :path_encoding => ''
38 :path_encoding => ''
44 )
39 )
45 assert @repository
40 assert @repository
46 end
41 end
47
42
48 if File.directory?(REPOSITORY_PATH)
43 if File.directory?(REPOSITORY_PATH)
44 def test_get_edit
45 @request.session[:user_id] = 1
46 @project.repository.destroy
47 xhr :get, :edit, :id => 'subproject1', :repository_scm => 'Filesystem'
48 assert_response :success
49 assert_equal 'text/javascript', @response.content_type
50 assert_kind_of Repository::Filesystem, assigns(:repository)
51 assert assigns(:repository).new_record?
52 assert_select_rjs :replace_html, 'tab-content-repository'
53 end
54
49 def test_browse_root
55 def test_browse_root
50 @repository.fetch_changesets
56 @repository.fetch_changesets
51 @repository.reload
57 @repository.reload
52 get :show, :id => PRJ_ID
58 get :show, :id => PRJ_ID
53 assert_response :success
59 assert_response :success
54 assert_template 'show'
60 assert_template 'show'
55 assert_not_nil assigns(:entries)
61 assert_not_nil assigns(:entries)
56 assert assigns(:entries).size > 0
62 assert assigns(:entries).size > 0
57 assert_not_nil assigns(:changesets)
63 assert_not_nil assigns(:changesets)
58 assert assigns(:changesets).size == 0
64 assert assigns(:changesets).size == 0
59 end
65 end
60
66
61 def test_show_no_extension
67 def test_show_no_extension
62 get :entry, :id => PRJ_ID, :path => ['test']
68 get :entry, :id => PRJ_ID, :path => ['test']
63 assert_response :success
69 assert_response :success
64 assert_template 'entry'
70 assert_template 'entry'
65 assert_tag :tag => 'th',
71 assert_tag :tag => 'th',
66 :content => '1',
72 :content => '1',
67 :attributes => { :class => 'line-num' },
73 :attributes => { :class => 'line-num' },
68 :sibling => { :tag => 'td', :content => /TEST CAT/ }
74 :sibling => { :tag => 'td', :content => /TEST CAT/ }
69 end
75 end
70
76
71 def test_entry_download_no_extension
77 def test_entry_download_no_extension
72 get :entry, :id => PRJ_ID, :path => ['test'], :format => 'raw'
78 get :entry, :id => PRJ_ID, :path => ['test'], :format => 'raw'
73 assert_response :success
79 assert_response :success
74 assert_equal 'application/octet-stream', @response.content_type
80 assert_equal 'application/octet-stream', @response.content_type
75 end
81 end
76
82
77 def test_show_non_ascii_contents
83 def test_show_non_ascii_contents
78 with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
84 with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
79 get :entry, :id => PRJ_ID, :path => ['japanese', 'euc-jp.txt']
85 get :entry, :id => PRJ_ID, :path => ['japanese', 'euc-jp.txt']
80 assert_response :success
86 assert_response :success
81 assert_template 'entry'
87 assert_template 'entry'
82 assert_tag :tag => 'th',
88 assert_tag :tag => 'th',
83 :content => '2',
89 :content => '2',
84 :attributes => { :class => 'line-num' },
90 :attributes => { :class => 'line-num' },
85 :sibling => { :tag => 'td', :content => /japanese/ }
91 :sibling => { :tag => 'td', :content => /japanese/ }
86 if @ruby19_non_utf8_pass
92 if @ruby19_non_utf8_pass
87 puts "TODO: show repository file contents test fails in Ruby 1.9 " +
93 puts "TODO: show repository file contents test fails in Ruby 1.9 " +
88 "and Encoding.default_external is not UTF-8. " +
94 "and Encoding.default_external is not UTF-8. " +
89 "Current value is '#{Encoding.default_external.to_s}'"
95 "Current value is '#{Encoding.default_external.to_s}'"
90 else
96 else
91 str_japanese = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"
97 str_japanese = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"
92 str_japanese.force_encoding('UTF-8') if str_japanese.respond_to?(:force_encoding)
98 str_japanese.force_encoding('UTF-8') if str_japanese.respond_to?(:force_encoding)
93 assert_tag :tag => 'th',
99 assert_tag :tag => 'th',
94 :content => '3',
100 :content => '3',
95 :attributes => { :class => 'line-num' },
101 :attributes => { :class => 'line-num' },
96 :sibling => { :tag => 'td', :content => /#{str_japanese}/ }
102 :sibling => { :tag => 'td', :content => /#{str_japanese}/ }
97 end
103 end
98 end
104 end
99 end
105 end
100
106
101 def test_show_utf16
107 def test_show_utf16
102 with_settings :repositories_encodings => 'UTF-16' do
108 with_settings :repositories_encodings => 'UTF-16' do
103 get :entry, :id => PRJ_ID, :path => ['japanese', 'utf-16.txt']
109 get :entry, :id => PRJ_ID, :path => ['japanese', 'utf-16.txt']
104 assert_response :success
110 assert_response :success
105 assert_tag :tag => 'th',
111 assert_tag :tag => 'th',
106 :content => '2',
112 :content => '2',
107 :attributes => { :class => 'line-num' },
113 :attributes => { :class => 'line-num' },
108 :sibling => { :tag => 'td', :content => /japanese/ }
114 :sibling => { :tag => 'td', :content => /japanese/ }
109 end
115 end
110 end
116 end
111
117
112 def test_show_text_file_should_send_if_too_big
118 def test_show_text_file_should_send_if_too_big
113 with_settings :file_max_size_displayed => 1 do
119 with_settings :file_max_size_displayed => 1 do
114 get :entry, :id => PRJ_ID, :path => ['japanese', 'big-file.txt']
120 get :entry, :id => PRJ_ID, :path => ['japanese', 'big-file.txt']
115 assert_response :success
121 assert_response :success
116 assert_equal 'text/plain', @response.content_type
122 assert_equal 'text/plain', @response.content_type
117 end
123 end
118 end
124 end
119
125
120 def test_destroy_valid_repository
126 def test_destroy_valid_repository
121 @request.session[:user_id] = 1 # admin
127 @request.session[:user_id] = 1 # admin
122
128
123 get :destroy, :id => PRJ_ID
129 get :destroy, :id => PRJ_ID
124 assert_response 302
130 assert_response 302
125 @project.reload
131 @project.reload
126 assert_nil @project.repository
132 assert_nil @project.repository
127 end
133 end
128
134
129 def test_destroy_invalid_repository
135 def test_destroy_invalid_repository
130 @request.session[:user_id] = 1 # admin
136 @request.session[:user_id] = 1 # admin
131
137
132 get :destroy, :id => PRJ_ID
138 get :destroy, :id => PRJ_ID
133 assert_response 302
139 assert_response 302
134 @project.reload
140 @project.reload
135 assert_nil @project.repository
141 assert_nil @project.repository
136
142
137 @repository = Repository::Filesystem.create(
143 @repository = Repository::Filesystem.create(
138 :project => Project.find(PRJ_ID),
144 :project => Project.find(PRJ_ID),
139 :url => "/invalid",
145 :url => "/invalid",
140 :path_encoding => ''
146 :path_encoding => ''
141 )
147 )
142 assert @repository
148 assert @repository
143
149
144 get :destroy, :id => PRJ_ID
150 get :destroy, :id => PRJ_ID
145 assert_response 302
151 assert_response 302
146 @project.reload
152 @project.reload
147 assert_nil @project.repository
153 assert_nil @project.repository
148 end
154 end
149 else
155 else
150 puts "Filesystem test repository NOT FOUND. Skipping functional tests !!!"
156 puts "Filesystem test repository NOT FOUND. Skipping functional tests !!!"
151 def test_fake; assert true end
157 def test_fake; assert true end
152 end
158 end
153 end
159 end
General Comments 0
You need to be logged in to leave comments. Login now