65 lines
1.4 KiB
Ruby
65 lines
1.4 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe ::Pages::LegacyStorageLease do
|
|
let(:project) { create(:project) }
|
|
|
|
let(:implementation) do
|
|
Class.new do
|
|
include ::Pages::LegacyStorageLease
|
|
|
|
attr_reader :project
|
|
|
|
def initialize(project)
|
|
@project = project
|
|
end
|
|
|
|
def execute
|
|
try_obtain_lease do
|
|
execute_unsafe
|
|
end
|
|
end
|
|
|
|
def execute_unsafe
|
|
true
|
|
end
|
|
end
|
|
end
|
|
|
|
let(:service) { implementation.new(project) }
|
|
|
|
it 'allows method to be executed' do
|
|
expect(service).to receive(:execute_unsafe).and_call_original
|
|
|
|
expect(service.execute).to eq(true)
|
|
end
|
|
|
|
context 'when another service holds the lease for the same project' do
|
|
around do |example|
|
|
implementation.new(project).try_obtain_lease do
|
|
example.run
|
|
end
|
|
end
|
|
|
|
it 'does not run guarded method' do
|
|
expect(service).not_to receive(:execute_unsafe)
|
|
|
|
expect(service.execute).to eq(nil)
|
|
end
|
|
end
|
|
|
|
context 'when another service holds the lease for the different project' do
|
|
around do |example|
|
|
implementation.new(create(:project)).try_obtain_lease do
|
|
example.run
|
|
end
|
|
end
|
|
|
|
it 'allows method to be executed' do
|
|
expect(service).to receive(:execute_unsafe).and_call_original
|
|
|
|
expect(service.execute).to eq(true)
|
|
end
|
|
end
|
|
end
|