diff options
Diffstat (limited to 'spec/models/project_authorization_spec.rb')
-rw-r--r-- | spec/models/project_authorization_spec.rb | 67 |
1 files changed, 43 insertions, 24 deletions
diff --git a/spec/models/project_authorization_spec.rb b/spec/models/project_authorization_spec.rb index 58c0ff48b46..37da30fb54c 100644 --- a/spec/models/project_authorization_spec.rb +++ b/spec/models/project_authorization_spec.rb @@ -3,40 +3,59 @@ require 'spec_helper' RSpec.describe ProjectAuthorization do - let_it_be(:user) { create(:user) } - let_it_be(:project1) { create(:project) } - let_it_be(:project2) { create(:project) } - let_it_be(:project3) { create(:project) } + describe 'relations' do + it { is_expected.to belong_to(:user) } + it { is_expected.to belong_to(:project) } + end - describe '.insert_authorizations' do - it 'inserts the authorizations' do - described_class - .insert_authorizations([[user.id, project1.id, Gitlab::Access::MAINTAINER]]) + describe 'validations' do + it { is_expected.to validate_presence_of(:project) } + it { is_expected.to validate_presence_of(:user) } + it { is_expected.to validate_presence_of(:access_level) } + it { is_expected.to validate_inclusion_of(:access_level).in_array(Gitlab::Access.all_values) } + end - expect(user.project_authorizations.count).to eq(1) - end + describe '.insert_all' do + let_it_be(:user) { create(:user) } + let_it_be(:project_1) { create(:project) } + let_it_be(:project_2) { create(:project) } + let_it_be(:project_3) { create(:project) } - it 'inserts rows in batches' do - described_class.insert_authorizations([ - [user.id, project1.id, Gitlab::Access::MAINTAINER], - [user.id, project2.id, Gitlab::Access::MAINTAINER] - ], 1) + it 'skips duplicates and inserts the remaining rows without error' do + create(:project_authorization, user: user, project: project_1, access_level: Gitlab::Access::MAINTAINER) + + attributes = [ + { user_id: user.id, project_id: project_1.id, access_level: Gitlab::Access::MAINTAINER }, + { user_id: user.id, project_id: project_2.id, access_level: Gitlab::Access::MAINTAINER }, + { user_id: user.id, project_id: project_3.id, access_level: Gitlab::Access::MAINTAINER } + ] - expect(user.project_authorizations.count).to eq(2) + described_class.insert_all(attributes) + + expect(user.project_authorizations.pluck(:user_id, :project_id, :access_level)).to match_array(attributes.map(&:values)) end + end - it 'skips duplicates and inserts the remaining rows without error' do - create(:project_authorization, user: user, project: project1, access_level: Gitlab::Access::MAINTAINER) + describe '.insert_all_in_batches' do + let_it_be(:user) { create(:user) } + let_it_be(:project_1) { create(:project) } + let_it_be(:project_2) { create(:project) } + let_it_be(:project_3) { create(:project) } - rows = [ - [user.id, project1.id, Gitlab::Access::MAINTAINER], - [user.id, project2.id, Gitlab::Access::MAINTAINER], - [user.id, project3.id, Gitlab::Access::MAINTAINER] + let(:per_batch_size) { 2 } + + it 'inserts the rows in batches, as per the `per_batch` size' do + attributes = [ + { user_id: user.id, project_id: project_1.id, access_level: Gitlab::Access::MAINTAINER }, + { user_id: user.id, project_id: project_2.id, access_level: Gitlab::Access::MAINTAINER }, + { user_id: user.id, project_id: project_3.id, access_level: Gitlab::Access::MAINTAINER } ] - described_class.insert_authorizations(rows) + expect(described_class).to receive(:insert_all).twice.and_call_original + + described_class.insert_all_in_batches(attributes, per_batch_size) - expect(user.project_authorizations.pluck(:user_id, :project_id, :access_level)).to match_array(rows) + expect(user.project_authorizations.pluck(:user_id, :project_id, :access_level)).to match_array(attributes.map(&:values)) end end end |