debian-mirror-gitlab/spec/graphql/mutations/ci/runner/bulk_delete_spec.rb
2022-08-27 11:52:29 +05:30

91 lines
2.7 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
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 } }
let(:mutation_params) do
{}
end
describe '#resolve' do
subject(:response) 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(:user) { admin_user }
let!(:runners) do
create_list(:ci_runner, 2, :instance)
end
context 'when required arguments are missing' do
let(:mutation_params) { {} }
context 'when admin mode is enabled', :enable_admin_mode do
it 'does not return an error' do
is_expected.to match a_hash_including(errors: [])
end
end
end
context 'with runners specified by id' 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
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
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
end
end
end
end
end