diff options
Diffstat (limited to 'spec/services/projects/group_links')
3 files changed, 81 insertions, 8 deletions
diff --git a/spec/services/projects/group_links/create_service_spec.rb b/spec/services/projects/group_links/create_service_spec.rb index 92667184be8..22f7c8bdcb4 100644 --- a/spec/services/projects/group_links/create_service_spec.rb +++ b/spec/services/projects/group_links/create_service_spec.rb @@ -3,16 +3,17 @@ require 'spec_helper' describe Projects::GroupLinks::CreateService, '#execute' do - let(:user) { create :user } - let(:group) { create :group } - let(:project) { create :project } + let_it_be(:user) { create :user } + let_it_be(:group) { create :group } + let_it_be(:project) { create :project } let(:opts) do { link_group_access: '30', expires_at: nil } end - let(:subject) { described_class.new(project, user, opts) } + + subject { described_class.new(project, user, opts) } before do group.add_developer(user) @@ -22,6 +23,12 @@ describe Projects::GroupLinks::CreateService, '#execute' do expect { subject.execute(group) }.to change { project.project_group_links.count }.from(0).to(1) end + it 'updates authorization' do + expect { subject.execute(group) }.to( + change { Ability.allowed?(user, :read_project, project) } + .from(false).to(true)) + end + it 'returns false if group is blank' do expect { subject.execute(nil) }.not_to change { project.project_group_links.count } end diff --git a/spec/services/projects/group_links/destroy_service_spec.rb b/spec/services/projects/group_links/destroy_service_spec.rb index 0fd1fcfe1a5..0a8c9580e70 100644 --- a/spec/services/projects/group_links/destroy_service_spec.rb +++ b/spec/services/projects/group_links/destroy_service_spec.rb @@ -3,15 +3,25 @@ require 'spec_helper' describe Projects::GroupLinks::DestroyService, '#execute' do - let(:project) { create(:project, :private) } - let!(:group_link) { create(:project_group_link, project: project) } - let(:user) { create :user } - let(:subject) { described_class.new(project, user) } + let_it_be(:user) { create :user } + let_it_be(:project) { create(:project, :private) } + let_it_be(:group) { create(:group) } + let!(:group_link) { create(:project_group_link, project: project, group: group) } + + subject { described_class.new(project, user) } it 'removes group from project' do expect { subject.execute(group_link) }.to change { project.project_group_links.count }.from(1).to(0) end + it 'updates authorization' do + group.add_maintainer(user) + + expect { subject.execute(group_link) }.to( + change { Ability.allowed?(user, :read_project, project) } + .from(true).to(false)) + end + it 'returns false if group_link is blank' do expect { subject.execute(nil) }.not_to change { project.project_group_links.count } end diff --git a/spec/services/projects/group_links/update_service_spec.rb b/spec/services/projects/group_links/update_service_spec.rb new file mode 100644 index 00000000000..5be2ae1e0f7 --- /dev/null +++ b/spec/services/projects/group_links/update_service_spec.rb @@ -0,0 +1,56 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Projects::GroupLinks::UpdateService, '#execute' do + let_it_be(:user) { create :user } + let_it_be(:group) { create :group } + let_it_be(:project) { create :project } + let!(:link) { create(:project_group_link, project: project, group: group) } + + let(:expiry_date) { 1.month.from_now.to_date } + let(:group_link_params) do + { group_access: Gitlab::Access::GUEST, + expires_at: expiry_date } + end + + subject { described_class.new(link).execute(group_link_params) } + + before do + group.add_developer(user) + end + + it 'updates existing link' do + expect(link.group_access).to eq(Gitlab::Access::DEVELOPER) + expect(link.expires_at).to be_nil + + subject + + link.reload + + expect(link.group_access).to eq(Gitlab::Access::GUEST) + expect(link.expires_at).to eq(expiry_date) + end + + it 'updates project permissions' do + expect { subject }.to change { user.can?(:create_release, project) }.from(true).to(false) + end + + it 'executes UserProjectAccessChangedService' do + expect_next_instance_of(UserProjectAccessChangedService) do |service| + expect(service).to receive(:execute) + end + + subject + end + + context 'with only param not requiring authorization refresh' do + let(:group_link_params) { { expires_at: Date.tomorrow } } + + it 'does not execute UserProjectAccessChangedService' do + expect(UserProjectAccessChangedService).not_to receive(:new) + + subject + end + end +end |