summaryrefslogtreecommitdiff
path: root/spec/models/terraform/state_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/terraform/state_spec.rb')
-rw-r--r--spec/models/terraform/state_spec.rb56
1 files changed, 53 insertions, 3 deletions
diff --git a/spec/models/terraform/state_spec.rb b/spec/models/terraform/state_spec.rb
index 01ae80a61d1..608c5bdf03a 100644
--- a/spec/models/terraform/state_spec.rb
+++ b/spec/models/terraform/state_spec.rb
@@ -15,7 +15,24 @@ RSpec.describe Terraform::State do
it { is_expected.to validate_presence_of(:project_id) }
before do
- stub_terraform_state_object_storage(Terraform::StateUploader)
+ stub_terraform_state_object_storage
+ end
+
+ describe 'scopes' do
+ describe '.ordered_by_name' do
+ let_it_be(:project) { create(:project) }
+ let(:names) { %w(state_d state_b state_a state_c) }
+
+ subject { described_class.ordered_by_name }
+
+ before do
+ names.each do |name|
+ create(:terraform_state, project: project, name: name)
+ end
+ end
+
+ it { expect(subject.map(&:name)).to eq(names.sort) }
+ end
end
describe '#file' do
@@ -43,7 +60,7 @@ RSpec.describe Terraform::State do
context 'when file is stored locally' do
before do
- stub_terraform_state_object_storage(Terraform::StateUploader, enabled: false)
+ stub_terraform_state_object_storage(enabled: false)
end
it_behaves_like 'mounted file in local store'
@@ -70,11 +87,17 @@ RSpec.describe Terraform::State do
let(:terraform_state) { create(:terraform_state, :with_file) }
it { is_expected.to eq terraform_state.file }
+
+ context 'and a version exists (migration to versioned in progress)' do
+ let!(:migrated_version) { create(:terraform_state_version, terraform_state: terraform_state) }
+
+ it { is_expected.to eq terraform_state.latest_version.file }
+ end
end
end
describe '#update_file!' do
- let(:version) { 2 }
+ let(:version) { 3 }
let(:data) { Hash[terraform_version: '0.12.21'].to_json }
subject { terraform_state.update_file!(CarrierWaveStringFile.new(data), version: version) }
@@ -98,6 +121,33 @@ RSpec.describe Terraform::State do
expect(terraform_state.latest_file.read).to eq(data)
end
+
+ context 'and a version exists (migration to versioned in progress)' do
+ let!(:migrated_version) { create(:terraform_state_version, terraform_state: terraform_state, version: 0) }
+
+ it 'creates a new version, corrects the migrated version number, and marks the state as versioned' do
+ expect { subject }.to change { Terraform::StateVersion.count }
+
+ expect(migrated_version.reload.version).to eq(1)
+ expect(migrated_version.file.read).to eq(terraform_state_file)
+
+ expect(terraform_state.reload.latest_version.version).to eq(version)
+ expect(terraform_state.latest_version.file.read).to eq(data)
+ expect(terraform_state).to be_versioning_enabled
+ end
+
+ context 'the current version cannot be determined' do
+ before do
+ migrated_version.update!(file: CarrierWaveStringFile.new('invalid-json'))
+ end
+
+ it 'uses version - 1 to correct the migrated version number' do
+ expect { subject }.to change { Terraform::StateVersion.count }
+
+ expect(migrated_version.reload.version).to eq(2)
+ end
+ end
+ end
end
end
end