From 2825eee48e155cb44fc345c38cff2e57192254f4 Mon Sep 17 00:00:00 2001 From: Anton Chuchkalov Date: Mon, 7 Dec 2015 13:04:35 +0300 Subject: [PATCH] more specs --- devops-service/db/mongo/models/project.rb | 1 + devops-service/spec/models/project_spec.rb | 86 ++++++++++++++++++- .../spec/models/shared_models_context.rb | 7 ++ 3 files changed, 91 insertions(+), 3 deletions(-) diff --git a/devops-service/db/mongo/models/project.rb b/devops-service/db/mongo/models/project.rb index a4a4a23..36abbc2 100644 --- a/devops-service/db/mongo/models/project.rb +++ b/devops-service/db/mongo/models/project.rb @@ -146,6 +146,7 @@ module Devops h end + # TODO: why symbols here? def to_hash_list { name: self.id, diff --git a/devops-service/spec/models/project_spec.rb b/devops-service/spec/models/project_spec.rb index bed0128..9d259c1 100644 --- a/devops-service/spec/models/project_spec.rb +++ b/devops-service/spec/models/project_spec.rb @@ -235,9 +235,9 @@ RSpec.describe Devops::Model::Project, type: :model do end describe '#delete_deploy_env' do - it 'removes env' do - allow(Devops::Db).to receive_message_chain('connector.remove_deploy_env_from_project') - expect(Devops::Db).to receive_message_chain('connector.remove_deploy_env_from_project').with(project.id, 'foo') + it 'removes env', stubbed_connector: true do + allow(stubbed_connector).to receive(:remove_deploy_env_from_project) + expect(stubbed_connector).to receive(:remove_deploy_env_from_project).with(project.id, 'foo') project.delete_deploy_env('foo') expect(project.deploy_envs).to match_array [] end @@ -271,4 +271,84 @@ RSpec.describe Devops::Model::Project, type: :model do end end + describe '#to_hash_list' do + it 'returns hash' do + expect(project.to_hash_list).to be_a(Hash) + end + end + + describe '#deploy_info' do + subject { project.deploy_info(project.deploy_env('foo')) } + it 'returns hash' do + expect(subject).to be_a(Hash) + end + + it 'includes use_json_file, project and project_info' do + expect(subject).to include('use_json_file', 'project', 'project_info') + expect(subject['project_info']).to be_a(Hash) + end + end + + describe '#to_hash_without_id' do + subject { project.to_hash_without_id } + it 'returns a hash' do + expect(subject).to be_a(Hash) + end + + it "doesn't include id or name" do + expect(subject).not_to include('id', 'name') + end + end + + describe '#create', stubbed_connector: true do + before do + allow(stubbed_connector).to receive(:project_insert) + end + subject { project.create } + + it 'run hooks' do + expect(project).to receive(:run_hook).with(:before_create).ordered + expect(project).to receive(:run_hook).with(:after_create).ordered + subject + end + + it 'inserts record into DB' do + expect(stubbed_connector).to receive(:project_insert).with(project) + subject + end + + it 'returns a hash' do + expect(subject).to be_a(Hash) + end + end + + describe '#delete', stubbed_connector: true do + before do + allow(stubbed_connector).to receive(:project_delete) + end + subject { project.delete } + + it 'run hooks' do + expect(project).to receive(:run_hook).with(:before_delete).ordered + expect(project).to receive(:run_hook).with(:after_delete).ordered + subject + end + + it 'deletes record into DB' do + expect(stubbed_connector).to receive(:project_delete).with(project.id) + subject + end + + it 'returns a hash' do + expect(subject).to be_a(Hash) + end + end + + # describe '#validate_components' do + # it "raises InvalidRecord if one of component doesn't include filename" do + # project.components = {'name' => {}} + # expect{project.validate_components}.to raise_error(InvalidRecord) + # 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 fe5e754..a0f1fa6 100644 --- a/devops-service/spec/models/shared_models_context.rb +++ b/devops-service/spec/models/shared_models_context.rb @@ -19,3 +19,10 @@ RSpec.shared_context 'stubbed calls to logger', stub_logger: true do allow(DevopsLogger).to receive_message_chain('logger.error') end end + +RSpec.shared_context 'stubbed calls to connector', stubbed_connector: true do + let(:stubbed_connector) { double() } + before do + allow(Devops::Db).to receive(:connector) { stubbed_connector } + end +end \ No newline at end of file