spec/lib/release_tools/security/components_update_task_spec.rb (93 lines of code) (raw):

# frozen_string_literal: true require 'spec_helper' describe ReleaseTools::Security::ComponentsUpdateTask do subject(:components_update_task) { described_class.new(action: action) } let(:client) { stub_const('ReleaseTools::GitlabOpsClient', spy) } let(:project) { ReleaseTools::Project::ReleaseTools } let(:action) { :disable } let(:notifier) do stub_const('ReleaseTools::Slack::ReleaseJobEndNotifier', spy) end let(:pipeline_schedule) do create(:pipeline_schedule, id: described_class::PIPELINE_SCHEDULE_ID, description: 'components:update_managed_versioning_projects') end describe '#execute' do before do allow(client) .to receive(:pipeline_schedule) .and_return(pipeline_schedule) end context 'when disabling the components update task' do it 'updates pipelines schedules and sends slack notification' do allow(client) .to receive(:edit_pipeline_schedule) expect(client) .to receive(:pipeline_schedule) .with(project, 112) expect(client) .to receive(:pipeline_schedule_take_ownership) .with(project, 112) expect(client) .to receive(:edit_pipeline_schedule) .with('gitlab-org/release/tools', 112, active: false) expect(notifier) .to receive(:send_notification) without_dry_run do components_update_task.execute end end end context 'when enabling the components update task' do let(:action) { :enable } it 'updates pipelines schedules and sends slack notification' do allow(client) .to receive(:edit_pipeline_schedule) expect(client) .to receive(:pipeline_schedule) .with(project, 112) expect(client) .to receive(:pipeline_schedule_take_ownership) .with(project, 112) expect(client) .to receive(:edit_pipeline_schedule) .with('gitlab-org/release/tools', 112, active: true) expect(notifier) .to receive(:send_notification) without_dry_run do components_update_task.execute end end end context 'when something goes wrong' do it 'sends a slack notification and raises exception' do allow(client) .to receive(:edit_pipeline_schedule) .and_raise(Gitlab::Error::Error) expect(client) .to receive(:pipeline_schedule) .with(project, 112) expect(notifier) .to receive(:send_notification) without_dry_run do expect { components_update_task.execute } .to raise_error(described_class::CouldNotUpdateError) end end end context 'with a dry-run' do it 'only fetches the pipeline schedules' do allow(client) .to receive(:edit_pipeline_schedule) expect(client) .to receive(:pipeline_schedule) .with(project, 112) expect(client) .not_to receive(:pipeline_schedule_take_ownership) expect(client) .not_to receive(:edit_pipeline_schedule) allow(notifier) .to receive(:send_notification) components_update_task.execute end end end end