diff options
Diffstat (limited to 'qa/spec/support/formatters/allure_metadata_formatter_spec.rb')
-rw-r--r-- | qa/spec/support/formatters/allure_metadata_formatter_spec.rb | 70 |
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 |