1
0
Fork 0
mirror of https://github.com/capistrano/capistrano synced 2023-03-27 23:21:18 -04:00
capistrano/test/configuration/roles_test.rb

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