scenario_shared_examples.rb 1.2 KB
Newer Older
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
# frozen_string_literal: true

shared_examples 'a QA scenario class' do
  let(:attributes) { spy('Runtime::Scenario') }
  let(:release) { spy('Runtime::Release') }
  let(:runner) { spy('Specs::Runner') }

  let(:args) { ['gitlab_address'] }
  let(:tags) { [] }
  let(:options) { %w[path1 path2] }

  before do
    stub_const('QA::Runtime::Release', release)
    stub_const('QA::Runtime::Scenario', attributes)
    stub_const('QA::Specs::Runner', runner)

    allow(runner).to receive(:perform).and_yield(runner)
  end

  it 'responds to perform' do
    expect(subject).to respond_to(:perform)
  end

  it 'sets an address of the subject' do
    subject.perform(*args)

    expect(attributes).to have_received(:define).with(:gitlab_address, 'gitlab_address')
  end

  it 'performs before hooks' do
    subject.perform(*args)

    expect(release).to have_received(:perform_before_hooks)
  end

  it 'sets tags on runner' do
    subject.perform(*args)

    expect(runner).to have_received(:tags=).with(tags)
  end

  context 'specifying RSpec options' do
    it 'sets options on runner' do
      subject.perform(*args, *options)

      expect(runner).to have_received(:options=).with(options)
    end
  end
end