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
path: root/qa/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-07-31 06:09:05 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-07-31 06:09:05 +0300
commit7d660ee85ddd20136401977a6ab68cc84ccc632d (patch)
treee7641773f71a94cf79cebab982166e34985709f9 /qa/spec
parent77afa9577dd6ca5e9967586a1d0c3b9954f7f5e7 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'qa/spec')
-rw-r--r--qa/spec/specs/allure_report_spec.rb121
1 files changed, 121 insertions, 0 deletions
diff --git a/qa/spec/specs/allure_report_spec.rb b/qa/spec/specs/allure_report_spec.rb
new file mode 100644
index 00000000000..67ae0712260
--- /dev/null
+++ b/qa/spec/specs/allure_report_spec.rb
@@ -0,0 +1,121 @@
+# frozen_string_literal: true
+
+require 'allure-rspec'
+
+describe QA::Runtime::AllureReport do
+ include Helpers::StubENV
+
+ let(:rspec_config) { double('RSpec::Core::Configuration', 'formatter=': nil, after: nil) }
+ let(:rspec_example) do
+ double(
+ 'RSpec::Core::Example',
+ tms: nil,
+ issue: nil,
+ add_link: nil,
+ attempts: 0,
+ file_path: 'file/path/spec.rb',
+ metadata: {
+ testcase: 'testcase',
+ quarantine: { issue: 'issue' }
+ }
+ )
+ end
+
+ let(:png_path) { 'png_path' }
+ let(:html_path) { 'html_path' }
+
+ let(:allure_config) do
+ # need to mock config in case the test itself is executed with allure reporting enabled
+ AllureRspec::RspecConfig.send(:new).tap do |conf|
+ conf.instance_variable_set(:@allure_config, Allure::Config.send(:new))
+ end
+ end
+
+ before do
+ stub_env('QA_GENERATE_ALLURE_REPORT', generate_report)
+
+ allow(AllureRspec).to receive(:configure).and_yield(allure_config)
+ allow(RSpec).to receive(:configure).and_yield(rspec_config)
+ allow(rspec_config).to receive(:after).and_yield(rspec_example)
+ allow(Capybara::Screenshot).to receive(:after_save_screenshot).and_yield(png_path)
+ allow(Capybara::Screenshot).to receive(:after_save_html).and_yield(html_path)
+ end
+
+ context 'with report generation disabled' do
+ let(:generate_report) { 'false' }
+
+ it 'does not perform configuration' do
+ aggregate_failures do
+ expect(described_class.configure!).to be_nil
+
+ expect(AllureRspec).not_to have_received(:configure)
+ expect(RSpec).not_to have_received(:configure)
+ expect(Capybara::Screenshot).not_to have_received(:after_save_screenshot)
+ expect(Capybara::Screenshot).not_to have_received(:after_save_html)
+ end
+ end
+ end
+
+ context 'with report generation enabled' do
+ let(:generate_report) { 'true' }
+
+ let(:png_file) { 'png-file' }
+ let(:html_file) { 'html-file' }
+ let(:ci_job) { 'ee:relative 5' }
+ let(:ci_job_url) { 'url' }
+
+ before do
+ stub_env('CI', 'true')
+ stub_env('CI_JOB_NAME', ci_job)
+ stub_env('CI_JOB_URL', ci_job_url)
+
+ allow(Allure).to receive(:add_attachment)
+ allow(File).to receive(:open).with(png_path) { png_file }
+ allow(File).to receive(:open).with(html_path) { html_file }
+
+ described_class.configure!
+ end
+
+ it 'configures Allure options' do
+ aggregate_failures do
+ expect(allure_config.results_directory).to eq('tmp/allure-results')
+ expect(allure_config.clean_results_directory).to eq(true)
+ expect(allure_config.environment_properties).to be_a_kind_of(Hash)
+ expect(allure_config.environment).to eq('ee:relative')
+ end
+ end
+
+ it 'adds rspec formatter' do
+ expect(rspec_config).to have_received(:formatter=).with(AllureRspecFormatter)
+ end
+
+ it 'configures after block' do
+ aggregate_failures do
+ expect(rspec_example).to have_received(:tms).with('Testcase', 'testcase')
+ 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'
+ )
+ end
+ end
+
+ it 'configures screenshot saving' do
+ aggregate_failures do
+ expect(Allure).to have_received(:add_attachment).with(
+ name: 'screenshot',
+ source: png_file,
+ type: Allure::ContentType::PNG,
+ test_case: true
+ )
+ expect(Allure).to have_received(:add_attachment).with(
+ name: 'html',
+ source: html_file,
+ type: 'text/html',
+ test_case: true
+ )
+ end
+ end
+ end
+end