annotate test/functional/repositories_darcs_controller_test.rb @ 1082:997f6d7738f7 bug_531

In repo controller entry action, show the page for the file even if it's binary (so user still has access to history etc links). This makes it possible to use the entry action as the default when a file is clicked on
author Chris Cannam <chris.cannam@soundsoftware.ac.uk>
date Thu, 22 Nov 2012 18:04:17 +0000
parents cbb26bc654de
children 433d4f72a19b
rev   line source
Chris@909 1 # Redmine - project management software
Chris@909 2 # Copyright (C) 2006-2011 Jean-Philippe Lang
Chris@0 3 #
Chris@0 4 # This program is free software; you can redistribute it and/or
Chris@0 5 # modify it under the terms of the GNU General Public License
Chris@0 6 # as published by the Free Software Foundation; either version 2
Chris@0 7 # of the License, or (at your option) any later version.
Chris@909 8 #
Chris@0 9 # This program is distributed in the hope that it will be useful,
Chris@0 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
Chris@0 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
Chris@0 12 # GNU General Public License for more details.
Chris@909 13 #
Chris@0 14 # You should have received a copy of the GNU General Public License
Chris@0 15 # along with this program; if not, write to the Free Software
Chris@0 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Chris@0 17
Chris@119 18 require File.expand_path('../../test_helper', __FILE__)
Chris@0 19 require 'repositories_controller'
Chris@0 20
Chris@0 21 # Re-raise errors caught by the controller.
Chris@0 22 class RepositoriesController; def rescue_action(e) raise e end; end
Chris@0 23
Chris@0 24 class RepositoriesDarcsControllerTest < ActionController::TestCase
Chris@909 25 fixtures :projects, :users, :roles, :members, :member_roles,
Chris@909 26 :repositories, :enabled_modules
Chris@0 27
Chris@909 28 REPOSITORY_PATH = Rails.root.join('tmp/test/darcs_repository').to_s
Chris@245 29 PRJ_ID = 3
Chris@909 30 NUM_REV = 6
Chris@0 31
Chris@0 32 def setup
Chris@0 33 @controller = RepositoriesController.new
Chris@0 34 @request = ActionController::TestRequest.new
Chris@0 35 @response = ActionController::TestResponse.new
Chris@0 36 User.current = nil
Chris@245 37 @project = Project.find(PRJ_ID)
Chris@245 38 @repository = Repository::Darcs.create(
Chris@909 39 :project => @project,
Chris@909 40 :url => REPOSITORY_PATH,
Chris@909 41 :log_encoding => 'UTF-8'
Chris@909 42 )
Chris@245 43 assert @repository
Chris@0 44 end
Chris@245 45
Chris@0 46 if File.directory?(REPOSITORY_PATH)
Chris@0 47 def test_browse_root
Chris@909 48 assert_equal 0, @repository.changesets.count
Chris@245 49 @repository.fetch_changesets
Chris@909 50 @project.reload
Chris@909 51 assert_equal NUM_REV, @repository.changesets.count
Chris@245 52 get :show, :id => PRJ_ID
Chris@0 53 assert_response :success
Chris@0 54 assert_template 'show'
Chris@0 55 assert_not_nil assigns(:entries)
Chris@0 56 assert_equal 3, assigns(:entries).size
Chris@0 57 assert assigns(:entries).detect {|e| e.name == 'images' && e.kind == 'dir'}
Chris@0 58 assert assigns(:entries).detect {|e| e.name == 'sources' && e.kind == 'dir'}
Chris@0 59 assert assigns(:entries).detect {|e| e.name == 'README' && e.kind == 'file'}
Chris@0 60 end
Chris@245 61
Chris@0 62 def test_browse_directory
Chris@909 63 assert_equal 0, @repository.changesets.count
Chris@245 64 @repository.fetch_changesets
Chris@909 65 @project.reload
Chris@909 66 assert_equal NUM_REV, @repository.changesets.count
Chris@245 67 get :show, :id => PRJ_ID, :path => ['images']
Chris@0 68 assert_response :success
Chris@0 69 assert_template 'show'
Chris@0 70 assert_not_nil assigns(:entries)
Chris@0 71 assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name)
Chris@0 72 entry = assigns(:entries).detect {|e| e.name == 'edit.png'}
Chris@0 73 assert_not_nil entry
Chris@0 74 assert_equal 'file', entry.kind
Chris@0 75 assert_equal 'images/edit.png', entry.path
Chris@0 76 end
Chris@245 77
Chris@0 78 def test_browse_at_given_revision
Chris@909 79 assert_equal 0, @repository.changesets.count
Chris@245 80 @repository.fetch_changesets
Chris@909 81 @project.reload
Chris@909 82 assert_equal NUM_REV, @repository.changesets.count
Chris@245 83 get :show, :id => PRJ_ID, :path => ['images'], :rev => 1
Chris@0 84 assert_response :success
Chris@0 85 assert_template 'show'
Chris@0 86 assert_not_nil assigns(:entries)
Chris@0 87 assert_equal ['delete.png'], assigns(:entries).collect(&:name)
Chris@0 88 end
Chris@245 89
Chris@0 90 def test_changes
Chris@909 91 assert_equal 0, @repository.changesets.count
Chris@245 92 @repository.fetch_changesets
Chris@909 93 @project.reload
Chris@909 94 assert_equal NUM_REV, @repository.changesets.count
Chris@245 95 get :changes, :id => PRJ_ID, :path => ['images', 'edit.png']
Chris@0 96 assert_response :success
Chris@0 97 assert_template 'changes'
Chris@0 98 assert_tag :tag => 'h2', :content => 'edit.png'
Chris@0 99 end
Chris@245 100
Chris@0 101 def test_diff
Chris@909 102 assert_equal 0, @repository.changesets.count
Chris@245 103 @repository.fetch_changesets
Chris@909 104 @project.reload
Chris@909 105 assert_equal NUM_REV, @repository.changesets.count
Chris@0 106 # Full diff of changeset 5
Chris@909 107 ['inline', 'sbs'].each do |dt|
Chris@909 108 get :diff, :id => PRJ_ID, :rev => 5, :type => dt
Chris@909 109 assert_response :success
Chris@909 110 assert_template 'diff'
Chris@909 111 # Line 22 removed
Chris@909 112 assert_tag :tag => 'th',
Chris@909 113 :content => '22',
Chris@909 114 :sibling => { :tag => 'td',
Chris@909 115 :attributes => { :class => /diff_out/ },
Chris@909 116 :content => /def remove/ }
Chris@909 117 end
Chris@909 118 end
Chris@909 119
Chris@909 120 def test_destroy_valid_repository
Chris@909 121 @request.session[:user_id] = 1 # admin
Chris@909 122 assert_equal 0, @repository.changesets.count
Chris@909 123 @repository.fetch_changesets
Chris@909 124 @project.reload
Chris@909 125 assert_equal NUM_REV, @repository.changesets.count
Chris@909 126
Chris@909 127 get :destroy, :id => PRJ_ID
Chris@909 128 assert_response 302
Chris@909 129 @project.reload
Chris@909 130 assert_nil @project.repository
Chris@909 131 end
Chris@909 132
Chris@909 133 def test_destroy_invalid_repository
Chris@909 134 @request.session[:user_id] = 1 # admin
Chris@909 135 assert_equal 0, @repository.changesets.count
Chris@909 136 @repository.fetch_changesets
Chris@909 137 @project.reload
Chris@909 138 assert_equal NUM_REV, @repository.changesets.count
Chris@909 139
Chris@909 140 get :destroy, :id => PRJ_ID
Chris@909 141 assert_response 302
Chris@909 142 @project.reload
Chris@909 143 assert_nil @project.repository
Chris@909 144
Chris@909 145 @repository = Repository::Darcs.create(
Chris@909 146 :project => @project,
Chris@909 147 :url => "/invalid",
Chris@909 148 :log_encoding => 'UTF-8'
Chris@909 149 )
Chris@909 150 assert @repository
Chris@909 151 @repository.fetch_changesets
Chris@909 152 @project.reload
Chris@909 153 assert_equal 0, @repository.changesets.count
Chris@909 154
Chris@909 155 get :destroy, :id => PRJ_ID
Chris@909 156 assert_response 302
Chris@909 157 @project.reload
Chris@909 158 assert_nil @project.repository
Chris@0 159 end
Chris@0 160 else
Chris@0 161 puts "Darcs test repository NOT FOUND. Skipping functional tests !!!"
Chris@0 162 def test_fake; assert true end
Chris@0 163 end
Chris@0 164 end