Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/services/projects')
-rw-r--r--spec/services/projects/create_service_spec.rb72
-rw-r--r--spec/services/projects/destroy_service_spec.rb17
-rw-r--r--spec/services/projects/group_links/create_service_spec.rb24
-rw-r--r--spec/services/projects/group_links/destroy_service_spec.rb58
-rw-r--r--spec/services/projects/prometheus/alerts/notify_service_spec.rb39
-rw-r--r--spec/services/projects/schedule_bulk_repository_shard_moves_service_spec.rb2
-rw-r--r--spec/services/projects/transfer_service_spec.rb2
-rw-r--r--spec/services/projects/update_service_spec.rb25
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