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/graphql/mutations/ci')
-rw-r--r--spec/graphql/mutations/ci/runner/bulk_delete_spec.rb73
-rw-r--r--spec/graphql/mutations/ci/runner/update_spec.rb46
2 files changed, 72 insertions, 47 deletions
diff --git a/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb b/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb
index f47f1b9869e..2eccfd3409f 100644
--- a/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb
+++ b/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb
@@ -6,7 +6,6 @@ RSpec.describe Mutations::Ci::Runner::BulkDelete do
include GraphqlHelpers
let_it_be(:admin_user) { create(:user, :admin) }
- let_it_be(:user) { create(:user) }
let(:current_ctx) { { current_user: user } }
@@ -19,24 +18,15 @@ RSpec.describe Mutations::Ci::Runner::BulkDelete do
sync(resolve(described_class, args: mutation_params, ctx: current_ctx))
end
- context 'when the user cannot admin the runner' do
- let(:runner) { create(:ci_runner) }
- let(:mutation_params) do
- { ids: [runner.to_global_id] }
- end
-
- it 'generates an error' do
- expect_graphql_error_to_be_created(Gitlab::Graphql::Errors::ResourceNotAvailable) { response }
- end
- end
-
context 'when user can delete runners' do
+ let_it_be(:group) { create(:group) }
+
let(:user) { admin_user }
let!(:runners) do
- create_list(:ci_runner, 2, :instance)
+ create_list(:ci_runner, 2, :group, groups: [group])
end
- context 'when required arguments are missing' do
+ context 'when runner IDs are missing' do
let(:mutation_params) { {} }
context 'when admin mode is enabled', :enable_admin_mode do
@@ -47,43 +37,48 @@ RSpec.describe Mutations::Ci::Runner::BulkDelete do
end
context 'with runners specified by id' do
- let(:mutation_params) do
+ let!(:mutation_params) do
{ ids: runners.map(&:to_global_id) }
end
context 'when admin mode is enabled', :enable_admin_mode do
it 'deletes runners', :aggregate_failures do
- expect_next_instance_of(
- ::Ci::Runners::BulkDeleteRunnersService, { runners: runners }
- ) do |service|
- expect(service).to receive(:execute).once.and_call_original
- end
-
expect { response }.to change { Ci::Runner.count }.by(-2)
expect(response[:errors]).to be_empty
end
+ end
- context 'when runner list is is above limit' do
- before do
- stub_const('::Ci::Runners::BulkDeleteRunnersService::RUNNER_LIMIT', 1)
- end
-
- it 'only deletes up to the defined limit', :aggregate_failures do
- expect { response }.to change { Ci::Runner.count }
- .by(-::Ci::Runners::BulkDeleteRunnersService::RUNNER_LIMIT)
- expect(response[:errors]).to be_empty
- end
+ it 'ignores unknown keys from service response payload', :aggregate_failures do
+ expect_next_instance_of(
+ ::Ci::Runners::BulkDeleteRunnersService, { runners: runners, current_user: user }
+ ) do |service|
+ expect(service).to receive(:execute).once.and_return(
+ ServiceResponse.success(
+ payload: {
+ extra_key: 'extra_value',
+ deleted_count: 10,
+ deleted_ids: (1..10).to_a,
+ errors: []
+ }))
end
+
+ expect(response).not_to include(extra_key: 'extra_value')
end
+ end
+ end
- context 'when admin mode is disabled', :aggregate_failures do
- it 'returns error', :aggregate_failures do
- expect do
- expect_graphql_error_to_be_created(Gitlab::Graphql::Errors::ResourceNotAvailable) do
- response
- end
- end.not_to change { Ci::Runner.count }
- end
+ context 'when the user cannot delete the runner' do
+ let(:runner) { create(:ci_runner) }
+ let!(:mutation_params) do
+ { ids: [runner.to_global_id] }
+ end
+
+ context 'when user is admin and admin mode is not enabled' do
+ let(:user) { admin_user }
+
+ it 'returns error', :aggregate_failures do
+ expect { response }.not_to change { Ci::Runner.count }
+ expect(response[:errors]).to match_array("User does not have permission to delete any of the runners")
end
end
end
diff --git a/spec/graphql/mutations/ci/runner/update_spec.rb b/spec/graphql/mutations/ci/runner/update_spec.rb
index ee65be1e085..098b7ac6aa4 100644
--- a/spec/graphql/mutations/ci/runner/update_spec.rb
+++ b/spec/graphql/mutations/ci/runner/update_spec.rb
@@ -7,8 +7,10 @@ RSpec.describe Mutations::Ci::Runner::Update do
let_it_be(:user) { create(:user) }
let_it_be(:project1) { create(:project) }
- let_it_be(:runner) do
- create(:ci_runner, :project, projects: [project1], active: true, locked: false, run_untagged: true)
+ let_it_be(:project2) { create(:project) }
+
+ let(:runner) do
+ create(:ci_runner, :project, projects: [project1, project2], active: true, locked: false, run_untagged: true)
end
let(:current_ctx) { { current_user: user } }
@@ -79,14 +81,14 @@ RSpec.describe Mutations::Ci::Runner::Update do
end
context 'with associatedProjects argument' do
- let_it_be(:project2) { create(:project) }
+ let_it_be(:project3) { create(:project) }
context 'with id set to project runner' do
let(:mutation_params) do
{
id: runner.to_global_id,
description: 'updated description',
- associated_projects: [project2.to_global_id.to_s]
+ associated_projects: [project3.to_global_id.to_s]
}
end
@@ -96,7 +98,7 @@ RSpec.describe Mutations::Ci::Runner::Update do
{
runner: runner,
current_user: admin_user,
- project_ids: [project2.id]
+ project_ids: [project3.id]
}
) do |service|
expect(service).to receive(:execute).and_call_original
@@ -110,7 +112,7 @@ RSpec.describe Mutations::Ci::Runner::Update do
expect(response[:runner]).to be_an_instance_of(Ci::Runner)
expect(response[:runner]).to have_attributes(expected_attributes)
expect(runner.reload).to have_attributes(expected_attributes)
- expect(runner.projects).to match_array([project1, project2])
+ expect(runner.projects).to match_array([project1, project3])
end
context 'with user not allowed to assign runner' do
@@ -124,7 +126,7 @@ RSpec.describe Mutations::Ci::Runner::Update do
{
runner: runner,
current_user: admin_user,
- project_ids: [project2.id]
+ project_ids: [project3.id]
}
) do |service|
expect(service).to receive(:execute).and_call_original
@@ -137,11 +139,39 @@ RSpec.describe Mutations::Ci::Runner::Update do
expect(response[:errors]).to match_array(['user not allowed to assign runner'])
expect(response[:runner]).to be_nil
expect(runner.reload).not_to have_attributes(expected_attributes)
- expect(runner.projects).to match_array([project1])
+ expect(runner.projects).to match_array([project1, project2])
end
end
end
+ context 'with an empty list of projects' do
+ let(:mutation_params) do
+ {
+ id: runner.to_global_id,
+ associated_projects: []
+ }
+ end
+
+ it 'removes project relationships', :aggregate_failures do
+ expect_next_instance_of(
+ ::Ci::Runners::SetRunnerAssociatedProjectsService,
+ {
+ runner: runner,
+ current_user: admin_user,
+ project_ids: []
+ }
+ ) do |service|
+ expect(service).to receive(:execute).and_call_original
+ end
+
+ response
+
+ expect(response[:errors]).to be_empty
+ expect(response[:runner]).to be_an_instance_of(Ci::Runner)
+ expect(runner.reload.projects).to contain_exactly(project1)
+ end
+ end
+
context 'with id set to instance runner' do
let(:instance_runner) { create(:ci_runner, :instance) }
let(:mutation_params) do