1
0
Fork 0
mirror of https://github.com/capistrano/capistrano synced 2023-03-27 23:21:18 -04:00
capistrano/test/deploy/scm/mercurial_test.rb
Jamis Buck d48ed9a986 report hostname with output of scm_run.
This should make it easier to troubleshoot issues that
crop up when running the scm_command via a deployment
strategy.
2008-05-31 10:03:29 -06:00

129 lines
4.3 KiB
Ruby

require "utils"
require 'capistrano/recipes/deploy/scm/mercurial'
class DeploySCMMercurialTest < Test::Unit::TestCase
class TestSCM < Capistrano::Deploy::SCM::Mercurial
default_command "hg"
end
def setup
@config = { }
def @config.exists?(name); key?(name); end
@source = TestSCM.new(@config)
end
def test_head
assert_equal "tip", @source.head
end
def test_checkout
@config[:repository] = "http://example.com/project-hg"
dest = "/var/www"
assert_equal "hg clone --noupdate http://example.com/project-hg /var/www && hg update --repository /var/www --clean 8a8e00b8f11b", @source.checkout('8a8e00b8f11b', dest)
end
def test_diff
assert_equal "hg diff --rev tip", @source.diff('tip')
assert_equal "hg diff --rev 1 --rev 2", @source.diff('1', '2')
end
def test_log
assert_equal "hg log --rev 8a8e00b8f11b", @source.log('8a8e00b8f11b')
assert_equal "hg log --rev 0:3", @source.log('0', '3')
end
def test_query_revision
assert_equal "hg log -r 8a8e00b8f11b --template '{node|short}'", @source.query_revision('8a8e00b8f11b') { |o| o }
end
def test_username_should_be_backwards_compatible
# older versions of this module required :scm_user var instead
# of the currently preferred :scm_username
require 'capistrano/logger'
@config[:scm_user] = "fred"
text = "user:"
assert_equal "fred\n", @source.handle_data(mock_state, :test_stream, text)
# :scm_username takes priority
@config[:scm_username] = "wilma"
assert_equal "wilma\n", @source.handle_data(mock_state, :test_stream, text)
end
def test_sync
dest = "/var/www"
assert_equal "hg pull --repository /var/www && hg update --repository /var/www --clean 8a8e00b8f11b", @source.sync('8a8e00b8f11b', dest)
# With :scm_command
@config[:scm_command] = "/opt/local/bin/hg"
assert_equal "/opt/local/bin/hg pull --repository /var/www && /opt/local/bin/hg update --repository /var/www --clean 8a8e00b8f11b", @source.sync('8a8e00b8f11b', dest)
end
def test_export
dest = "/var/www"
assert_raise(NotImplementedError) { @source.export('8a8e00b8f11b', dest) }
end
def test_sends_password_if_set
require 'capistrano/logger'
text = "password:"
@config[:scm_password] = "opensesame"
assert_equal "opensesame\n", @source.handle_data(mock_state, :test_stream, text)
end
def test_prompts_for_password_if_preferred
require 'capistrano/logger'
require 'capistrano/cli'
Capistrano::CLI.stubs(:password_prompt).with("hg password: ").returns("opensesame")
@config[:scm_prefer_prompt] = true
text = "password:"
assert_equal "opensesame\n", @source.handle_data(mock_state, :test_stream, text)
end
# Tests from base_test.rb, makin' sure we didn't break anything up there!
def test_command_should_default_to_default_command
assert_equal "hg", @source.command
@source.local { assert_equal "hg", @source.command }
end
def test_command_should_use_scm_command_if_available
@config[:scm_command] = "/opt/local/bin/hg"
assert_equal "/opt/local/bin/hg", @source.command
end
def test_command_should_use_scm_command_in_local_mode_if_local_scm_command_not_set
@config[:scm_command] = "/opt/local/bin/hg"
@source.local { assert_equal "/opt/local/bin/hg", @source.command }
end
def test_command_should_use_local_scm_command_in_local_mode_if_local_scm_command_is_set
@config[:scm_command] = "/opt/local/bin/hg"
@config[:local_scm_command] = "/usr/local/bin/hg"
assert_equal "/opt/local/bin/hg", @source.command
@source.local { assert_equal "/usr/local/bin/hg", @source.command }
end
def test_command_should_use_default_if_scm_command_is_default
@config[:scm_command] = :default
assert_equal "hg", @source.command
end
def test_command_should_use_default_in_local_mode_if_local_scm_command_is_default
@config[:scm_command] = "/foo/bar/hg"
@config[:local_scm_command] = :default
@source.local { assert_equal "hg", @source.command }
end
def test_local_mode_proxy_should_treat_messages_as_being_in_local_mode
@config[:scm_command] = "/foo/bar/hg"
@config[:local_scm_command] = :default
assert_equal "hg", @source.local.command
assert_equal "/foo/bar/hg", @source.command
end
private
def mock_state
{ :channel => { :host => "abc" } }
end
end