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/terraform/remote_state_handler_spec.rb')
-rw-r--r--spec/services/terraform/remote_state_handler_spec.rb40
1 files changed, 34 insertions, 6 deletions
diff --git a/spec/services/terraform/remote_state_handler_spec.rb b/spec/services/terraform/remote_state_handler_spec.rb
index ca392849d49..19c1d4109e9 100644
--- a/spec/services/terraform/remote_state_handler_spec.rb
+++ b/spec/services/terraform/remote_state_handler_spec.rb
@@ -33,6 +33,14 @@ RSpec.describe Terraform::RemoteStateHandler do
it 'returns the state' do
expect(subject.find_with_lock).to eq(state)
end
+
+ context 'with a state scheduled for deletion' do
+ let!(:state) { create(:terraform_state, :deletion_in_progress, project: project, name: 'state') }
+
+ it 'raises an exception' do
+ expect { subject.find_with_lock }.to raise_error(described_class::StateDeletedError)
+ end
+ end
end
end
end
@@ -84,6 +92,13 @@ RSpec.describe Terraform::RemoteStateHandler do
.to raise_error(described_class::StateLockedError)
end
+ it 'raises an exception if the state is scheduled for deletion' do
+ create(:terraform_state, :deletion_in_progress, project: project, name: 'new-state')
+
+ expect { handler.handle_with_lock }
+ .to raise_error(described_class::StateDeletedError)
+ end
+
context 'user does not have permission to modify state' do
let(:user) { developer }
@@ -127,24 +142,28 @@ RSpec.describe Terraform::RemoteStateHandler do
expect { handler.lock! }.to raise_error(described_class::StateLockedError)
end
+
+ it 'raises an exception when the state exists and is scheduled for deletion' do
+ create(:terraform_state, :deletion_in_progress, project: project, name: 'new-state')
+
+ expect { handler.lock! }.to raise_error(described_class::StateDeletedError)
+ end
end
describe '#unlock!' do
- let(:lock_id) { 'abc-abc' }
+ let_it_be(:state) { create(:terraform_state, :locked, project: project, name: 'new-state', lock_xid: 'abc-abc') }
+
+ let(:lock_id) { state.lock_xid }
subject(:handler) do
described_class.new(
project,
user,
- name: 'new-state',
+ name: state.name,
lock_id: lock_id
)
end
- before do
- create(:terraform_state, :locked, project: project, name: 'new-state', lock_xid: 'abc-abc')
- end
-
it 'unlocks the state' do
state = handler.unlock!
@@ -169,6 +188,15 @@ RSpec.describe Terraform::RemoteStateHandler do
.to raise_error(described_class::StateLockedError)
end
end
+
+ context 'with a state scheduled for deletion' do
+ it 'raises an exception' do
+ state.update!(deleted_at: Time.current)
+
+ expect { handler.unlock! }
+ .to raise_error(described_class::StateDeletedError)
+ end
+ end
end
end
end