From c320edaa7175566cea547f1b489cfc9979bd7eb3 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Wed, 2 Dec 2015 12:51:23 +0300 Subject: [PATCH] add few project specs --- devops-service/db/mongo/models/project.rb | 3 +- devops-service/spec/factories/project.rb | 17 ++++- devops-service/spec/models/project_spec.rb | 74 ++++++++++++++++++- .../spec/models/shared_models_context.rb | 8 ++ .../spec/support/shared_deploy_env_specs.rb | 6 +- .../spec/support/shared_validation_specs.rb | 4 +- devops-service/spec/support/spec_support.rb | 7 -- 7 files changed, 100 insertions(+), 19 deletions(-) diff --git a/devops-service/db/mongo/models/project.rb b/devops-service/db/mongo/models/project.rb index 8b14847..da52ce5 100644 --- a/devops-service/db/mongo/models/project.rb +++ b/devops-service/db/mongo/models/project.rb @@ -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 = "" diff --git a/devops-service/spec/factories/project.rb b/devops-service/spec/factories/project.rb index 561085f..4569e4f 100644 --- a/devops-service/spec/factories/project.rb +++ b/devops-service/spec/factories/project.rb @@ -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 \ No newline at end of file diff --git a/devops-service/spec/models/project_spec.rb b/devops-service/spec/models/project_spec.rb index 9b19eb2..c721912 100644 --- a/devops-service/spec/models/project_spec.rb +++ b/devops-service/spec/models/project_spec.rb @@ -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 \ No newline at end of file diff --git a/devops-service/spec/models/shared_models_context.rb b/devops-service/spec/models/shared_models_context.rb index 51804e0..fe5e754 100644 --- a/devops-service/spec/models/shared_models_context.rb +++ b/devops-service/spec/models/shared_models_context.rb @@ -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 diff --git a/devops-service/spec/support/shared_deploy_env_specs.rb b/devops-service/spec/support/shared_deploy_env_specs.rb index de65ed3..a23b1b6 100644 --- a/devops-service/spec/support/shared_deploy_env_specs.rb +++ b/devops-service/spec/support/shared_deploy_env_specs.rb @@ -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 diff --git a/devops-service/spec/support/shared_validation_specs.rb b/devops-service/spec/support/shared_validation_specs.rb index 4d86657..67bc6a4 100644 --- a/devops-service/spec/support/shared_validation_specs.rb +++ b/devops-service/spec/support/shared_validation_specs.rb @@ -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 diff --git a/devops-service/spec/support/spec_support.rb b/devops-service/spec/support/spec_support.rb index 664927f..14a684a 100644 --- a/devops-service/spec/support/spec_support.rb +++ b/devops-service/spec/support/spec_support.rb @@ -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']