From 4136fdda4ca0ec8de51c17efe48425ac35dee590 Mon Sep 17 00:00:00 2001 From: GitLab Bot Date: Fri, 22 Apr 2022 15:09:52 +0000 Subject: Add latest changes from gitlab-org/gitlab@master --- spec/services/timelogs/delete_service_spec.rb | 65 +++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 spec/services/timelogs/delete_service_spec.rb (limited to 'spec/services/timelogs') diff --git a/spec/services/timelogs/delete_service_spec.rb b/spec/services/timelogs/delete_service_spec.rb new file mode 100644 index 00000000000..c52cebdc5bf --- /dev/null +++ b/spec/services/timelogs/delete_service_spec.rb @@ -0,0 +1,65 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Timelogs::DeleteService do + let_it_be(:author) { create(:user) } + let_it_be(:project) { create(:project, :public) } + let_it_be(:issue) { create(:issue, project: project) } + let_it_be(:timelog) { create(:timelog, user: author, issue: issue, time_spent: 1800)} + + let(:service) { described_class.new(timelog, user) } + + describe '#execute' do + subject { service.execute } + + context 'when the timelog exists' do + let(:user) { author } + + it 'removes the timelog' do + expect { subject }.to change { Timelog.count }.by(-1) + end + + it 'returns the removed timelog' do + expect(subject).to be_success + expect(subject.payload).to eq(timelog) + end + end + + context 'when the timelog does not exist' do + let(:user) { create(:user) } + let!(:timelog) { nil } + + it 'returns an error' do + expect(subject).to be_error + expect(subject.message).to eq('Timelog doesn\'t exist or you don\'t have permission to delete it') + expect(subject.http_status).to eq(404) + end + end + + context 'when the user does not have permission' do + let(:user) { create(:user) } + + it 'returns an error' do + expect(subject).to be_error + expect(subject.message).to eq('Timelog doesn\'t exist or you don\'t have permission to delete it') + expect(subject.http_status).to eq(404) + end + end + + context 'when the timelog deletion fails' do + let(:user) { author } + let!(:timelog) { create(:timelog, user: author, issue: issue, time_spent: 1800)} + + before do + allow(timelog).to receive(:destroy).and_return(false) + end + + it 'returns an error' do + expect(subject).to be_error + expect(subject.message).to eq('Failed to remove timelog') + expect(subject.http_status).to eq(400) + end + end + end +end -- cgit v1.2.3