##// END OF EJS Templates
scm: filesystem: code clean up functional test....
Toshi MARUYAMA -
r5741:eb65817ff9b8
parent child
Show More
@@ -1,123 +1,122
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'
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 RepositoriesFilesystemControllerTest < ActionController::TestCase
24 class RepositoriesFilesystemControllerTest < 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/filesystem_repository'
28 REPOSITORY_PATH = RAILS_ROOT.gsub(%r{config\/\.\.}, '') + '/tmp/test/filesystem_repository'
29 PRJ_ID = 3
29 PRJ_ID = 3
30
30
31 def setup
31 def setup
32 @ruby19_non_utf8_pass =
32 @ruby19_non_utf8_pass =
33 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
33 (RUBY_VERSION >= '1.9' && Encoding.default_external.to_s != 'UTF-8')
34
35 @controller = RepositoriesController.new
34 @controller = RepositoriesController.new
36 @request = ActionController::TestRequest.new
35 @request = ActionController::TestRequest.new
37 @response = ActionController::TestResponse.new
36 @response = ActionController::TestResponse.new
38 User.current = nil
37 User.current = nil
39 Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
38 Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem')
40 @repository = Repository::Filesystem.create(
39 @repository = Repository::Filesystem.create(
41 :project => Project.find(PRJ_ID),
40 :project => Project.find(PRJ_ID),
42 :url => REPOSITORY_PATH,
41 :url => REPOSITORY_PATH,
43 :path_encoding => ''
42 :path_encoding => ''
44 )
43 )
45 assert @repository
44 assert @repository
46 end
45 end
47
46
48 if File.directory?(REPOSITORY_PATH)
47 if File.directory?(REPOSITORY_PATH)
49 def test_browse_root
48 def test_browse_root
50 @repository.fetch_changesets
49 @repository.fetch_changesets
51 @repository.reload
50 @repository.reload
52 get :show, :id => PRJ_ID
51 get :show, :id => PRJ_ID
53 assert_response :success
52 assert_response :success
54 assert_template 'show'
53 assert_template 'show'
55 assert_not_nil assigns(:entries)
54 assert_not_nil assigns(:entries)
56 assert assigns(:entries).size > 0
55 assert assigns(:entries).size > 0
57 assert_not_nil assigns(:changesets)
56 assert_not_nil assigns(:changesets)
58 assert assigns(:changesets).size == 0
57 assert assigns(:changesets).size == 0
59 end
58 end
60
59
61 def test_show_no_extension
60 def test_show_no_extension
62 get :entry, :id => PRJ_ID, :path => ['test']
61 get :entry, :id => PRJ_ID, :path => ['test']
63 assert_response :success
62 assert_response :success
64 assert_template 'entry'
63 assert_template 'entry'
65 assert_tag :tag => 'th',
64 assert_tag :tag => 'th',
66 :content => '1',
65 :content => '1',
67 :attributes => { :class => 'line-num' },
66 :attributes => { :class => 'line-num' },
68 :sibling => { :tag => 'td', :content => /TEST CAT/ }
67 :sibling => { :tag => 'td', :content => /TEST CAT/ }
69 end
68 end
70
69
71 def test_entry_download_no_extension
70 def test_entry_download_no_extension
72 get :entry, :id => PRJ_ID, :path => ['test'], :format => 'raw'
71 get :entry, :id => PRJ_ID, :path => ['test'], :format => 'raw'
73 assert_response :success
72 assert_response :success
74 assert_equal 'application/octet-stream', @response.content_type
73 assert_equal 'application/octet-stream', @response.content_type
75 end
74 end
76
75
77 def test_show_non_ascii_contents
76 def test_show_non_ascii_contents
78 with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
77 with_settings :repositories_encodings => 'UTF-8,EUC-JP' do
79 get :entry, :id => PRJ_ID, :path => ['japanese', 'euc-jp.txt']
78 get :entry, :id => PRJ_ID, :path => ['japanese', 'euc-jp.txt']
80 assert_response :success
79 assert_response :success
81 assert_template 'entry'
80 assert_template 'entry'
82 assert_tag :tag => 'th',
81 assert_tag :tag => 'th',
83 :content => '2',
82 :content => '2',
84 :attributes => { :class => 'line-num' },
83 :attributes => { :class => 'line-num' },
85 :sibling => { :tag => 'td', :content => /japanese/ }
84 :sibling => { :tag => 'td', :content => /japanese/ }
86 if @ruby19_non_utf8_pass
85 if @ruby19_non_utf8_pass
87 puts "TODO: show repository file contents test fails in Ruby 1.9 " +
86 puts "TODO: show repository file contents test fails in Ruby 1.9 " +
88 "and Encoding.default_external is not UTF-8. " +
87 "and Encoding.default_external is not UTF-8. " +
89 "Current value is '#{Encoding.default_external.to_s}'"
88 "Current value is '#{Encoding.default_external.to_s}'"
90 else
89 else
91 str_japanese = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"
90 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)
91 str_japanese.force_encoding('UTF-8') if str_japanese.respond_to?(:force_encoding)
93 assert_tag :tag => 'th',
92 assert_tag :tag => 'th',
94 :content => '3',
93 :content => '3',
95 :attributes => { :class => 'line-num' },
94 :attributes => { :class => 'line-num' },
96 :sibling => { :tag => 'td', :content => /#{str_japanese}/ }
95 :sibling => { :tag => 'td', :content => /#{str_japanese}/ }
97 end
96 end
98 end
97 end
99 end
98 end
100
99
101 def test_show_utf16
100 def test_show_utf16
102 with_settings :repositories_encodings => 'UTF-16' do
101 with_settings :repositories_encodings => 'UTF-16' do
103 get :entry, :id => PRJ_ID, :path => ['japanese', 'utf-16.txt']
102 get :entry, :id => PRJ_ID, :path => ['japanese', 'utf-16.txt']
104 assert_response :success
103 assert_response :success
105 assert_tag :tag => 'th',
104 assert_tag :tag => 'th',
106 :content => '2',
105 :content => '2',
107 :attributes => { :class => 'line-num' },
106 :attributes => { :class => 'line-num' },
108 :sibling => { :tag => 'td', :content => /japanese/ }
107 :sibling => { :tag => 'td', :content => /japanese/ }
109 end
108 end
110 end
109 end
111
110
112 def test_show_text_file_should_send_if_too_big
111 def test_show_text_file_should_send_if_too_big
113 with_settings :file_max_size_displayed => 1 do
112 with_settings :file_max_size_displayed => 1 do
114 get :entry, :id => PRJ_ID, :path => ['japanese', 'big-file.txt']
113 get :entry, :id => PRJ_ID, :path => ['japanese', 'big-file.txt']
115 assert_response :success
114 assert_response :success
116 assert_equal 'text/plain', @response.content_type
115 assert_equal 'text/plain', @response.content_type
117 end
116 end
118 end
117 end
119 else
118 else
120 puts "Filesystem test repository NOT FOUND. Skipping functional tests !!!"
119 puts "Filesystem test repository NOT FOUND. Skipping functional tests !!!"
121 def test_fake; assert true end
120 def test_fake; assert true end
122 end
121 end
123 end
122 end
General Comments 0
You need to be logged in to leave comments. Login now