76 lines
1.9 KiB
Ruby
76 lines
1.9 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
RSpec.describe Gitlab::Ci::Pipeline::Seed::Pipeline do
|
|
let_it_be(:project) { create(:project, :repository) }
|
|
let_it_be(:pipeline) { create(:ci_pipeline, project: project) }
|
|
|
|
let(:stages_attributes) do
|
|
[
|
|
{
|
|
name: 'build',
|
|
index: 0,
|
|
builds: [
|
|
{ name: 'init', scheduling_type: :stage },
|
|
{ name: 'build', scheduling_type: :stage }
|
|
]
|
|
},
|
|
{
|
|
name: 'test',
|
|
index: 1,
|
|
builds: [
|
|
{ name: 'rspec', scheduling_type: :stage },
|
|
{ name: 'staging', scheduling_type: :stage, environment: 'staging' },
|
|
{ name: 'deploy', scheduling_type: :stage, environment: 'production' }
|
|
]
|
|
}
|
|
]
|
|
end
|
|
|
|
subject(:seed) do
|
|
described_class.new(pipeline, stages_attributes)
|
|
end
|
|
|
|
describe '#stages' do
|
|
it 'returns the stage resources' do
|
|
stages = seed.stages
|
|
|
|
expect(stages).to all(be_a(Ci::Stage))
|
|
expect(stages.map(&:name)).to contain_exactly('build', 'test')
|
|
end
|
|
end
|
|
|
|
describe '#size' do
|
|
it 'returns the number of jobs' do
|
|
expect(seed.size).to eq(5)
|
|
end
|
|
end
|
|
|
|
describe '#errors' do
|
|
context 'when attributes are valid' do
|
|
it 'returns nil' do
|
|
expect(seed.errors).to be_nil
|
|
end
|
|
end
|
|
|
|
context 'when attributes are not valid' do
|
|
it 'returns the errors' do
|
|
stages_attributes[0][:builds] << {
|
|
name: 'invalid_job',
|
|
scheduling_type: :dag,
|
|
needs_attributes: [{ name: 'non-existent', artifacts: true }]
|
|
}
|
|
|
|
expect(seed.errors).to contain_exactly(
|
|
"'invalid_job' job needs 'non-existent' job, but it was not added to the pipeline")
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#deployments_count' do
|
|
it 'counts the jobs having an environment associated' do
|
|
expect(seed.deployments_count).to eq(2)
|
|
end
|
|
end
|
|
end
|