spec/lib/jenkinsfile_runner/commands/init/configuration_spec.rb (75 lines of code) (raw):
require 'spec_helper'
RSpec.describe JenkinsfileRunner::Commands::Init::Configuration do
subject(:subject) { described_class.new(attributes) }
let(:all_attributes) do
[
'--jfr-version', 'v1',
'--jenkins-home', __dir__,
'--jenkins-war', __FILE__,
'--agent-type', 'shell',
'--build-output', 'path/to/output'
]
end
describe '#initialize' do
let(:attributes) { all_attributes }
it { is_expected.to have_attributes(jfr_version: 'v1') }
it { is_expected.to have_attributes(jenkins_home: __dir__) }
it { is_expected.to have_attributes(jenkins_war: __FILE__) }
it { is_expected.to have_attributes(agent_type: :shell) }
it { is_expected.to have_attributes(build_output: 'path/to/output') }
end
describe '#valid?' do
context 'without attributes' do
let(:attributes) { [] }
it { expect(subject.valid?).to be_falsey }
end
context 'with attributes' do
let(:attributes) { all_attributes }
it { expect(subject.valid?).to be_truthy }
end
end
describe '#errors' do
before do
subject.valid?
end
context 'without attributes' do
let(:attributes) { [] }
it { expect(subject.errors).to include([:jfr_version, 'is missing']) }
it { expect(subject.errors).to include([:jenkins_home, 'is missing']) }
it { expect(subject.errors).to include([:jenkins_war, 'is missing']) }
it { expect(subject.errors).to include([:agent_type, 'is missing']) }
it { expect(subject.errors).to include([:build_output, 'is missing']) }
end
context 'with attributes' do
let(:attributes) { all_attributes }
it { expect(subject.errors).to be_empty }
end
context 'with non existing paths' do
let(:attributes) do
[
'--jenkins-home', '/jenkins/home',
'--jenkins-war', '/jenkins/home/jenkins.war',
]
end
it { expect(subject.errors).to include([:jenkins_home, '/jenkins/home does not exist']) }
it { expect(subject.errors).to include([:jenkins_war, '/jenkins/home/jenkins.war does not exist']) }
end
end
describe 'exceptions' do
shared_examples 'acceptable agent type' do |agent_type|
let(:attributes) { ['--agent-type', agent_type] }
it { expect { subject }.to_not raise_error }
it { expect(subject.agent_type).to eq(agent_type.to_sym) }
end
it_behaves_like 'acceptable agent type', 'shell'
it_behaves_like 'acceptable agent type', 'docker'
context 'with unknown agent types' do
let(:attributes) do
['--agent-type', 'remote']
end
it 'raises exceptions' do
expect { subject }.to raise_error OptionParser::InvalidArgument
end
end
end
end