| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  | # Redmine - project management software | 
					
						
							| 
									
										
										
										
											2014-01-29 22:45:39 +00:00
										 |  |  | # Copyright (C) 2006-2014  Jean-Philippe Lang | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or | 
					
						
							|  |  |  | # modify it under the terms of the GNU General Public License | 
					
						
							|  |  |  | # as published by the Free Software Foundation; either version 2 | 
					
						
							|  |  |  | # of the License, or (at your option) any later version. | 
					
						
							| 
									
										
										
										
											2011-05-07 06:38:04 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							| 
									
										
										
										
											2011-05-07 06:38:04 +00:00
										 |  |  | # | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require File.expand_path('../../test_helper', __FILE__) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class RepositoriesFilesystemControllerTest < ActionController::TestCase | 
					
						
							| 
									
										
										
										
											2011-12-03 15:10:41 +00:00
										 |  |  |   tests RepositoriesController | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-10 11:12:38 +00:00
										 |  |  |   fixtures :projects, :users, :roles, :members, :member_roles, | 
					
						
							|  |  |  |            :repositories, :enabled_modules | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-06-10 11:12:38 +00:00
										 |  |  |   REPOSITORY_PATH = Rails.root.join('tmp/test/filesystem_repository').to_s | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  |   PRJ_ID = 3
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def setup | 
					
						
							| 
									
										
										
										
											2014-10-22 17:37:16 +00:00
										 |  |  |     @ruby19_non_utf8_pass = Encoding.default_external.to_s != 'UTF-8' | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  |     User.current = nil | 
					
						
							|  |  |  |     Setting.enabled_scm << 'Filesystem' unless Setting.enabled_scm.include?('Filesystem') | 
					
						
							| 
									
										
										
										
											2011-07-10 23:13:19 +00:00
										 |  |  |     @project = Project.find(PRJ_ID) | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  |     @repository = Repository::Filesystem.create( | 
					
						
							| 
									
										
										
										
											2011-07-10 23:13:19 +00:00
										 |  |  |                       :project       => @project, | 
					
						
							| 
									
										
										
										
											2011-05-21 01:00:24 +00:00
										 |  |  |                       :url           => REPOSITORY_PATH, | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  |                       :path_encoding => '' | 
					
						
							|  |  |  |                       ) | 
					
						
							|  |  |  |     assert @repository | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   if File.directory?(REPOSITORY_PATH) | 
					
						
							| 
									
										
										
										
											2012-01-15 14:23:06 +00:00
										 |  |  |     def test_get_new | 
					
						
							| 
									
										
										
										
											2011-12-03 15:10:41 +00:00
										 |  |  |       @request.session[:user_id] = 1
 | 
					
						
							|  |  |  |       @project.repository.destroy | 
					
						
							| 
									
										
										
										
											2012-01-15 14:23:06 +00:00
										 |  |  |       get :new, :project_id => 'subproject1', :repository_scm => 'Filesystem' | 
					
						
							| 
									
										
										
										
											2011-12-03 15:10:41 +00:00
										 |  |  |       assert_response :success | 
					
						
							| 
									
										
										
										
											2012-01-15 14:23:06 +00:00
										 |  |  |       assert_template 'new' | 
					
						
							| 
									
										
										
										
											2011-12-03 15:10:41 +00:00
										 |  |  |       assert_kind_of Repository::Filesystem, assigns(:repository) | 
					
						
							|  |  |  |       assert assigns(:repository).new_record? | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  |     def test_browse_root | 
					
						
							|  |  |  |       @repository.fetch_changesets | 
					
						
							|  |  |  |       @repository.reload | 
					
						
							| 
									
										
										
										
											2011-03-22 10:45:39 +00:00
										 |  |  |       get :show, :id => PRJ_ID | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  |       assert_response :success | 
					
						
							|  |  |  |       assert_template 'show' | 
					
						
							|  |  |  |       assert_not_nil assigns(:entries) | 
					
						
							|  |  |  |       assert assigns(:entries).size > 0
 | 
					
						
							|  |  |  |       assert_not_nil assigns(:changesets) | 
					
						
							|  |  |  |       assert assigns(:changesets).size == 0
 | 
					
						
							| 
									
										
										
										
											2012-01-16 20:22:12 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       assert_no_tag 'input', :attributes => {:name => 'rev'} | 
					
						
							|  |  |  |       assert_no_tag 'a', :content => 'Statistics' | 
					
						
							|  |  |  |       assert_no_tag 'a', :content => 'Atom' | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-03-22 10:45:39 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_show_no_extension | 
					
						
							| 
									
										
										
										
											2012-02-23 06:12:44 +00:00
										 |  |  |       get :entry, :id => PRJ_ID, :path => repository_path_hash(['test'])[:param] | 
					
						
							| 
									
										
										
										
											2011-03-22 10:45:39 +00:00
										 |  |  |       assert_response :success | 
					
						
							|  |  |  |       assert_template 'entry' | 
					
						
							|  |  |  |       assert_tag :tag => 'th', | 
					
						
							|  |  |  |                  :content => '1', | 
					
						
							|  |  |  |                  :attributes => { :class => 'line-num' }, | 
					
						
							|  |  |  |                  :sibling => { :tag => 'td', :content => /TEST CAT/ } | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-03-22 15:32:03 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-22 16:56:07 +00:00
										 |  |  |     def test_entry_download_no_extension | 
					
						
							| 
									
										
										
										
											2012-05-05 01:01:29 +00:00
										 |  |  |       get :raw, :id => PRJ_ID, :path => repository_path_hash(['test'])[:param] | 
					
						
							| 
									
										
										
										
											2011-03-22 16:56:07 +00:00
										 |  |  |       assert_response :success | 
					
						
							|  |  |  |       assert_equal 'application/octet-stream', @response.content_type | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-22 15:32:03 +00:00
										 |  |  |     def test_show_non_ascii_contents | 
					
						
							|  |  |  |       with_settings :repositories_encodings => 'UTF-8,EUC-JP' do | 
					
						
							| 
									
										
										
										
											2012-02-23 06:12:44 +00:00
										 |  |  |         get :entry, :id => PRJ_ID, | 
					
						
							|  |  |  |             :path => repository_path_hash(['japanese', 'euc-jp.txt'])[:param] | 
					
						
							| 
									
										
										
										
											2011-03-22 15:32:03 +00:00
										 |  |  |         assert_response :success | 
					
						
							|  |  |  |         assert_template 'entry' | 
					
						
							|  |  |  |         assert_tag :tag => 'th', | 
					
						
							|  |  |  |                    :content => '2', | 
					
						
							|  |  |  |                    :attributes => { :class => 'line-num' }, | 
					
						
							|  |  |  |                    :sibling => { :tag => 'td', :content => /japanese/ } | 
					
						
							| 
									
										
										
										
											2011-05-07 11:28:21 +00:00
										 |  |  |         if @ruby19_non_utf8_pass | 
					
						
							| 
									
										
										
										
											2014-10-22 17:37:16 +00:00
										 |  |  |           puts "TODO: show repository file contents test fails " + | 
					
						
							|  |  |  |                "when Encoding.default_external is not UTF-8. " + | 
					
						
							| 
									
										
										
										
											2011-05-07 11:28:21 +00:00
										 |  |  |                "Current value is '#{Encoding.default_external.to_s}'" | 
					
						
							|  |  |  |         else | 
					
						
							| 
									
										
										
										
											2014-10-22 17:37:16 +00:00
										 |  |  |           str_japanese = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e".force_encoding('UTF-8') | 
					
						
							| 
									
										
										
										
											2011-05-07 11:28:21 +00:00
										 |  |  |           assert_tag :tag => 'th', | 
					
						
							|  |  |  |                      :content => '3', | 
					
						
							|  |  |  |                      :attributes => { :class => 'line-num' }, | 
					
						
							|  |  |  |                      :sibling => { :tag => 'td', :content => /#{str_japanese}/ } | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2011-03-22 15:32:03 +00:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-03-22 15:32:47 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_show_utf16 | 
					
						
							| 
									
										
										
										
											2014-10-22 17:37:16 +00:00
										 |  |  |       enc = 'UTF-16' | 
					
						
							| 
									
										
										
										
											2013-01-13 01:50:14 +00:00
										 |  |  |       with_settings :repositories_encodings => enc do | 
					
						
							| 
									
										
										
										
											2012-02-23 06:12:44 +00:00
										 |  |  |         get :entry, :id => PRJ_ID, | 
					
						
							|  |  |  |             :path => repository_path_hash(['japanese', 'utf-16.txt'])[:param] | 
					
						
							| 
									
										
										
										
											2011-03-22 15:32:47 +00:00
										 |  |  |         assert_response :success | 
					
						
							|  |  |  |         assert_tag :tag => 'th', | 
					
						
							|  |  |  |                    :content => '2', | 
					
						
							|  |  |  |                    :attributes => { :class => 'line-num' }, | 
					
						
							|  |  |  |                    :sibling => { :tag => 'td', :content => /japanese/ } | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-03-22 15:33:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_show_text_file_should_send_if_too_big | 
					
						
							|  |  |  |       with_settings :file_max_size_displayed => 1 do | 
					
						
							| 
									
										
										
										
											2012-02-23 06:12:44 +00:00
										 |  |  |         get :entry, :id => PRJ_ID, | 
					
						
							|  |  |  |             :path => repository_path_hash(['japanese', 'big-file.txt'])[:param] | 
					
						
							| 
									
										
										
										
											2011-03-22 15:33:33 +00:00
										 |  |  |         assert_response :success | 
					
						
							| 
									
										
										
										
											2011-03-22 16:56:52 +00:00
										 |  |  |         assert_equal 'text/plain', @response.content_type | 
					
						
							| 
									
										
										
										
											2011-03-22 15:33:33 +00:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-07-10 23:13:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_destroy_valid_repository | 
					
						
							|  |  |  |       @request.session[:user_id] = 1 # admin | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-15 14:23:06 +00:00
										 |  |  |       assert_difference 'Repository.count', -1 do | 
					
						
							|  |  |  |         delete :destroy, :id => @repository.id | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-07-10 23:13:49 +00:00
										 |  |  |       assert_response 302
 | 
					
						
							|  |  |  |       @project.reload | 
					
						
							|  |  |  |       assert_nil @project.repository | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-07-10 23:14:16 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def test_destroy_invalid_repository | 
					
						
							|  |  |  |       @request.session[:user_id] = 1 # admin | 
					
						
							| 
									
										
										
										
											2012-01-15 14:23:06 +00:00
										 |  |  |       @project.repository.destroy | 
					
						
							|  |  |  |       @repository = Repository::Filesystem.create!( | 
					
						
							|  |  |  |                       :project       => @project, | 
					
						
							| 
									
										
										
										
											2011-07-10 23:14:16 +00:00
										 |  |  |                       :url           => "/invalid", | 
					
						
							|  |  |  |                       :path_encoding => '' | 
					
						
							|  |  |  |                       ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-01-15 14:23:06 +00:00
										 |  |  |       assert_difference 'Repository.count', -1 do | 
					
						
							|  |  |  |         delete :destroy, :id => @repository.id | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2011-07-10 23:14:16 +00:00
										 |  |  |       assert_response 302
 | 
					
						
							|  |  |  |       @project.reload | 
					
						
							|  |  |  |       assert_nil @project.repository | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2011-03-22 09:53:49 +00:00
										 |  |  |   else | 
					
						
							|  |  |  |     puts "Filesystem test repository NOT FOUND. Skipping functional tests !!!" | 
					
						
							|  |  |  |     def test_fake; assert true end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |