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/models/terraform/state_spec.rb')
-rw-r--r--spec/models/terraform/state_spec.rb62
1 files changed, 53 insertions, 9 deletions
diff --git a/spec/models/terraform/state_spec.rb b/spec/models/terraform/state_spec.rb
index 68bb86bfa49..01ae80a61d1 100644
--- a/spec/models/terraform/state_spec.rb
+++ b/spec/models/terraform/state_spec.rb
@@ -7,8 +7,9 @@ RSpec.describe Terraform::State do
let(:terraform_state_file) { fixture_file('terraform/terraform.tfstate') }
- it { is_expected.to belong_to(:project) }
+ it { is_expected.to be_a FileStoreMounter }
+ it { is_expected.to belong_to(:project) }
it { is_expected.to belong_to(:locked_by_user).class_name('User') }
it { is_expected.to validate_presence_of(:project_id) }
@@ -23,14 +24,6 @@ RSpec.describe Terraform::State do
expect(subject.file.read).to eq(terraform_state_file)
end
end
-
- context 'when no file exists' do
- subject { create(:terraform_state) }
-
- it 'creates a default file' do
- expect(subject.file.read).to eq('{"version":1}')
- end
- end
end
describe '#file_store' do
@@ -56,4 +49,55 @@ RSpec.describe Terraform::State do
it_behaves_like 'mounted file in local store'
end
end
+
+ describe '#latest_file' do
+ subject { terraform_state.latest_file }
+
+ context 'versioning is enabled' do
+ let(:terraform_state) { create(:terraform_state, :with_version) }
+ let(:latest_version) { terraform_state.latest_version }
+
+ it { is_expected.to eq latest_version.file }
+
+ context 'but no version exists yet' do
+ let(:terraform_state) { create(:terraform_state) }
+
+ it { is_expected.to be_nil }
+ end
+ end
+
+ context 'versioning is disabled' do
+ let(:terraform_state) { create(:terraform_state, :with_file) }
+
+ it { is_expected.to eq terraform_state.file }
+ end
+ end
+
+ describe '#update_file!' do
+ let(:version) { 2 }
+ let(:data) { Hash[terraform_version: '0.12.21'].to_json }
+
+ subject { terraform_state.update_file!(CarrierWaveStringFile.new(data), version: version) }
+
+ context 'versioning is enabled' do
+ let(:terraform_state) { create(:terraform_state) }
+
+ it 'creates a new version' do
+ expect { subject }.to change { Terraform::StateVersion.count }
+
+ expect(terraform_state.latest_version.version).to eq(version)
+ expect(terraform_state.latest_version.file.read).to eq(data)
+ end
+ end
+
+ context 'versioning is disabled' do
+ let(:terraform_state) { create(:terraform_state, :with_file) }
+
+ it 'modifies the existing state record' do
+ expect { subject }.not_to change { Terraform::StateVersion.count }
+
+ expect(terraform_state.latest_file.read).to eq(data)
+ end
+ end
+ end
end