summaryrefslogtreecommitdiff
path: root/qa/spec/support/formatters/allure_metadata_formatter_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'qa/spec/support/formatters/allure_metadata_formatter_spec.rb')
-rw-r--r--qa/spec/support/formatters/allure_metadata_formatter_spec.rb70
1 files changed, 62 insertions, 8 deletions
diff --git a/qa/spec/support/formatters/allure_metadata_formatter_spec.rb b/qa/spec/support/formatters/allure_metadata_formatter_spec.rb
index d84e190fd56..ab3b753c3b0 100644
--- a/qa/spec/support/formatters/allure_metadata_formatter_spec.rb
+++ b/qa/spec/support/formatters/allure_metadata_formatter_spec.rb
@@ -5,25 +5,33 @@ describe QA::Support::Formatters::AllureMetadataFormatter do
let(:formatter) { described_class.new(StringIO.new) }
- let(:rspec_example_notification) { double('RSpec::Core::Notifications::ExampleNotification', example: rspec_example) }
+ let(:rspec_example_notification) do
+ instance_double(RSpec::Core::Notifications::ExampleNotification, example: rspec_example)
+ end
+
+ # rubocop:disable RSpec/VerifiedDoubles
let(:rspec_example) do
double(
- 'RSpec::Core::Example',
+ RSpec::Core::Example,
tms: nil,
issue: nil,
add_link: nil,
+ set_flaky: nil,
+ parameter: nil,
attempts: 0,
- file_path: 'file/path/spec.rb',
- execution_result: instance_double("RSpec::Core::Example::ExecutionResult", status: :passed),
+ file_path: 'spec.rb',
+ execution_result: instance_double(RSpec::Core::Example::ExecutionResult, status: status),
metadata: {
testcase: 'testcase',
quarantine: { issue: 'issue' }
}
)
end
+ # rubocop:enable RSpec/VerifiedDoubles
let(:ci_job) { 'ee:relative 5' }
let(:ci_job_url) { 'url' }
+ let(:status) { :failed }
before do
stub_env('CI', 'true')
@@ -31,16 +39,62 @@ describe QA::Support::Formatters::AllureMetadataFormatter do
stub_env('CI_JOB_URL', ci_job_url)
end
- it "adds additional data to report" do
- formatter.example_finished(rspec_example_notification)
+ context 'with links' do
+ it 'adds quarantine, failure issue and ci job links', :aggregate_failures do
+ formatter.example_finished(rspec_example_notification)
- aggregate_failures do
expect(rspec_example).to have_received(:issue).with('Quarantine issue', 'issue')
expect(rspec_example).to have_received(:add_link).with(name: "Job(#{ci_job})", url: ci_job_url)
expect(rspec_example).to have_received(:issue).with(
'Failure issues',
- 'https://gitlab.com/gitlab-org/gitlab/-/issues?scope=all&state=opened&search=spec.rb'
+ 'https://gitlab.com/gitlab-org/gitlab/-/issues?scope=all&state=opened&search=Failure%20in%20spec.rb'
)
end
end
+
+ context 'with flaky test data', :aggregate_failures do
+ let(:influx_client) { instance_double(InfluxDB2::Client, create_query_api: influx_query_api) }
+ let(:influx_query_api) { instance_double(InfluxDB2::QueryApi, query: data) }
+ let(:data) do
+ [
+ instance_double(
+ InfluxDB2::FluxTable,
+ records: [
+ instance_double(InfluxDB2::FluxRecord, values: { 'status' => 'failed', 'testcase' => 'testcase' }),
+ instance_double(InfluxDB2::FluxRecord, values: { 'status' => 'passed', 'testcase' => 'testcase' })
+ ]
+ )
+ ]
+ end
+
+ before do
+ stub_env('QA_RUN_TYPE', 'package-and-test')
+ stub_env('QA_INFLUXDB_URL', 'url')
+ stub_env('QA_INFLUXDB_TOKEN', 'token')
+
+ allow(InfluxDB2::Client).to receive(:new) { influx_client }
+ end
+
+ context 'with non skipped spec' do
+ it 'adds flaky test data' do
+ formatter.start(nil)
+ formatter.example_finished(rspec_example_notification)
+
+ expect(rspec_example).to have_received(:set_flaky)
+ expect(rspec_example).to have_received(:parameter).with('pass_rate', '50%')
+ end
+ end
+
+ context 'with skipped spec' do
+ let(:status) { :pending }
+
+ it 'skips adding flaky test data' do
+ formatter.start(nil)
+ formatter.example_finished(rspec_example_notification)
+
+ expect(rspec_example).not_to have_received(:set_flaky)
+ expect(rspec_example).not_to have_received(:parameter)
+ end
+ end
+ end
end