diff options
Diffstat (limited to 'spec/models/terraform/state_spec.rb')
-rw-r--r-- | spec/models/terraform/state_spec.rb | 56 |
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 |