diff options
Diffstat (limited to 'spec/services/pages/legacy_storage_lease_spec.rb')
-rw-r--r-- | spec/services/pages/legacy_storage_lease_spec.rb | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/spec/services/pages/legacy_storage_lease_spec.rb b/spec/services/pages/legacy_storage_lease_spec.rb new file mode 100644 index 00000000000..c022da6f47f --- /dev/null +++ b/spec/services/pages/legacy_storage_lease_spec.rb @@ -0,0 +1,73 @@ +# 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 + + it 'runs guarded method if feature flag is disabled' do + stub_feature_flags(pages_use_legacy_storage_lease: false) + + expect(service).to receive(:execute_unsafe).and_call_original + + expect(service.execute).to eq(true) + 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 |