diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 18:25:58 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-06-16 18:25:58 +0000 |
commit | a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4 (patch) | |
tree | fb69158581673816a8cd895f9d352dcb3c678b1e /spec/services/projects | |
parent | d16b2e8639e99961de6ddc93909f3bb5c1445ba1 (diff) | |
download | gitlab-ce-a5f4bba440d7f9ea47046a0a561d49adf0a1e6d4.tar.gz |
Add latest changes from gitlab-org/gitlab@14-0-stable-eev14.0.0-rc42
Diffstat (limited to 'spec/services/projects')
8 files changed, 119 insertions, 120 deletions
diff --git a/spec/services/projects/create_service_spec.rb b/spec/services/projects/create_service_spec.rb index cd659bf5e60..ac0b6cc8ef1 100644 --- a/spec/services/projects/create_service_spec.rb +++ b/spec/services/projects/create_service_spec.rb @@ -82,6 +82,34 @@ RSpec.describe Projects::CreateService, '#execute' do end end + describe 'topics' do + subject(:project) { create_project(user, opts) } + + context "with 'topics' parameter" do + let(:opts) { { topics: 'topics' } } + + it 'keeps them as specified' do + expect(project.topic_list).to eq(%w[topics]) + end + end + + context "with 'topic_list' parameter" do + let(:opts) { { topic_list: 'topic_list' } } + + it 'keeps them as specified' do + expect(project.topic_list).to eq(%w[topic_list]) + end + end + + context "with 'tag_list' parameter (deprecated)" do + let(:opts) { { tag_list: 'tag_list' } } + + it 'keeps them as specified' do + expect(project.topic_list).to eq(%w[tag_list]) + end + end + end + context 'user namespace' do it do project = create_project(user, opts) @@ -270,7 +298,7 @@ RSpec.describe Projects::CreateService, '#execute' do context 'error handling' do it 'handles invalid options' do - opts[:default_branch] = 'master' + opts[:invalid] = 'option' expect(create_project(user, opts)).to eq(nil) end end @@ -663,7 +691,7 @@ RSpec.describe Projects::CreateService, '#execute' do stub_feature_flags(projects_post_creation_worker: false) end - context 'Prometheus application is shared via group cluster' do + context 'Prometheus integration is shared via group cluster' do let(:cluster) { create(:cluster, :group, groups: [group]) } let(:group) do create(:group).tap do |group| @@ -672,7 +700,7 @@ RSpec.describe Projects::CreateService, '#execute' do end before do - create(:clusters_applications_prometheus, :installed, cluster: cluster) + create(:clusters_integrations_prometheus, cluster: cluster) end it 'creates PrometheusService record', :aggregate_failures do @@ -685,11 +713,11 @@ RSpec.describe Projects::CreateService, '#execute' do end end - context 'Prometheus application is shared via instance cluster' do + context 'Prometheus integration is shared via instance cluster' do let(:cluster) { create(:cluster, :instance) } before do - create(:clusters_applications_prometheus, :installed, cluster: cluster) + create(:clusters_integrations_prometheus, cluster: cluster) end it 'creates PrometheusService record', :aggregate_failures do @@ -712,7 +740,7 @@ RSpec.describe Projects::CreateService, '#execute' do end end - context 'shared Prometheus application is not available' do + context 'shared Prometheus integration is not available' do it 'does not persist PrometheusService record', :aggregate_failures do project = create_project(user, opts) @@ -778,7 +806,7 @@ RSpec.describe Projects::CreateService, '#execute' do end end - context 'with specialized_project_authorization_workers' do + context 'with specialized project_authorization workers' do let_it_be(:other_user) { create(:user) } let_it_be(:group) { create(:group) } @@ -809,7 +837,7 @@ RSpec.describe Projects::CreateService, '#execute' do expect(AuthorizedProjectUpdate::ProjectCreateWorker).to( receive(:perform_async).and_call_original ) - expect(AuthorizedProjectUpdate::UserRefreshWithLowUrgencyWorker).to( + expect(AuthorizedProjectUpdate::UserRefreshFromReplicaWorker).to( receive(:bulk_perform_in) .with(1.hour, array_including([user.id], [other_user.id]), @@ -819,34 +847,6 @@ RSpec.describe Projects::CreateService, '#execute' do create_project(user, opts) end - - context 'when feature is disabled' do - before do - stub_feature_flags(specialized_project_authorization_workers: false) - end - - it 'updates authorization for current_user' do - project = create_project(user, opts) - - expect( - Ability.allowed?(user, :read_project, project) - ).to be_truthy - end - - it 'uses AuthorizedProjectsWorker' do - expect(AuthorizedProjectsWorker).to( - receive(:bulk_perform_async).with(array_including([user.id], [other_user.id])).and_call_original - ) - expect(AuthorizedProjectUpdate::ProjectCreateWorker).not_to( - receive(:perform_async) - ) - expect(AuthorizedProjectUpdate::UserRefreshWithLowUrgencyWorker).not_to( - receive(:bulk_perform_in) - ) - - create_project(user, opts) - end - end end def create_project(user, opts) diff --git a/spec/services/projects/destroy_service_spec.rb b/spec/services/projects/destroy_service_spec.rb index ff582279d71..c6b2b1e2b21 100644 --- a/spec/services/projects/destroy_service_spec.rb +++ b/spec/services/projects/destroy_service_spec.rb @@ -447,23 +447,6 @@ RSpec.describe Projects::DestroyService, :aggregate_failures do it_behaves_like 'handles errors thrown during async destroy', "Failed to remove webhooks" end - - context 'when "destroy_webhooks_before_the_project" flag is disabled' do - before do - stub_feature_flags(destroy_webhooks_before_the_project: false) - end - - it 'does not call WebHooks::DestroyService' do - expect(WebHooks::DestroyService).not_to receive(:new) - - expect do - destroy_project(project, user) - end.to change(WebHook, :count).by(-2) - .and change(WebHookLog, :count).by(-1) - - expect(another_project_web_hook.reload).to be - end - end end context 'error while destroying', :sidekiq_inline do diff --git a/spec/services/projects/group_links/create_service_spec.rb b/spec/services/projects/group_links/create_service_spec.rb index c249a51fc56..9bc780fe177 100644 --- a/spec/services/projects/group_links/create_service_spec.rb +++ b/spec/services/projects/group_links/create_service_spec.rb @@ -38,7 +38,7 @@ RSpec.describe Projects::GroupLinks::CreateService, '#execute' do expect { subject.execute(create(:group)) }.not_to change { project.project_group_links.count } end - context 'with specialized_project_authorization_workers' do + context 'with specialized project_authorization workers' do let_it_be(:other_user) { create(:user) } before do @@ -54,7 +54,7 @@ RSpec.describe Projects::GroupLinks::CreateService, '#execute' do .with(project.id, group.id, group_access) .and_call_original ) - expect(AuthorizedProjectUpdate::UserRefreshWithLowUrgencyWorker).to( + expect(AuthorizedProjectUpdate::UserRefreshFromReplicaWorker).to( receive(:bulk_perform_in) .with(1.hour, array_including([user.id], [other_user.id]), @@ -64,25 +64,5 @@ RSpec.describe Projects::GroupLinks::CreateService, '#execute' do subject.execute(group) end - - context 'when feature is disabled' do - before do - stub_feature_flags(specialized_project_authorization_project_share_worker: false) - end - - it 'uses AuthorizedProjectsWorker' do - expect(AuthorizedProjectsWorker).to( - receive(:bulk_perform_async).with(array_including([user.id], [other_user.id])).and_call_original - ) - expect(AuthorizedProjectUpdate::ProjectCreateWorker).not_to( - receive(:perform_async) - ) - expect(AuthorizedProjectUpdate::UserRefreshWithLowUrgencyWorker).not_to( - receive(:bulk_perform_in) - ) - - subject.execute(group) - end - end end end diff --git a/spec/services/projects/group_links/destroy_service_spec.rb b/spec/services/projects/group_links/destroy_service_spec.rb index 459b79b2d7d..d60e9a01e54 100644 --- a/spec/services/projects/group_links/destroy_service_spec.rb +++ b/spec/services/projects/group_links/destroy_service_spec.rb @@ -14,12 +14,60 @@ RSpec.describe Projects::GroupLinks::DestroyService, '#execute' 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) + context 'project authorizations refresh' do + before do + group.add_maintainer(user) + end + + context 'when the feature flag `use_specialized_worker_for_project_auth_recalculation` is enabled' do + before do + stub_feature_flags(use_specialized_worker_for_project_auth_recalculation: true) + end + + it 'calls AuthorizedProjectUpdate::ProjectRecalculateWorker to update project authorizations' do + expect(AuthorizedProjectUpdate::ProjectRecalculateWorker) + .to receive(:perform_async).with(group_link.project.id) + + subject.execute(group_link) + end + + it 'calls AuthorizedProjectUpdate::UserRefreshFromReplicaWorker with a delay to update project authorizations' do + expect(AuthorizedProjectUpdate::UserRefreshFromReplicaWorker).to( + receive(:bulk_perform_in) + .with(1.hour, + [[user.id]], + batch_delay: 30.seconds, batch_size: 100) + ) + + subject.execute(group_link) + end - expect { subject.execute(group_link) }.to( - change { Ability.allowed?(user, :read_project, project) } - .from(true).to(false)) + it 'updates project authorizations of users who had access to the project via the group share', :sidekiq_inline do + expect { subject.execute(group_link) }.to( + change { Ability.allowed?(user, :read_project, project) } + .from(true).to(false)) + end + end + + context 'when the feature flag `use_specialized_worker_for_project_auth_recalculation` is disabled' do + before do + stub_feature_flags(use_specialized_worker_for_project_auth_recalculation: false) + end + + it 'calls UserProjectAccessChangedService to update project authorizations' do + expect_next_instance_of(UserProjectAccessChangedService, [user.id]) do |service| + expect(service).to receive(:execute) + end + + subject.execute(group_link) + end + + it 'updates project authorizations of users who had access to the project via the group share' do + expect { subject.execute(group_link) }.to( + change { Ability.allowed?(user, :read_project, project) } + .from(true).to(false)) + end + end end it 'returns false if group_link is blank' do diff --git a/spec/services/projects/prometheus/alerts/notify_service_spec.rb b/spec/services/projects/prometheus/alerts/notify_service_spec.rb index bfc8225b654..5235c64d451 100644 --- a/spec/services/projects/prometheus/alerts/notify_service_spec.rb +++ b/spec/services/projects/prometheus/alerts/notify_service_spec.rb @@ -45,9 +45,9 @@ RSpec.describe Projects::Prometheus::Alerts::NotifyService do end before do - create(:clusters_applications_prometheus, :installed, + create(:clusters_integrations_prometheus, cluster: prd_cluster, alert_manager_token: token) - create(:clusters_applications_prometheus, :installed, + create(:clusters_integrations_prometheus, cluster: stg_cluster, alert_manager_token: nil) end @@ -62,41 +62,6 @@ RSpec.describe Projects::Prometheus::Alerts::NotifyService do end end - context 'with project specific cluster using prometheus application' do - where(:cluster_enabled, :status, :configured_token, :token_input, :result) do - true | :installed | token | token | :success - true | :installed | nil | nil | :success - true | :updated | token | token | :success - true | :updating | token | token | :failure - true | :installed | token | 'x' | :failure - true | :installed | nil | token | :failure - true | :installed | token | nil | :failure - true | nil | token | token | :failure - false | :installed | token | token | :failure - end - - with_them do - before do - cluster.update!(enabled: cluster_enabled) - - if status - create(:clusters_applications_prometheus, status, - cluster: cluster, - alert_manager_token: configured_token) - end - end - - case result = params[:result] - when :success - include_examples 'processes one firing and one resolved prometheus alerts' - when :failure - it_behaves_like 'alerts service responds with an error and takes no actions', :unauthorized - else - raise "invalid result: #{result.inspect}" - end - end - end - context 'with project specific cluster using prometheus integration' do where(:cluster_enabled, :integration_enabled, :configured_token, :token_input, :result) do true | true | token | token | :success diff --git a/spec/services/projects/schedule_bulk_repository_shard_moves_service_spec.rb b/spec/services/projects/schedule_bulk_repository_shard_moves_service_spec.rb index 2dc4a56368b..76830396104 100644 --- a/spec/services/projects/schedule_bulk_repository_shard_moves_service_spec.rb +++ b/spec/services/projects/schedule_bulk_repository_shard_moves_service_spec.rb @@ -4,7 +4,7 @@ require 'spec_helper' RSpec.describe Projects::ScheduleBulkRepositoryShardMovesService do it_behaves_like 'moves repository shard in bulk' do - let_it_be_with_reload(:container) { create(:project, :repository).tap { |project| project.track_project_repository } } + let_it_be_with_reload(:container) { create(:project, :repository) } let(:move_service_klass) { Projects::RepositoryStorageMove } let(:bulk_worker_klass) { ::Projects::ScheduleBulkRepositoryShardMovesWorker } diff --git a/spec/services/projects/transfer_service_spec.rb b/spec/services/projects/transfer_service_spec.rb index 8498b752610..3171abfb36f 100644 --- a/spec/services/projects/transfer_service_spec.rb +++ b/spec/services/projects/transfer_service_spec.rb @@ -195,8 +195,6 @@ RSpec.describe Projects::TransferService do end it 'does not update storage location' do - create(:project_repository, project: project) - attempt_project_transfer expect(project.project_repository).to have_attributes( diff --git a/spec/services/projects/update_service_spec.rb b/spec/services/projects/update_service_spec.rb index b9e909e8615..e1b22da2e61 100644 --- a/spec/services/projects/update_service_spec.rb +++ b/spec/services/projects/update_service_spec.rb @@ -587,6 +587,31 @@ RSpec.describe Projects::UpdateService do it_behaves_like 'the transfer was not scheduled' end end + + describe 'when updating topics' do + let(:project) { create(:project, topic_list: 'topic1, topic2') } + + it 'update using topics' do + result = update_project(project, user, { topics: 'topics' }) + + expect(result[:status]).to eq(:success) + expect(project.topic_list).to eq(%w[topics]) + end + + it 'update using topic_list' do + result = update_project(project, user, { topic_list: 'topic_list' }) + + expect(result[:status]).to eq(:success) + expect(project.topic_list).to eq(%w[topic_list]) + end + + it 'update using tag_list (deprecated)' do + result = update_project(project, user, { tag_list: 'tag_list' }) + + expect(result[:status]).to eq(:success) + expect(project.topic_list).to eq(%w[tag_list]) + end + end end describe '#run_auto_devops_pipeline?' do |