117 lines
3.8 KiB
Ruby
117 lines
3.8 KiB
Ruby
require 'db/mongo/models/project'
|
|
require_relative 'shared_models_context'
|
|
|
|
RSpec.describe Devops::Model::Project, type: :model do
|
|
let(:project) { build(:project) }
|
|
include_context 'stubbed calls to connector in env validators'
|
|
|
|
describe 'validation rules:' do
|
|
include_examples 'field type validation', :id, :not_nil, :non_empty_string
|
|
include_examples 'field type validation', :deploy_envs, :not_nil, :non_empty_array
|
|
include_examples 'field type validation', :description, :maybe_nil, :maybe_empty_string
|
|
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 = 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 = 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 = build(:project, with_deploy_env_identifiers: ['foo', nil])
|
|
expect(project).not_to be_valid
|
|
end
|
|
end
|
|
|
|
describe '.fields' do
|
|
subject { described_class.fields }
|
|
it { should eq %w(deploy_envs type description) }
|
|
end
|
|
|
|
describe '#initialize' do
|
|
it 'sets @type to generic by default' do
|
|
expect(described_class.new.type).to eq 'generic'
|
|
end
|
|
|
|
it 'sets @archived to false by default' do
|
|
expect(described_class.new.archived).to eq false
|
|
end
|
|
|
|
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 |