specs refactoring

This commit is contained in:
Anton Chuchkalov 2015-12-10 01:24:23 +03:00
parent e70ff0b832
commit 3616162b75
26 changed files with 70 additions and 69 deletions

View File

@ -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 }

View File

@ -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

View File

@ -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

View File

@ -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', {

View File

@ -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]

View File

@ -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', {

View File

@ -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', {

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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) }

View File

@ -1,5 +1,4 @@
require 'spec_helper'
require_relative '../shared_models_context'
# не пытайся выделить в shared_specs, фигня выйдет
RSpec.describe Devops::Model::OpenstackProviderAccount, type: :model do

View File

@ -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

View File

@ -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

View 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

View File

@ -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'])
@ -11,18 +11,3 @@ 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
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

View 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

View File

@ -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

View File

@ -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

View File

@ -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]]