diff options
Diffstat (limited to 'spec/models/ci/build_need_spec.rb')
-rw-r--r-- | spec/models/ci/build_need_spec.rb | 60 |
1 files changed, 59 insertions, 1 deletions
diff --git a/spec/models/ci/build_need_spec.rb b/spec/models/ci/build_need_spec.rb index c2cf9027055..aa1c57d1788 100644 --- a/spec/models/ci/build_need_spec.rb +++ b/spec/models/ci/build_need_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Ci::BuildNeed, model: true do +RSpec.describe Ci::BuildNeed, model: true, feature_category: :continuous_integration do let(:build_need) { build(:ci_build_need) } it { is_expected.to belong_to(:build).class_name('Ci::Processable') } @@ -35,4 +35,62 @@ RSpec.describe Ci::BuildNeed, model: true do end end end + + describe 'partitioning' do + context 'with build' do + let(:build) { FactoryBot.build(:ci_build, partition_id: ci_testing_partition_id) } + let(:build_need) { FactoryBot.build(:ci_build_need, build: build) } + + it 'sets partition_id to the current partition value' do + expect { build_need.valid? }.to change { build_need.partition_id }.to(ci_testing_partition_id) + end + + context 'when it is already set' do + let(:build_need) { FactoryBot.build(:ci_build_need, partition_id: 125) } + + it 'does not change the partition_id value' do + expect { build_need.valid? }.not_to change { build_need.partition_id } + end + end + end + + context 'without build' do + let(:build_need) { FactoryBot.build(:ci_build_need, build: nil) } + + it { is_expected.to validate_presence_of(:partition_id) } + + it 'does not change the partition_id value' do + expect { build_need.valid? }.not_to change { build_need.partition_id } + end + end + + context 'when using bulk_insert' do + include Ci::PartitioningHelpers + + let(:new_pipeline) { create(:ci_pipeline) } + let(:ci_build) { build(:ci_build, pipeline: new_pipeline) } + + before do + stub_current_partition_id + end + + it 'creates build needs successfully', :aggregate_failures do + ci_build.needs_attributes = [ + { name: "build", artifacts: true }, + { name: "build2", artifacts: true }, + { name: "build3", artifacts: true } + ] + + expect(described_class).to receive(:bulk_insert!).and_call_original + + BulkInsertableAssociations.with_bulk_insert do + ci_build.save! + end + + expect(described_class.count).to eq(3) + expect(described_class.first.partition_id).to eq(ci_testing_partition_id) + expect(described_class.second.partition_id).to eq(ci_testing_partition_id) + end + end + end end |