spec/lib/release_tools/issuable_spec.rb (72 lines of code) (raw):

# frozen_string_literal: true require 'spec_helper' describe ReleaseTools::Issuable do # rubocop:disable RSpec/LeakyConstantDeclaration,Lint/ConstantDefinitionInBlock # NOTE: We can't use an anonymous class in a `let` definition because we're # testing `#type`, which won't behave as expected in an anonymous class. class TestIssuable < ReleaseTools::Issuable protected def template "<%= RUBY_VERSION %>" end end # rubocop:enable RSpec/LeakyConstantDeclaration,Lint/ConstantDefinitionInBlock subject { TestIssuable.new } describe '#type' do it { expect(subject.type).to eq 'Test Issuable' } end describe '#description' do it { expect(subject.description).to eq RUBY_VERSION } end describe '#project' do it 'returns ReleaseTools::Project::GitlabEe by default' do expect(subject.project).to eq(ReleaseTools::Project::GitlabEe) end context 'when a project is set' do subject { described_class.new(project: ReleaseTools::Project::OmnibusGitlab) } it 'returns the given project' do expect(subject.project).to eq(ReleaseTools::Project::OmnibusGitlab) end end end describe '#iid' do it 'delegates to remote_issuable' do remote_issuable = double(iid: 1234) allow(subject).to receive(:remote_issuable).and_return(remote_issuable) expect(subject.iid).to eq(1234) end end describe '#created_at' do context 'when passed a String' do it 'returns a Time' do expect(TestIssuable.new(created_at: '2018-01-01').created_at).to eq(Time.new(2018, 1, 1)) end end context 'when passed a Time' do it 'returns a Time' do expect(TestIssuable.new(created_at: Time.new(2018, 1, 1)).created_at).to eq(Time.new(2018, 1, 1)) end end end describe '#exists?' do context 'when remote subject does not exist' do before do allow(subject).to receive(:remote_issuable).and_return(nil) end it { is_expected.not_to be_exists } end context 'when remote subject exists' do before do allow(subject).to receive(:remote_issuable).and_return(double) end it { is_expected.to be_exists } end end describe '#create' do it { expect { subject.create }.to raise_error(NotImplementedError) } end describe '#remote_issuable' do it { expect { subject.remote_issuable }.to raise_error(NotImplementedError) } end describe '#url' do it { expect { subject.url }.to raise_error(NotImplementedError) } end describe '#create?' do it { expect(subject.create?).to be(true) } end end