mirror of
https://github.com/capistrano/capistrano
synced 2023-03-27 23:21:18 -04:00
143 lines
4.4 KiB
Ruby
143 lines
4.4 KiB
Ruby
require "utils"
|
|
require 'capistrano/configuration/roles'
|
|
require 'capistrano/server_definition'
|
|
|
|
class ConfigurationRolesTest < Test::Unit::TestCase
|
|
class MockConfig
|
|
attr_reader :original_initialize_called
|
|
|
|
def initialize
|
|
@original_initialize_called = true
|
|
end
|
|
|
|
include Capistrano::Configuration::Roles
|
|
end
|
|
|
|
def setup
|
|
@config = MockConfig.new
|
|
end
|
|
|
|
def test_initialize_should_initialize_roles_collection
|
|
assert @config.original_initialize_called
|
|
assert @config.roles.empty?
|
|
end
|
|
|
|
def test_role_should_allow_empty_list
|
|
@config.role :app
|
|
assert @config.roles[:app].empty?
|
|
end
|
|
|
|
def test_role_with_one_argument_should_add_to_roles_collection
|
|
@config.role :app, "app1.capistrano.test"
|
|
assert_equal [:app], @config.roles.keys
|
|
assert_role_equals %w(app1.capistrano.test)
|
|
end
|
|
|
|
def test_role_block_returning_single_string_is_added_to_roles_collection
|
|
@config.role :app do
|
|
'app1.capistrano.test'
|
|
end
|
|
assert_role_equals %w(app1.capistrano.test)
|
|
end
|
|
|
|
def test_role_with_multiple_arguments_should_add_each_to_roles_collection
|
|
@config.role :app, "app1.capistrano.test", "app2.capistrano.test"
|
|
assert_equal [:app], @config.roles.keys
|
|
assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
|
|
end
|
|
|
|
def test_role_with_block_and_strings_should_add_both_to_roles_collection
|
|
@config.role :app, 'app1.capistrano.test' do
|
|
'app2.capistrano.test'
|
|
end
|
|
assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
|
|
end
|
|
|
|
def test_role_block_returning_array_should_add_each_to_roles_collection
|
|
@config.role :app do
|
|
['app1.capistrano.test', 'app2.capistrano.test']
|
|
end
|
|
assert_role_equals %w(app1.capistrano.test app2.capistrano.test)
|
|
end
|
|
|
|
def test_role_with_options_should_apply_options_to_each_argument
|
|
@config.role :app, "app1.capistrano.test", "app2.capistrano.test", :extra => :value
|
|
@config.roles[:app].each do |server|
|
|
assert_equal({:extra => :value}, server.options)
|
|
end
|
|
end
|
|
|
|
def test_role_with_options_should_apply_options_to_block_results
|
|
@config.role :app, :extra => :value do
|
|
['app1.capistrano.test', 'app2.capistrano.test']
|
|
end
|
|
@config.roles[:app].each do |server|
|
|
assert_equal({:extra => :value}, server.options)
|
|
end
|
|
end
|
|
|
|
def test_options_should_apply_only_to_this_argument_set
|
|
@config.role :app, 'app1.capistrano.test', 'app2.capistrano.test' do
|
|
['app3.capistrano.test', 'app4.capistrano.test']
|
|
end
|
|
@config.role :app, 'app5.capistrano.test', 'app6.capistrano.test', :extra => :value do
|
|
['app7.capistrano.test', 'app8.capistrano.test']
|
|
end
|
|
@config.role :app, 'app9.capistrano.test'
|
|
|
|
option_hosts = ['app5.capistrano.test', 'app6.capistrano.test', 'app7.capistrano.test', 'app8.capistrano.test']
|
|
@config.roles[:app].each do |server|
|
|
if (option_hosts.include? server.host)
|
|
assert_equal({:extra => :value}, server.options)
|
|
else
|
|
assert_not_equal({:extra => :value}, server.options)
|
|
end
|
|
end
|
|
end
|
|
|
|
# Here, the source should be more readable than the method name
|
|
def test_role_block_returns_options_hash_is_merged_with_role_options_argument
|
|
@config.role :app, :first => :one, :second => :two do
|
|
['app1.capistrano.test', 'app2.capistrano.test', {:second => :please, :third => :three}]
|
|
end
|
|
@config.roles[:app].each do |server|
|
|
assert_equal({:first => :one, :second => :please, :third => :three}, server.options)
|
|
end
|
|
end
|
|
|
|
def test_role_block_can_override_role_options_argument
|
|
@config.role :app, :value => :wrong do
|
|
Capistrano::ServerDefinition.new('app.capistrano.test')
|
|
end
|
|
@config.roles[:app].servers
|
|
@config.roles[:app].servers.each do |server|
|
|
assert_not_equal({:value => :wrong}, server.options)
|
|
end
|
|
end
|
|
|
|
def test_role_block_can_return_nil
|
|
@config.role :app do
|
|
nil
|
|
end
|
|
assert_role_equals ([])
|
|
end
|
|
|
|
def test_role_block_can_return_empty_array
|
|
@config.role :app do
|
|
[]
|
|
end
|
|
assert_role_equals ([])
|
|
end
|
|
|
|
def test_role_definitions_via_server_should_associate_server_with_roles
|
|
@config.server "www.capistrano.test", :web, :app
|
|
assert_equal %w(www.capistrano.test), @config.roles[:app].map { |s| s.host }
|
|
assert_equal %w(www.capistrano.test), @config.roles[:web].map { |s| s.host }
|
|
end
|
|
|
|
private
|
|
|
|
def assert_role_equals(list)
|
|
assert_equal list, @config.roles[:app].map { |s| s.host }
|
|
end
|
|
end
|