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/web_hooks/destroy_service_spec.rb')
-rw-r--r--spec/services/web_hooks/destroy_service_spec.rb68
1 files changed, 32 insertions, 36 deletions
diff --git a/spec/services/web_hooks/destroy_service_spec.rb b/spec/services/web_hooks/destroy_service_spec.rb
index 5269fe08ac0..4d9bb18e540 100644
--- a/spec/services/web_hooks/destroy_service_spec.rb
+++ b/spec/services/web_hooks/destroy_service_spec.rb
@@ -7,50 +7,46 @@ RSpec.describe WebHooks::DestroyService do
subject { described_class.new(user) }
- shared_examples 'batched destroys' do
- it 'destroys all hooks in batches' do
- stub_const("#{described_class}::BATCH_SIZE", 1)
- expect(subject).to receive(:delete_web_hook_logs_in_batches).exactly(4).times.and_call_original
-
- expect do
- status = subject.execute(hook)
- expect(status[:async]).to be false
- end
- .to change { WebHook.count }.from(1).to(0)
- .and change { WebHookLog.count }.from(3).to(0)
- end
-
- it 'returns an error if sync destroy fails' do
- expect(hook).to receive(:destroy).and_return(false)
+ describe '#execute' do
+ %i[system_hook project_hook].each do |factory|
+ context "deleting a #{factory}" do
+ let!(:hook) { create(factory) } # rubocop: disable Rails/SaveBang (false-positive!)
+ let!(:log) { create_list(:web_hook_log, 3, web_hook: hook) }
- result = subject.sync_destroy(hook)
-
- expect(result[:status]).to eq(:error)
- expect(result[:message]).to eq("Unable to destroy #{hook.model_name.human}")
- end
+ it 'is successful' do
+ expect(subject.execute(hook)).to be_success
+ end
- it 'schedules an async delete' do
- stub_const('WebHooks::DestroyService::LOG_COUNT_THRESHOLD', 1)
+ it 'destroys the hook' do
+ expect { subject.execute(hook) }.to change(WebHook, :count).from(1).to(0)
+ end
- expect(WebHooks::DestroyWorker).to receive(:perform_async).with(user.id, hook.id).and_call_original
+ it 'does not destroy logs' do
+ expect { subject.execute(hook) }.not_to change(WebHookLog, :count)
+ end
- status = subject.execute(hook)
+ it 'schedules the destruction of logs' do
+ expect(WebHooks::LogDestroyWorker).to receive(:perform_async).with({ 'hook_id' => hook.id })
+ expect(Gitlab::AppLogger).to receive(:info).with(match(/scheduled a deletion of logs/))
- expect(status[:async]).to be true
- end
- end
+ subject.execute(hook)
+ end
- context 'with system hook' do
- let!(:hook) { create(:system_hook, url: "http://example.com") }
- let!(:log) { create_list(:web_hook_log, 3, web_hook: hook) }
+ context 'when the hook fails to destroy' do
+ before do
+ allow(hook).to receive(:destroy).and_return(false)
+ end
- it_behaves_like 'batched destroys'
- end
+ it 'is not a success' do
+ expect(WebHooks::LogDestroyWorker).not_to receive(:perform_async)
- context 'with project hook' do
- let!(:hook) { create(:project_hook) }
- let!(:log) { create_list(:web_hook_log, 3, web_hook: hook) }
+ r = subject.execute(hook)
- it_behaves_like 'batched destroys'
+ expect(r).to be_error
+ expect(r[:message]).to match %r{Unable to destroy}
+ end
+ end
+ end
+ end
end
end