specs refactoring
This commit is contained in:
parent
e70ff0b832
commit
3616162b75
@ -36,8 +36,9 @@ guard :rspec, cmd: "rspec" do
|
||||
watch(rspec.spec_support) { rspec.spec_dir }
|
||||
watch(rspec.spec_files)
|
||||
|
||||
# Factories files
|
||||
# Spec config files
|
||||
watch(%r{spec/factories/.+\.rb}) { rspec.spec_dir }
|
||||
watch(%r{spec/shared_contexts.+\.rb}) { rspec.spec_dir }
|
||||
|
||||
# Devops files
|
||||
watch(%r{db/.+\.rb}) { rspec.spec_dir }
|
||||
|
||||
@ -9,11 +9,12 @@ end
|
||||
|
||||
require "db/validators/base"
|
||||
[
|
||||
'db/validators/helpers/*.rb',
|
||||
'db/validators/deploy_env/*.rb',
|
||||
'db/validators/key/*.rb',
|
||||
'db/validators/image/*.rb',
|
||||
'db/validators/field_validators/*.rb'
|
||||
'helpers/*.rb',
|
||||
'deploy_env/*.rb',
|
||||
'key/*.rb',
|
||||
'image/*.rb',
|
||||
'field_validators/*.rb'
|
||||
].each do |files_regexp|
|
||||
Dir[File.join(Devops::Application.root, files_regexp)].each {|file| require file }
|
||||
current_dir = File.dirname(__FILE__)
|
||||
Dir[File.join(current_dir, files_regexp)].each {|file| require file }
|
||||
end
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
require 'db/mongo/connectors/filter'
|
||||
require 'spec/connectors/tester_connector/filter'
|
||||
require_relative 'shared_connectors_context'
|
||||
|
||||
RSpec.describe Connectors::Filter, type: :connector do
|
||||
set_tester_connector TesterConnector::Filter
|
||||
include_context 'connectors'
|
||||
let(:provider) {'ec2'}
|
||||
|
||||
describe '#available_images' do
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
require 'db/mongo/connectors/image'
|
||||
require 'spec/connectors/tester_connector/image'
|
||||
require_relative 'shared_connectors_context'
|
||||
|
||||
RSpec.describe Connectors::Image, type: :connector do
|
||||
set_tester_connector TesterConnector::Image
|
||||
include_context 'connectors'
|
||||
let(:model_class) { Devops::Model::Image }
|
||||
|
||||
include_examples 'mongo connector', {
|
||||
|
||||
@ -1,11 +1,9 @@
|
||||
require 'db/mongo/connectors/key'
|
||||
require 'db/mongo/models/key'
|
||||
require 'spec/connectors/tester_connector/key'
|
||||
require_relative 'shared_connectors_context'
|
||||
|
||||
RSpec.describe Connectors::Key, type: :connector do
|
||||
set_tester_connector TesterConnector::Key
|
||||
include_context 'connectors'
|
||||
let(:model_class) { Devops::Model::Key }
|
||||
|
||||
include_examples 'mongo connector', model_name: :key, only: [:insert, :list]
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
require 'db/mongo/connectors/project'
|
||||
require 'spec/connectors/tester_connector/project'
|
||||
require_relative 'shared_connectors_context'
|
||||
|
||||
RSpec.describe Connectors::Project, type: :connector do
|
||||
set_tester_connector TesterConnector::Project
|
||||
include_context 'connectors'
|
||||
let(:model_class) { Devops::Model::Project }
|
||||
|
||||
include_examples 'mongo connector', {
|
||||
|
||||
@ -1,10 +1,8 @@
|
||||
require 'db/mongo/connectors/stack_template'
|
||||
require 'spec/connectors/tester_connector/stack_template'
|
||||
require_relative 'shared_connectors_context'
|
||||
|
||||
RSpec.describe Connectors::StackTemplate, type: :connector do
|
||||
set_tester_connector TesterConnector::StackTemplate
|
||||
include_context 'connectors'
|
||||
let(:model_class) { Devops::Model::StackTemplateEc2 }
|
||||
|
||||
include_examples 'mongo connector', {
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
require 'db/mongo/models/deploy_env/deploy_env_ec2'
|
||||
require_relative '../shared_models_context'
|
||||
require_relative 'shared_deploy_env_specs'
|
||||
require_relative 'shared_cloud_deploy_env_specs'
|
||||
|
||||
RSpec.describe Devops::Model::DeployEnvEc2, type: :model do
|
||||
let(:env) { build(:deploy_env_ec2) }
|
||||
include_context 'stubbed calls to connector in env validators'
|
||||
|
||||
it_behaves_like 'deploy env'
|
||||
it_behaves_like 'cloud deploy env'
|
||||
describe 'it inherits from cloud deploy_env', stubbed_env_validators: true do
|
||||
it_behaves_like 'deploy env'
|
||||
it_behaves_like 'cloud deploy env'
|
||||
end
|
||||
|
||||
describe '#initialize' do
|
||||
it 'keep only first subnet in given array' do
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
require 'db/mongo/models/deploy_env/deploy_env_openstack'
|
||||
require_relative '../shared_models_context'
|
||||
require_relative 'shared_deploy_env_specs'
|
||||
require_relative 'shared_cloud_deploy_env_specs'
|
||||
|
||||
RSpec.describe Devops::Model::DeployEnvOpenstack, type: :model do
|
||||
let(:env) { build(:deploy_env_openstack) }
|
||||
include_context 'stubbed calls to connector in env validators'
|
||||
|
||||
it_behaves_like 'deploy env'
|
||||
it_behaves_like 'cloud deploy env'
|
||||
describe 'it inherits from cloud deploy_env', stubbed_env_validators: true do
|
||||
it_behaves_like 'deploy env'
|
||||
it_behaves_like 'cloud deploy env'
|
||||
end
|
||||
|
||||
describe '.create' do
|
||||
it 'returns instance of DeployEnvOpenstack' do
|
||||
|
||||
@ -1,14 +1,19 @@
|
||||
require 'db/mongo/models/deploy_env/deploy_env_static'
|
||||
require_relative 'shared_deploy_env_specs'
|
||||
|
||||
RSpec.describe Devops::Model::DeployEnvStatic, type: :model do
|
||||
let(:env) { build(:deploy_env_static) }
|
||||
|
||||
before do
|
||||
allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(static))
|
||||
allow_any_instance_of(Validators::Helpers::Users).to receive(:available_users).and_return(['root'])
|
||||
|
||||
describe 'it inherits from deploy env', stubbed_logger: true do
|
||||
before do
|
||||
allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(static))
|
||||
allow_any_instance_of(Validators::Helpers::Users).to receive(:available_users).and_return(['root'])
|
||||
end
|
||||
|
||||
it_behaves_like 'deploy env'
|
||||
end
|
||||
|
||||
it_behaves_like 'deploy env'
|
||||
|
||||
describe '.create' do
|
||||
it 'returns instance of DeployEnvStatic' do
|
||||
|
||||
@ -1,9 +1,5 @@
|
||||
require 'core/devops-application'
|
||||
require 'core/devops-db'
|
||||
|
||||
RSpec.shared_examples 'deploy env' do
|
||||
validated_model_name = described_class.name.demodulize.underscore
|
||||
include SpecSupport
|
||||
|
||||
it 'is valid with correct attrs' do
|
||||
expect(env).to be_valid
|
||||
@ -81,11 +77,10 @@ RSpec.shared_examples 'deploy env' do
|
||||
end
|
||||
end
|
||||
|
||||
describe '#update_field' do
|
||||
describe '#update_field', stubbed_connector: true do
|
||||
subject { env.update_field('project_name', 'run_list', ['role[asd]']) }
|
||||
before do
|
||||
allow_message_expectations_on_nil
|
||||
allow(Devops::Db.connector).to receive(:set_project_deploy_env_field)
|
||||
allow(stubbed_connector).to receive(:set_project_deploy_env_field)
|
||||
end
|
||||
|
||||
it 'validate it' do
|
||||
@ -98,12 +93,13 @@ RSpec.shared_examples 'deploy env' do
|
||||
end
|
||||
|
||||
it 'saves it' do
|
||||
expect(Devops::Db.connector).to receive(:set_project_deploy_env_field).with('project_name', env.identifier, {'run_list' => ['role[asd]']})
|
||||
expected_args = ['project_name', env.identifier, {'run_list' => ['role[asd]']}]
|
||||
expect(stubbed_connector).to receive(:set_project_deploy_env_field).with(*expected_args)
|
||||
subject
|
||||
end
|
||||
end
|
||||
|
||||
describe '#create_role', stub_logger: true do
|
||||
describe '#create_role', stubbed_logger: true do
|
||||
subject { env.create_role('project_name') }
|
||||
before do
|
||||
allow(env).to receive_message_chain('knife_instance.role_name') { 'role_name' }
|
||||
@ -152,7 +148,7 @@ RSpec.shared_examples 'deploy env' do
|
||||
end
|
||||
end
|
||||
|
||||
describe '#rename', stub_logger: true do
|
||||
describe '#rename', stubbed_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'}
|
||||
@ -174,15 +170,16 @@ RSpec.shared_examples 'deploy env' do
|
||||
stub_const('Devops::Model::Project', project_class_double)
|
||||
end
|
||||
|
||||
it 'raises InvalidRecord if env with such name already exists in project' do
|
||||
allow(Devops::Db.connector).to receive_message_chain('project.deploy_env')
|
||||
it 'raises InvalidRecord if env with such name already exists in project', stubbed_connector: true do
|
||||
project = build(:project, with_deploy_env_identifiers: %w(new_name))
|
||||
allow(stubbed_connector).to receive(:project) { project }
|
||||
expect{subject}.to raise_error(InvalidRecord)
|
||||
end
|
||||
|
||||
context 'when there is no env with such name already' do
|
||||
context 'when there is no env with such name already', stubbed_connector: true do
|
||||
before do
|
||||
allow(Devops::Db.connector).to receive_message_chain('project.deploy_env') {raise RecordNotFound}
|
||||
allow(Devops::Db.connector).to receive(:set_project_deploy_env_field)
|
||||
allow(stubbed_connector).to receive(:project) { build(:project) }
|
||||
allow(stubbed_connector).to receive(:set_project_deploy_env_field)
|
||||
end
|
||||
|
||||
it 'validates new identifier' do
|
||||
@ -1,11 +1,9 @@
|
||||
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
|
||||
describe 'validation rules:', stubbed_env_validators: true 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
|
||||
@ -90,7 +88,7 @@ RSpec.describe Devops::Model::Project, type: :model do
|
||||
end
|
||||
end
|
||||
|
||||
describe '#add_deploy_env', stub_logger: true do
|
||||
describe '#add_deploy_env', stubbed_logger: true do
|
||||
let(:env) {build(:deploy_env_ec2)}
|
||||
subject { project.add_deploy_env(env) }
|
||||
before do
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
require 'spec_helper'
|
||||
require_relative '../shared_models_context'
|
||||
|
||||
RSpec.describe Devops::Model::Ec2ProviderAccount, type: :model do
|
||||
let(:provider_account) { build(:ec2_provider_account) }
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
require 'spec_helper'
|
||||
require_relative '../shared_models_context'
|
||||
|
||||
# не пытайся выделить в shared_specs, фигня выйдет
|
||||
RSpec.describe Devops::Model::OpenstackProviderAccount, type: :model do
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
require 'db/mongo/models/stack_template/stack_template_ec2'
|
||||
require_relative 'shared_stack_template_specs'
|
||||
|
||||
RSpec.describe Devops::Model::StackTemplateEc2, type: :model do
|
||||
let(:stack_template) { build(:stack_template_ec2) }
|
||||
@ -9,5 +10,4 @@ RSpec.describe Devops::Model::StackTemplateEc2, type: :model do
|
||||
end
|
||||
|
||||
it_behaves_like 'stack template'
|
||||
|
||||
end
|
||||
@ -0,0 +1,7 @@
|
||||
RSpec.shared_context 'auto_model', type: :model do
|
||||
require 'spec/models/shared_validation_specs'
|
||||
end
|
||||
|
||||
RSpec.shared_context 'auto_connector', type: :connector do
|
||||
require 'spec/connectors/shared_connectors_specs'
|
||||
end
|
||||
6
devops-service/spec/shared_contexts/stubbed_connector.rb
Normal file
6
devops-service/spec/shared_contexts/stubbed_connector.rb
Normal file
@ -0,0 +1,6 @@
|
||||
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
|
||||
@ -1,4 +1,4 @@
|
||||
RSpec.shared_context 'stubbed calls to connector in env validators' do
|
||||
RSpec.shared_context 'stubbed calls to connector in env validators', stubbed_env_validators: true do
|
||||
before do
|
||||
allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(ec2 openstack))
|
||||
allow_any_instance_of(Validators::Helpers::Users).to receive(:available_users).and_return(['root'])
|
||||
@ -10,19 +10,4 @@ RSpec.shared_context 'stubbed calls to connector in env validators' do
|
||||
allow_any_instance_of(Validators::DeployEnv::StackTemplate).to receive(:available_stack_templates).and_return([{'id' => 'template'}])
|
||||
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
|
||||
|
||||
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
|
||||
7
devops-service/spec/shared_contexts/stubbed_logger.rb
Normal file
7
devops-service/spec/shared_contexts/stubbed_logger.rb
Normal file
@ -0,0 +1,7 @@
|
||||
RSpec.shared_context 'stubbed calls to logger', stubbed_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
|
||||
@ -2,9 +2,10 @@ def set_tester_connector(klass)
|
||||
define_method :tester_connector_class do
|
||||
klass
|
||||
end
|
||||
include_context 'with tester connector'
|
||||
end
|
||||
|
||||
RSpec.shared_context 'connectors' do
|
||||
RSpec.shared_context 'with tester connector' do
|
||||
before(:all) do
|
||||
@connector = described_class.new(SpecSupport.db)
|
||||
@tester_connector = tester_connector_class.new
|
||||
@ -13,6 +13,7 @@ original_stdout = $stdout
|
||||
$stdout = File.open(File::NULL, "w")
|
||||
|
||||
Dir[("./spec/support/**/*.rb")].each { |f| require f }
|
||||
Dir[("./spec/shared_contexts/**/*.rb")].each { |f| require f }
|
||||
|
||||
# Factory girl configuration
|
||||
FactoryGirl.define do
|
||||
|
||||
@ -5,7 +5,7 @@ module SpecSupport
|
||||
BLANK_FILE = File.join(ROOT, 'spec/support/blank_file')
|
||||
|
||||
def self.db_params
|
||||
@db ||= begin
|
||||
@db_params ||= begin
|
||||
conf = config['mongo']
|
||||
db_name = conf.fetch(:db)
|
||||
[db_name, conf[:host], conf[:port], conf[:user], conf[:password]]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user