Add specs for several project model methods:

add_authorized_user
remove_authorized_user
check_authorization
delete_deploy_env
to_hash
This commit is contained in:
Anton Chuchkalov 2015-12-02 20:29:09 +03:00
parent c320edaa71
commit 1933e25925
2 changed files with 161 additions and 1 deletions

View File

@ -81,6 +81,9 @@ module Devops
Project.create_roles_response(res)
end
# user could be a String or an Array of strings.
# if env is nil, add given user(s) to all project's envs,
# otherwise only to specified one.
def add_authorized_user user, env=nil
return if user.nil?
new_users = ( user.is_a?(Array) ? user : [ user ] )

View File

@ -114,4 +114,161 @@ RSpec.describe Devops::Model::Project, type: :model do
end
end
describe '#add_authorized_user' do
before do
allow(Devops::Db).to receive_message_chain('connector.set_project_deploy_env_field')
end
let(:env1) { build(:deploy_env_ec2, identifier: 'foo') }
let(:env2) { build(:deploy_env_ec2, identifier: 'bar') }
let(:project) { build(:project, deploy_envs: [env1, env2]) }
it 'returns nil if user is nil' do
expect(project.add_authorized_user(nil)).to be_nil
end
context "when env isn't given" do
context 'when user is a String' do
it 'adds given user to all envs' do
project.add_authorized_user('John')
expect(env1.users).to match_array(%w(root John))
expect(env2.users).to match_array(%w(root John))
end
end
context 'when user is an Array of strings' do
it 'adds given users to all envs' do
project.add_authorized_user(['John', 'Matz'])
expect(env1.users).to match_array(%w(root John Matz))
expect(env2.users).to match_array(%w(root John Matz))
end
end
end
context 'when env is given' do
context 'when user is a String' do
it 'adds given user to given env' do
project.add_authorized_user('John', 'bar')
expect(env1.users).to match_array(%w(root))
expect(env2.users).to match_array(%w(root John))
end
end
context 'when user is an Array of strings' do
it 'adds given users to all envs' do
project.add_authorized_user(['John', 'Matz'], 'bar')
expect(env1.users).to match_array(%w(root))
expect(env2.users).to match_array(%w(root John Matz))
end
end
end
end
describe '#remove_authorized_user' do
before do
allow(Devops::Db).to receive_message_chain('connector.set_project_deploy_env_field')
end
let(:env1) { build(:deploy_env_ec2, identifier: 'foo', users: %w(root John Matz)) }
let(:env2) { build(:deploy_env_ec2, identifier: 'bar', users: %w(root John Matz)) }
let(:project) { build(:project, deploy_envs: [env1, env2]) }
it 'returns nil if user is nil' do
expect(project.remove_authorized_user(nil)).to be_nil
end
context "when env isn't given" do
context 'when user is a String' do
it 'adds given user to all envs' do
project.remove_authorized_user('John')
expect(env1.users).to match_array(%w(root Matz))
expect(env2.users).to match_array(%w(root Matz))
end
end
context 'when user is an Array of strings' do
it 'adds given users to all envs' do
project.remove_authorized_user(['John', 'Matz'])
expect(env1.users).to match_array(%w(root))
expect(env2.users).to match_array(%w(root))
end
end
end
context 'when env is given' do
context 'when user is a String' do
it 'adds given user to given env' do
project.remove_authorized_user('John', 'bar')
expect(env1.users).to match_array(%w(root John Matz))
expect(env2.users).to match_array(%w(root Matz))
end
end
context 'when user is an Array of strings' do
it 'adds given users to all envs' do
project.remove_authorized_user(['John', 'Matz'], 'bar')
expect(env1.users).to match_array(%w(root John Matz))
expect(env2.users).to match_array(%w(root))
end
end
end
end
describe '#check_authorization' do
subject { project.check_authorization(@user || 'Matz', 'foo') }
it 'returns true for root user' do
@user = 'root'
expect(subject).to be true
end
it "returns false if env's users don't include given user" do
expect(subject).to be false
end
it "returns true if env's users include given user" do
project.deploy_env('foo').users = %w(root Matz)
expect(subject).to be true
end
it 'returns false if there is no such env' do
expect(project.check_authorization('root', 'wrong')).to be false
end
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')
project.delete_deploy_env('foo')
expect(project.deploy_envs).to match_array []
end
end
describe '#to_hash' do
subject { project.to_hash }
it 'returns hash' do
expect(subject).to be_a(Hash)
end
it 'contains project id under name key' do
expect(subject['name']).to eq project.id
end
it 'contains deploy_envs converted to hashes' do
expect(subject['deploy_envs']).to be_an_array_of(Hash)
end
it 'also contains descriptions and run_list' do
expect(subject).to include('description', 'run_list')
end
it 'contains archived key if project is archived' do
project.archived = true
expect(subject).to include('archived')
end
it "doesn't contain archived if project isn't archived" do
expect(subject).not_to include('archived')
end
end
end