mirror of
https://github.com/capistrano/capistrano
synced 2023-03-27 23:21:18 -04:00
Add integration tests for DSL
These tests now document how to use the Capistrano DSL to set and fetch hosts and variables using both `role` and `server` syntax
This commit is contained in:
parent
cdf3b708de
commit
dbbf6d4b03
7 changed files with 210 additions and 8 deletions
|
@ -29,8 +29,8 @@ module Capistrano
|
|||
end
|
||||
end
|
||||
|
||||
def role(name, hosts)
|
||||
servers.add_role(name, hosts)
|
||||
def role(name, hosts, options={})
|
||||
servers.add_role(name, hosts, options)
|
||||
end
|
||||
|
||||
def server(name, properties={})
|
||||
|
|
|
@ -8,8 +8,8 @@ module Capistrano
|
|||
servers.add server(host).with(properties)
|
||||
end
|
||||
|
||||
def add_role(role, hosts)
|
||||
Array(hosts).each { |host| add_host(host, roles: role) }
|
||||
def add_role(role, hosts, options={})
|
||||
Array(hosts).each { |host| add_host(host, options.merge(roles: role)) }
|
||||
end
|
||||
|
||||
def roles_for(names)
|
||||
|
|
|
@ -37,3 +37,4 @@ module Capistrano
|
|||
|
||||
end
|
||||
end
|
||||
self.extend Capistrano::DSL
|
||||
|
|
|
@ -12,7 +12,7 @@ module Capistrano
|
|||
|
||||
def any?(key)
|
||||
value = fetch(key)
|
||||
if value.respond_to?(:any)
|
||||
if value.respond_to?(:any?)
|
||||
value.any?
|
||||
else
|
||||
!fetch(key).nil?
|
||||
|
@ -27,8 +27,8 @@ module Capistrano
|
|||
env.ask(key, value)
|
||||
end
|
||||
|
||||
def role(name, servers)
|
||||
env.role(name, servers)
|
||||
def role(name, servers, options={})
|
||||
env.role(name, servers, options)
|
||||
end
|
||||
|
||||
def server(name, properties={})
|
||||
|
|
201
spec/integration/dsl_spec.rb
Normal file
201
spec/integration/dsl_spec.rb
Normal file
|
@ -0,0 +1,201 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Capistrano::DSL do
|
||||
|
||||
let(:dsl) { Class.new.extend Capistrano::DSL }
|
||||
|
||||
describe 'setting and fetching hosts' do
|
||||
describe 'when defining a host using the `server` syntax' do
|
||||
before do
|
||||
dsl.server 'example1.com', roles: %w{web}, active: true
|
||||
dsl.server 'example2.com', roles: %w{web}
|
||||
dsl.server 'example3.com', roles: %w{app web}, active: true
|
||||
dsl.server 'example4.com', roles: %w{app}, primary: true
|
||||
end
|
||||
|
||||
describe 'fetching servers by role' do
|
||||
subject { dsl.roles(:app) }
|
||||
|
||||
it 'returns the servers' do
|
||||
expect(subject.map(&:hostname)).to eq %w{example3.com example4.com}
|
||||
end
|
||||
end
|
||||
|
||||
describe 'fetching filtered servers by role' do
|
||||
subject { dsl.roles(:app, filter: :active) }
|
||||
|
||||
it 'returns the servers' do
|
||||
expect(subject.map(&:hostname)).to eq %w{example3.com}
|
||||
end
|
||||
end
|
||||
|
||||
describe 'fetching selected servers by role' do
|
||||
subject { dsl.roles(:app, select: :active) }
|
||||
|
||||
it 'returns the servers' do
|
||||
expect(subject.map(&:hostname)).to eq %w{example3.com}
|
||||
end
|
||||
end
|
||||
|
||||
describe 'fetching the primary server by role' do
|
||||
context 'when inferring primary status based on order' do
|
||||
subject { dsl.primary(:web) }
|
||||
it 'returns the servers' do
|
||||
expect(subject.hostname).to eq 'example1.com'
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the attribute `primary` is explicity set' do
|
||||
subject { dsl.primary(:app) }
|
||||
it 'returns the servers' do
|
||||
expect(subject.hostname).to eq 'example4.com'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe 'when defining hosts using the `role` syntax' do
|
||||
before do
|
||||
dsl.role :web, %w{example1.com example2.com example3.com}
|
||||
dsl.role :web, %w{example1.com}, active: true
|
||||
dsl.role :app, %w{example3.com example4.com}
|
||||
end
|
||||
|
||||
describe 'fetching servers by role' do
|
||||
subject { dsl.roles(:app) }
|
||||
|
||||
it 'returns the servers' do
|
||||
expect(subject.map(&:hostname)).to eq %w{example3.com example4.com}
|
||||
end
|
||||
end
|
||||
|
||||
describe 'fetching filtered servers by role' do
|
||||
subject { dsl.roles(:app, filter: :active) }
|
||||
|
||||
it 'returns the servers' do
|
||||
expect(subject.map(&:hostname)).to eq %w{example3.com}
|
||||
end
|
||||
end
|
||||
|
||||
describe 'fetching selected servers by role' do
|
||||
subject { dsl.roles(:app, select: :active) }
|
||||
|
||||
it 'returns the servers' do
|
||||
expect(subject.map(&:hostname)).to eq %w{example3.com}
|
||||
end
|
||||
end
|
||||
|
||||
describe 'fetching the primary server by role' do
|
||||
context 'when inferring primary status based on order' do
|
||||
subject { dsl.primary(:web) }
|
||||
it 'returns the servers' do
|
||||
expect(subject.hostname).to eq 'example1.com'
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the attribute `primary` is explicity set' do
|
||||
subject { dsl.primary(:app) }
|
||||
it 'returns the servers' do
|
||||
expect(subject.hostname).to eq 'example4.com'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe 'setting and fetching variables' do
|
||||
|
||||
before do
|
||||
dsl.set :scm, :git
|
||||
end
|
||||
|
||||
context 'without a default' do
|
||||
context 'when the variables is defined' do
|
||||
it 'returns the variable' do
|
||||
expect(dsl.fetch(:scm)).to eq :git
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the variables is undefined' do
|
||||
it 'returns nil' do
|
||||
expect(dsl.fetch(:source_control)).to be_nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context 'with a default' do
|
||||
context 'when the variables is defined' do
|
||||
it 'returns the variable' do
|
||||
expect(dsl.fetch(:scm, :svn)).to eq :git
|
||||
end
|
||||
end
|
||||
|
||||
context 'when the variables is undefined' do
|
||||
it 'returns the default' do
|
||||
expect(dsl.fetch(:source_control, :svn)).to eq :svn
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
describe 'asking for a variable' do
|
||||
before do
|
||||
dsl.ask(:scm, :svn)
|
||||
$stdout.stubs(:puts)
|
||||
end
|
||||
|
||||
context 'variable is provided' do
|
||||
before do
|
||||
$stdin.expects(:gets).returns('git')
|
||||
end
|
||||
|
||||
it 'sets the input as the variable' do
|
||||
expect(dsl.fetch(:scm)).to eq 'git'
|
||||
end
|
||||
end
|
||||
|
||||
context 'variable is not provided' do
|
||||
before do
|
||||
$stdin.expects(:gets).returns('')
|
||||
end
|
||||
|
||||
it 'sets the variable as the default' do
|
||||
expect(dsl.fetch(:scm)).to eq :svn
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'checking for presence' do
|
||||
subject { dsl.any? :linked_files }
|
||||
|
||||
before do
|
||||
dsl.set(:linked_files, linked_files)
|
||||
end
|
||||
|
||||
context 'variable is an non-empty array' do
|
||||
let(:linked_files) { %w{1} }
|
||||
|
||||
it { should be_true }
|
||||
end
|
||||
|
||||
context 'variable is an empty array' do
|
||||
let(:linked_files) { [] }
|
||||
it { should be_false }
|
||||
end
|
||||
|
||||
context 'variable exists, is not an array' do
|
||||
let(:linked_files) { stub }
|
||||
it { should be_true }
|
||||
end
|
||||
|
||||
context 'variable is nil' do
|
||||
let(:linked_files) { nil }
|
||||
it { should be_false }
|
||||
end
|
||||
end
|
||||
|
||||
end
|
0
spec/integration/test_defaults.rb
Normal file
0
spec/integration/test_defaults.rb
Normal file
|
@ -18,7 +18,7 @@ module Capistrano
|
|||
|
||||
before do
|
||||
Configuration::Servers.expects(:new).returns(servers)
|
||||
servers.expects(:add_role).with(:app, %w{server1 server2})
|
||||
servers.expects(:add_role).with(:app, %w{server1 server2}, {})
|
||||
end
|
||||
|
||||
it 'adds the role' do
|
||||
|
|
Loading…
Reference in a new issue