diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-06-18 11:18:50 +0000 |
commit | 8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781 (patch) | |
tree | a77e7fe7a93de11213032ed4ab1f33a3db51b738 /spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb | |
parent | 00b35af3db1abfe813a778f643dad221aad51fca (diff) | |
download | gitlab-ce-8c7f4e9d5f36cff46365a7f8c4b9c21578c1e781.tar.gz |
Add latest changes from gitlab-org/gitlab@13-1-stable-ee
Diffstat (limited to 'spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb')
-rw-r--r-- | spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb | 72 |
1 files changed, 54 insertions, 18 deletions
diff --git a/spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb b/spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb index 19cd75e586c..fec27c0f31a 100644 --- a/spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb +++ b/spec/lib/gitlab/ci/parsers/terraform/tfplan_spec.rb @@ -8,7 +8,7 @@ describe Gitlab::Ci::Parsers::Terraform::Tfplan do let(:reports) { Gitlab::Ci::Reports::TerraformReports.new } - context 'when data is tfplan.json' do + context 'when data is invalid' do context 'when there is no data' do it 'raises an error' do plan = '{}' @@ -19,31 +19,67 @@ describe Gitlab::Ci::Parsers::Terraform::Tfplan do end end - context 'when there is data' do - it 'parses JSON and returns a report' do - plan = '{ "create": 0, "update": 1, "delete": 0 }' + context 'when data is not a JSON file' do + it 'raises an error' do + plan = { 'create' => 0, 'update' => 1, 'delete' => 0 }.to_s - expect { subject.parse!(plan, reports, artifact: artifact) }.not_to raise_error + expect { subject.parse!(plan, reports, artifact: artifact) }.to raise_error( + described_class::TfplanParserError + ) + end + end - expect(reports.plans).to match( - a_hash_including( - 'tfplan.json' => a_hash_including( - 'create' => 0, - 'update' => 1, - 'delete' => 0 - ) - ) + context 'when JSON is missing a required key' do + it 'raises an error' do + plan = '{ "wrong_key": 1 }' + + expect { subject.parse!(plan, reports, artifact: artifact) }.to raise_error( + described_class::TfplanParserError ) end end end - context 'when data is not tfplan.json' do - it 'raises an error' do - plan = { 'create' => 0, 'update' => 1, 'delete' => 0 }.to_s + context 'when data is valid' do + it 'parses JSON and returns a report' do + plan = '{ "create": 0, "update": 1, "delete": 0 }' + + expect { subject.parse!(plan, reports, artifact: artifact) }.not_to raise_error - expect { subject.parse!(plan, reports, artifact: artifact) }.to raise_error( - described_class::TfplanParserError + reports.plans.each do |key, hash_value| + expect(hash_value.keys).to match_array(%w[create delete job_name job_path update]) + end + + expect(reports.plans).to match( + a_hash_including( + artifact.job.id.to_s => a_hash_including( + 'create' => 0, + 'update' => 1, + 'delete' => 0, + 'job_name' => artifact.job.options.dig(:artifacts, :name).to_s + ) + ) + ) + end + + it 'parses JSON when extra keys are present' do + plan = '{ "create": 0, "update": 1, "delete": 0, "extra_key": 4 }' + + expect { subject.parse!(plan, reports, artifact: artifact) }.not_to raise_error + + reports.plans.each do |key, hash_value| + expect(hash_value.keys).to match_array(%w[create delete job_name job_path update]) + end + + expect(reports.plans).to match( + a_hash_including( + artifact.job.id.to_s => a_hash_including( + 'create' => 0, + 'update' => 1, + 'delete' => 0, + 'job_name' => artifact.job.options.dig(:artifacts, :name).to_s + ) + ) ) end end |