add few project specs

This commit is contained in:
Anton Chuchkalov 2015-12-02 12:51:23 +03:00
parent 1b66ca88ad
commit c320edaa71
7 changed files with 100 additions and 19 deletions

View File

@ -213,7 +213,8 @@ module Devops
end
def self.create_roles_response roles
if !roles || roles.is_a?(String)
return "error in creating roles" unless roles
if roles.is_a?(String)
roles
else
info = ""

View File

@ -2,11 +2,22 @@ require 'db/mongo/models/project'
FactoryGirl.define do
factory :project, class: Devops::Model::Project do
transient do
with_deploy_env_identifier false
with_deploy_env_identifiers ['foo']
end
id 'my_project'
deploy_envs {
[build(:deploy_env_ec2)]
}
run_list []
description 'desc'
after(:build) do |project, evaluator|
unless project.deploy_envs
project.deploy_envs = []
evaluator.with_deploy_env_identifiers.each do |env_id|
project.deploy_envs << build(:deploy_env_ec2, identifier: env_id)
end
end
end
end
end

View File

@ -12,17 +12,17 @@ RSpec.describe Devops::Model::Project, type: :model do
include_examples 'field type validation', :run_list, :not_nil, :maybe_empty_array, :run_list
it "isn't valid when has envs with same identifier" do
project.deploy_envs << build(:deploy_env_ec2)
project = build(:project, with_deploy_env_identifiers: %w(foo foo))
expect(project).not_to be_valid
end
it "is valid when all envs have uniq identifiers" do
project.deploy_envs << build(:deploy_env_ec2, identifier: 'new')
project = build(:project, with_deploy_env_identifiers: %w(foo bar))
expect(project).to be_valid
end
it "isn't valid when at least one of envs isn't valid" do
project.deploy_envs << build(:deploy_env_ec2, identifier: nil)
project = build(:project, with_deploy_env_identifiers: ['foo', nil])
expect(project).not_to be_valid
end
end
@ -44,6 +44,74 @@ RSpec.describe Devops::Model::Project, type: :model do
it 'sets run_list to empty_array by default' do
expect(described_class.new.run_list).to eq []
end
describe 'deploy envs building' do
let(:params) { {'deploy_envs' => [ {'provider' => @env_provider, 'identifier' => 'foo'} ]} }
it 'builds envs array from given params' do
@env_provider = 'ec2'
expect(
described_class.new(params).deploy_envs
).to be_an_array_of(Devops::Model::DeployEnvEc2).and have_size(1)
end
it 'builds ec2 deploy envs from given params' do
@env_provider = 'ec2'
builded_env = described_class.new(params).deploy_envs.first
expect(builded_env).to be_a(Devops::Model::DeployEnvEc2)
expect(builded_env.identifier).to eq 'foo'
end
it 'build openstack deploy envs from given params' do
@env_provider = 'openstack'
builded_env = described_class.new(params).deploy_envs.first
expect(builded_env).to be_a(Devops::Model::DeployEnvOpenstack)
end
it 'build static deploy envs from given params' do
@env_provider = 'static'
builded_env = described_class.new(params).deploy_envs.first
expect(builded_env).to be_a(Devops::Model::DeployEnvStatic)
end
end
end
describe '#deploy_env' do
let(:project) { project = build(:project, with_deploy_env_identifiers: %w(foo bar)) }
it 'returns found env' do
expect(project.deploy_env('bar')).to be_an(Devops::Model::DeployEnvEc2)
end
it 'raises RecordNotFound if there is no such env' do
expect {
project.deploy_env('missing')
}.to raise_error RecordNotFound
end
end
describe '#add_deploy_env', stub_logger: true do
let(:env) {build(:deploy_env_ec2)}
subject { project.add_deploy_env(env) }
before do
allow(Devops::Db).to receive_message_chain('connector.add_deploy_env_to_project')
end
it 'inserts deploy env into mongo via connector' do
expect(
Devops::Db
).to receive_message_chain('connector.add_deploy_env_to_project').with(project.id, env)
subject
end
it 'creates chef role' do
expect(env).to receive(:create_role).with(project.id)
subject
end
it 'returns string' do
expect(subject).to be_a(String)
end
end
end

View File

@ -11,3 +11,11 @@ RSpec.shared_context 'stubbed calls to connector in env validators' do
allow_any_instance_of(Validators::FieldValidator::Image).to receive(:available_images).and_return([{'id' => 'image'}])
end
end
RSpec.shared_context 'stubbed calls to logger', stub_logger: true do
before do
allow(DevopsLogger).to receive_message_chain('logger.debug')
allow(DevopsLogger).to receive_message_chain('logger.info')
allow(DevopsLogger).to receive_message_chain('logger.error')
end
end

View File

@ -103,10 +103,9 @@ RSpec.shared_examples 'deploy env' do
end
end
describe '#create_role' do
describe '#create_role', stub_logger: true do
subject { env.create_role('project_name') }
before do
stub_loggers
allow(env).to receive_message_chain('knife_instance.role_name') { 'role_name' }
end
@ -153,7 +152,7 @@ RSpec.shared_examples 'deploy env' do
end
end
describe '#rename' do
describe '#rename', stub_logger: true do
subject { env.rename('project_id', 'new_name') }
let(:old_role_name) {'project_id_name'}
let(:new_role_name) {'project_id_new_name'}
@ -161,7 +160,6 @@ RSpec.shared_examples 'deploy env' do
let(:suggested_new_roles) {["role[#{new_role_name}]"]}
before do
stub_loggers
# simulate correct start conditions
env.run_list = suggested_old_roles

View File

@ -9,7 +9,9 @@ RSpec.shared_examples 'field type validation' do |field, *properties|
describe field do
it 'should not be nil' do
expect(build(validated_model_name, field => nil)).not_to be_valid
model = build(validated_model_name)
model.send("#{field}=", nil)
expect(model).not_to be_valid
end if properties.include?(:not_nil)
it 'may be nil' do

View File

@ -4,13 +4,6 @@ module SpecSupport
ROOT = File.join(__dir__, '../../')
BLANK_FILE = File.join(ROOT, 'spec/support/blank_file')
def stub_loggers
allow(DevopsLogger).to receive_message_chain('logger.debug')
allow(DevopsLogger).to receive_message_chain('logger.info')
allow(DevopsLogger).to receive_message_chain('logger.error')
end
def self.db_params
@db ||= begin
conf = config['mongo']