add few project specs
This commit is contained in:
		
							parent
							
								
									1b66ca88ad
								
							
						
					
					
						commit
						c320edaa71
					
				| @ -213,7 +213,8 @@ module Devops | |||||||
|       end |       end | ||||||
| 
 | 
 | ||||||
|       def self.create_roles_response roles |       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 |           roles | ||||||
|         else |         else | ||||||
|           info = "" |           info = "" | ||||||
|  | |||||||
| @ -2,11 +2,22 @@ require 'db/mongo/models/project' | |||||||
| 
 | 
 | ||||||
| FactoryGirl.define do | FactoryGirl.define do | ||||||
|   factory :project, class: Devops::Model::Project do |   factory :project, class: Devops::Model::Project do | ||||||
|  |     transient do | ||||||
|  |       with_deploy_env_identifier false | ||||||
|  |       with_deploy_env_identifiers ['foo'] | ||||||
|  |     end | ||||||
|  | 
 | ||||||
|     id 'my_project' |     id 'my_project' | ||||||
|     deploy_envs { |  | ||||||
|       [build(:deploy_env_ec2)] |  | ||||||
|     } |  | ||||||
|     run_list [] |     run_list [] | ||||||
|     description 'desc' |     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 | ||||||
| end | end | ||||||
| @ -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 |     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 |     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 |       expect(project).not_to be_valid | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it "is valid when all envs have uniq identifiers" do |     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 |       expect(project).to be_valid | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
|     it "isn't valid when at least one of envs isn't valid" do |     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 |       expect(project).not_to be_valid | ||||||
|     end |     end | ||||||
|   end |   end | ||||||
| @ -44,6 +44,74 @@ RSpec.describe Devops::Model::Project, type: :model do | |||||||
|     it 'sets run_list to empty_array by default' do |     it 'sets run_list to empty_array by default' do | ||||||
|       expect(described_class.new.run_list).to eq [] |       expect(described_class.new.run_list).to eq [] | ||||||
|     end |     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 | ||||||
| 
 | 
 | ||||||
| end | end | ||||||
| @ -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'}]) |     allow_any_instance_of(Validators::FieldValidator::Image).to receive(:available_images).and_return([{'id' => 'image'}]) | ||||||
|   end |   end | ||||||
| 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 | ||||||
|  | |||||||
| @ -103,10 +103,9 @@ RSpec.shared_examples 'deploy env' do | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe '#create_role' do |   describe '#create_role', stub_logger: true do | ||||||
|     subject { env.create_role('project_name') } |     subject { env.create_role('project_name') } | ||||||
|     before do |     before do | ||||||
|       stub_loggers |  | ||||||
|       allow(env).to receive_message_chain('knife_instance.role_name') { 'role_name' } |       allow(env).to receive_message_chain('knife_instance.role_name') { 'role_name' } | ||||||
|     end |     end | ||||||
| 
 | 
 | ||||||
| @ -153,7 +152,7 @@ RSpec.shared_examples 'deploy env' do | |||||||
|     end |     end | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   describe '#rename' do |   describe '#rename', stub_logger: true do | ||||||
|     subject { env.rename('project_id', 'new_name') } |     subject { env.rename('project_id', 'new_name') } | ||||||
|     let(:old_role_name) {'project_id_name'} |     let(:old_role_name) {'project_id_name'} | ||||||
|     let(:new_role_name) {'project_id_new_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}]"]} |     let(:suggested_new_roles) {["role[#{new_role_name}]"]} | ||||||
| 
 | 
 | ||||||
|     before do |     before do | ||||||
|       stub_loggers |  | ||||||
|       # simulate correct start conditions |       # simulate correct start conditions | ||||||
|       env.run_list = suggested_old_roles |       env.run_list = suggested_old_roles | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -9,7 +9,9 @@ RSpec.shared_examples 'field type validation' do |field, *properties| | |||||||
| 
 | 
 | ||||||
|   describe field do |   describe field do | ||||||
|     it 'should not be nil' 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) |     end if properties.include?(:not_nil) | ||||||
| 
 | 
 | ||||||
|     it 'may be nil' do |     it 'may be nil' do | ||||||
|  | |||||||
| @ -4,13 +4,6 @@ module SpecSupport | |||||||
|   ROOT = File.join(__dir__, '../../') |   ROOT = File.join(__dir__, '../../') | ||||||
|   BLANK_FILE = File.join(ROOT, 'spec/support/blank_file') |   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 |   def self.db_params | ||||||
|     @db ||= begin |     @db ||= begin | ||||||
|       conf = config['mongo'] |       conf = config['mongo'] | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Anton Chuchkalov
						Anton Chuchkalov