summaryrefslogtreecommitdiff
path: root/qa/spec/specs/allure_report_spec.rb
blob: 34116ca6cbd433a28dd7752f210c2c12101cbe31 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# frozen_string_literal: true

describe QA::Runtime::AllureReport do
  include QA::Support::Helpers::StubEnv

  let(:rspec_config) { double('RSpec::Core::Configuration', 'add_formatter': nil, after: nil) }

  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(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' }

    before do
      stub_env('CI', 'true')
      stub_env('CI_JOB_NAME', ci_job)

      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 and metadata formatter' do
      expect(rspec_config).to have_received(:add_formatter).with(AllureRspecFormatter).ordered
      expect(rspec_config).to have_received(:add_formatter)
        .with(QA::Support::Formatters::AllureMetadataFormatter).ordered
    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