add specs for provider accounts; find bug with providers

This commit is contained in:
Anton Chuchkalov 2015-12-08 16:36:16 +03:00
parent a19ca959df
commit e70ff0b832
4 changed files with 110 additions and 0 deletions

View File

@ -17,6 +17,7 @@ module Devops
def initialize a={} def initialize a={}
super(a) super(a)
self.provider = Provider::Openstack::PROVIDER
self.username = a["username"] self.username = a["username"]
self.auth_url = a["auth_url"] self.auth_url = a["auth_url"]
self.tenant = a["tenant"] self.tenant = a["tenant"]

View File

@ -0,0 +1,25 @@
require 'db/mongo/models/provider_accounts/ec2_provider_account'
require 'db/mongo/models/provider_accounts/openstack_provider_account'
require 'db/mongo/models/provider_accounts/static_provider_account'
FactoryGirl.define do
factory :provider_account, class: Devops::Model::ProviderAccount do
account_name 'name'
description 'desc'
ssh_key 'user_key'
factory :static_provider_account, class: Devops::Model::StaticProviderAccount do
end
factory :ec2_provider_account, class: Devops::Model::Ec2ProviderAccount do
provider 'ec2'
access_key_id 'access'
secret_access_key 'secret'
end
factory :openstack_provider_account, class: Devops::Model::OpenstackProviderAccount do
provider 'openstack'
end
end
end

View File

@ -0,0 +1,71 @@
require 'spec_helper'
require_relative '../shared_models_context'
RSpec.describe Devops::Model::Ec2ProviderAccount, type: :model do
let(:provider_account) { build(:ec2_provider_account) }
describe 'validation rules', stubbed_connector: true do
before do
allow(Provider::ProviderFactory).to receive(:providers).and_return(%w(ec2 openstack))
allow(stubbed_connector).to receive(:key)
end
it 'set validators' do
expect(provider_account).to respond_to(:validate_access_key_id!)
end
it 'is valid with valid attrs' do
provider_account.validate!
expect(provider_account).to be_valid
end
include_examples 'field type validation', :account_name, :not_nil, :non_empty_string
include_examples 'field type validation', :description, :maybe_nil, :non_empty_string
include_examples 'field type validation', :ssh_key, :not_nil, :non_empty_string
include_examples 'field type validation', :access_key_id, :not_nil, :non_empty_string
include_examples 'field type validation', :secret_access_key, :not_nil, :non_empty_string
it "isn't valid if description length is more than 500" do
provider_account.description = 'a' * 501
expect(provider_account).not_to be_valid
expect{ provider_account.validate_description! }.to raise_error InvalidRecord
end
it "isn't valid if keys collection doesn't include given key" do
allow(stubbed_connector).to receive(:key) { raise RecordNotFound}
expect(provider_account).not_to be_valid
end
end
describe '#initialize' do
it 'sets provider to ec2' do
expect(described_class.new.provider).to eq 'ec2'
end
end
describe '#to_mongo_hash' do
it 'returns hash with several keys' do
expect(
provider_account.to_mongo_hash.keys
).to include(*%w(availability_zone access_key_id secret_access_key _id description ssh_key provider))
end
end
describe '.build_from_bson' do
subject { described_class.build_from_bson('_id' => 'asd') }
it 'returns an instance of Devops::Model::Ec2ProviderAccount' do
expect(subject).to be_an_instance_of(described_class)
expect(subject.account_name).to eq 'asd'
end
end
describe '.account_fields' do
it 'returns hash with several keys' do
expect(
described_class.account_fields.keys
).to include(*%i(availability_zone access_key_id secret_access_key description ssh_key account_name))
end
end
end

View File

@ -0,0 +1,13 @@
require 'spec_helper'
require_relative '../shared_models_context'
# не пытайся выделить в shared_specs, фигня выйдет
RSpec.describe Devops::Model::OpenstackProviderAccount, type: :model do
let(:provider_account) { build(:openstack_provider_account) }
it "should not validate access_key_id" do
fields = described_class.field_validators.values.flatten.flatten.map{|t| t[:field]}
expect(fields).not_to include(:access_key_id, :secret_access_key)
end
end