repositories_cvs_controller_test.rb
274 lines
| 10.0 KiB
| text/x-ruby
|
RubyLexer
|
r5586 | # Redmine - project management software | ||
|
r9453 | # Copyright (C) 2006-2012 Jean-Philippe Lang | ||
|
r1142 | # | ||
# 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. | ||||
|
r5586 | # | ||
|
r1142 | # 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. | ||||
|
r5586 | # | ||
|
r1142 | # 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. | ||||
|
r4395 | require File.expand_path('../../test_helper', __FILE__) | ||
|
r1142 | |||
|
r2773 | class RepositoriesCvsControllerTest < ActionController::TestCase | ||
|
r7932 | tests RepositoriesController | ||
|
r5941 | fixtures :projects, :users, :roles, :members, :member_roles, | ||
:repositories, :enabled_modules | ||||
|
r1142 | |||
|
r5941 | REPOSITORY_PATH = Rails.root.join('tmp/test/cvs_repository').to_s | ||
|
r1752 | REPOSITORY_PATH.gsub!(/\//, "\\") if Redmine::Platform.mswin? | ||
|
r1142 | # CVS module | ||
MODULE_NAME = 'test' | ||||
|
r4669 | PRJ_ID = 3 | ||
|
r7042 | NUM_REV = 7 | ||
|
r4669 | |||
|
r1142 | def setup | ||
Setting.default_language = 'en' | ||||
User.current = nil | ||||
|
r4669 | @project = Project.find(PRJ_ID) | ||
|
r4961 | @repository = Repository::Cvs.create(:project => Project.find(PRJ_ID), | ||
:root_url => REPOSITORY_PATH, | ||||
:url => MODULE_NAME, | ||||
|
r4862 | :log_encoding => 'UTF-8') | ||
|
r4669 | assert @repository | ||
|
r1142 | end | ||
|
r4961 | |||
|
r1142 | if File.directory?(REPOSITORY_PATH) | ||
|
r8528 | def test_get_new | ||
|
r7932 | @request.session[:user_id] = 1 | ||
@project.repository.destroy | ||||
|
r8528 | get :new, :project_id => 'subproject1', :repository_scm => 'Cvs' | ||
|
r7932 | assert_response :success | ||
|
r8528 | assert_template 'new' | ||
|
r7932 | assert_kind_of Repository::Cvs, assigns(:repository) | ||
assert assigns(:repository).new_record? | ||||
end | ||||
|
r1142 | def test_browse_root | ||
|
r7043 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7043 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r4669 | get :show, :id => PRJ_ID | ||
|
r1142 | assert_response :success | ||
|
r2735 | assert_template 'show' | ||
|
r1142 | assert_not_nil assigns(:entries) | ||
assert_equal 3, assigns(:entries).size | ||||
|
r4961 | |||
|
r1142 | entry = assigns(:entries).detect {|e| e.name == 'images'} | ||
assert_equal 'dir', entry.kind | ||||
entry = assigns(:entries).detect {|e| e.name == 'README'} | ||||
assert_equal 'file', entry.kind | ||||
|
r5069 | |||
assert_not_nil assigns(:changesets) | ||||
|
r6101 | assert assigns(:changesets).size > 0 | ||
|
r1142 | end | ||
|
r4961 | |||
|
r1142 | def test_browse_directory | ||
|
r7056 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7056 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r8806 | get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param] | ||
|
r1142 | assert_response :success | ||
|
r2735 | assert_template 'show' | ||
|
r1142 | assert_not_nil assigns(:entries) | ||
|
r1314 | assert_equal ['add.png', 'delete.png', 'edit.png'], assigns(:entries).collect(&:name) | ||
entry = assigns(:entries).detect {|e| e.name == 'edit.png'} | ||||
assert_not_nil entry | ||||
|
r1142 | assert_equal 'file', entry.kind | ||
|
r1314 | assert_equal 'images/edit.png', entry.path | ||
end | ||||
|
r4961 | |||
|
r1314 | def test_browse_at_given_revision | ||
|
r7057 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7057 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r8806 | get :show, :id => PRJ_ID, :path => repository_path_hash(['images'])[:param], | ||
:rev => 1 | ||||
|
r1314 | assert_response :success | ||
|
r2735 | assert_template 'show' | ||
|
r1314 | assert_not_nil assigns(:entries) | ||
assert_equal ['delete.png', 'edit.png'], assigns(:entries).collect(&:name) | ||||
|
r1142 | end | ||
|
r4961 | |||
|
r1142 | def test_entry | ||
|
r7058 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7058 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r8806 | get :entry, :id => PRJ_ID, | ||
:path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param] | ||||
|
r1142 | assert_response :success | ||
assert_template 'entry' | ||||
|
r5332 | assert_no_tag :tag => 'td', | ||
:attributes => { :class => /line-code/}, | ||||
:content => /before_filter/ | ||||
|
r1539 | end | ||
|
r4961 | |||
|
r1539 | def test_entry_at_given_revision | ||
# changesets must be loaded | ||||
|
r7059 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7059 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r8806 | get :entry, :id => PRJ_ID, | ||
:path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param], | ||||
:rev => 2 | ||||
|
r1539 | assert_response :success | ||
assert_template 'entry' | ||||
# this line was removed in r3 | ||||
|
r5332 | assert_tag :tag => 'td', | ||
:attributes => { :class => /line-code/}, | ||||
:content => /before_filter/ | ||||
|
r1142 | end | ||
|
r4961 | |||
|
r1142 | def test_entry_not_found | ||
|
r7060 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7060 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r8806 | get :entry, :id => PRJ_ID, | ||
:path => repository_path_hash(['sources', 'zzz.c'])[:param] | ||||
|
r5332 | assert_tag :tag => 'p', | ||
:attributes => { :id => /errorExplanation/ }, | ||||
:content => /The entry or revision was not found in the repository/ | ||||
|
r1142 | end | ||
|
r4961 | |||
|
r1142 | def test_entry_download | ||
|
r7061 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7061 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r8806 | get :entry, :id => PRJ_ID, | ||
:path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param], | ||||
|
r7049 | :format => 'raw' | ||
|
r1142 | assert_response :success | ||
end | ||||
|
r1350 | |||
def test_directory_entry | ||||
|
r7062 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7062 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r8806 | get :entry, :id => PRJ_ID, | ||
:path => repository_path_hash(['sources'])[:param] | ||||
|
r1350 | assert_response :success | ||
|
r2735 | assert_template 'show' | ||
|
r1350 | assert_not_nil assigns(:entry) | ||
assert_equal 'sources', assigns(:entry).name | ||||
end | ||||
|
r4961 | |||
|
r1142 | def test_diff | ||
|
r7063 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7063 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r5857 | ['inline', 'sbs'].each do |dt| | ||
get :diff, :id => PRJ_ID, :rev => 3, :type => dt | ||||
assert_response :success | ||||
assert_template 'diff' | ||||
assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_out' }, | ||||
:content => /before_filter :require_login/ | ||||
assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' }, | ||||
:content => /with one change/ | ||||
end | ||||
|
r1142 | end | ||
|
r4961 | |||
|
r4819 | def test_diff_new_files | ||
|
r7054 | assert_equal 0, @repository.changesets.count | ||
|
r4819 | @repository.fetch_changesets | ||
|
r7054 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r5858 | ['inline', 'sbs'].each do |dt| | ||
get :diff, :id => PRJ_ID, :rev => 1, :type => dt | ||||
assert_response :success | ||||
assert_template 'diff' | ||||
assert_tag :tag => 'td', :attributes => { :class => 'line-code diff_in' }, | ||||
:content => /watched.remove_watcher/ | ||||
assert_tag :tag => 'th', :attributes => { :class => 'filename' }, | ||||
:content => /test\/README/ | ||||
assert_tag :tag => 'th', :attributes => { :class => 'filename' }, | ||||
:content => /test\/images\/delete.png / | ||||
assert_tag :tag => 'th', :attributes => { :class => 'filename' }, | ||||
:content => /test\/images\/edit.png/ | ||||
assert_tag :tag => 'th', :attributes => { :class => 'filename' }, | ||||
:content => /test\/sources\/watchers_controller.rb/ | ||||
end | ||||
|
r4819 | end | ||
|
r1142 | |||
def test_annotate | ||||
|
r7055 | assert_equal 0, @repository.changesets.count | ||
|
r4669 | @repository.fetch_changesets | ||
|
r7055 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r8806 | get :annotate, :id => PRJ_ID, | ||
:path => repository_path_hash(['sources', 'watchers_controller.rb'])[:param] | ||||
|
r1142 | assert_response :success | ||
assert_template 'annotate' | ||||
|
r9923 | |||
|
r1142 | # 1.1 line | ||
|
r9923 | assert_select 'tr' do | ||
assert_select 'th.line-num', :text => '21' | ||||
assert_select 'td.revision', :text => /1.1/ | ||||
assert_select 'td.author', :text => /LANG/ | ||||
end | ||||
|
r1142 | # 1.2 line | ||
|
r9923 | assert_select 'tr' do | ||
assert_select 'th.line-num', :text => '32' | ||||
assert_select 'td.revision', :text => /1.2/ | ||||
assert_select 'td.author', :text => /LANG/ | ||||
end | ||||
|
r1142 | end | ||
|
r6120 | |||
def test_destroy_valid_repository | ||||
@request.session[:user_id] = 1 # admin | ||||
|
r7050 | assert_equal 0, @repository.changesets.count | ||
|
r6120 | @repository.fetch_changesets | ||
|
r7050 | @project.reload | ||
assert_equal NUM_REV, @repository.changesets.count | ||||
|
r6120 | |||
|
r8528 | assert_difference 'Repository.count', -1 do | ||
delete :destroy, :id => @repository.id | ||||
end | ||||
|
r6120 | assert_response 302 | ||
@project.reload | ||||
assert_nil @project.repository | ||||
end | ||||
|
r6121 | |||
def test_destroy_invalid_repository | ||||
@request.session[:user_id] = 1 # admin | ||||
|
r8528 | @project.repository.destroy | ||
@repository = Repository::Cvs.create!( | ||||
|
r6121 | :project => Project.find(PRJ_ID), | ||
:root_url => "/invalid", | ||||
:url => MODULE_NAME, | ||||
:log_encoding => 'UTF-8' | ||||
) | ||||
@repository.fetch_changesets | ||||
|
r7051 | @project.reload | ||
|
r6121 | assert_equal 0, @repository.changesets.count | ||
|
r8528 | assert_difference 'Repository.count', -1 do | ||
delete :destroy, :id => @repository.id | ||||
end | ||||
|
r6121 | assert_response 302 | ||
@project.reload | ||||
assert_nil @project.repository | ||||
end | ||||
|
r1142 | else | ||
puts "CVS test repository NOT FOUND. Skipping functional tests !!!" | ||||
def test_fake; assert true end | ||||
end | ||||
end | ||||