debian-mirror-gitlab/spec/support/shared_examples/services/timelogs/create_service_shared_examples.rb
2022-08-27 11:52:29 +05:30

89 lines
2.3 KiB
Ruby

# frozen_string_literal: true
RSpec.shared_examples 'issuable supports timelog creation service' do
shared_examples 'success_response' do
it 'sucessfully saves the timelog' do
is_expected.to be_success
timelog = subject.payload[:timelog]
expect(timelog).to be_persisted
expect(timelog.time_spent).to eq(time_spent)
expect(timelog.spent_at).to eq('Fri, 08 Jul 2022 00:00:00.000000000 UTC +00:00')
expect(timelog.summary).to eq(summary)
expect(timelog.issuable).to eq(issuable)
end
end
context 'when the user does not have permission' do
let(:user) { create(:user) }
it 'returns an error' do
is_expected.to be_error
expect(subject.message).to eq(
"#{issuable.base_class_name} doesn't exist or you don't have permission to add timelog to it.")
expect(subject.http_status).to eq(404)
end
end
context 'when the user has permissions' do
let(:user) { author }
before do
users_container.add_reporter(user)
end
context 'when the timelog save fails' do
before do
allow_next_instance_of(Timelog) do |timelog|
allow(timelog).to receive(:save).and_return(false)
end
end
it 'returns an error' do
is_expected.to be_error
expect(subject.message).to eq('Failed to save timelog')
end
end
context 'when the creation completes sucessfully' do
it_behaves_like 'success_response'
end
end
end
RSpec.shared_examples 'issuable does not support timelog creation service' do
shared_examples 'error_response' do
it 'returns an error' do
is_expected.to be_error
issuable_type = if issuable.nil?
'Issuable'
else
issuable.base_class_name
end
expect(subject.message).to eq(
"#{issuable_type} doesn't exist or you don't have permission to add timelog to it."
)
expect(subject.http_status).to eq(404)
end
end
context 'when the user does not have permission' do
let(:user) { create(:user) }
it_behaves_like 'error_response'
end
context 'when the user has permissions' do
let(:user) { author }
before do
users_container.add_reporter(user)
end
it_behaves_like 'error_response'
end
end