diff options
Diffstat (limited to 'spec/models/concerns/bulk_insert_safe_spec.rb')
-rw-r--r-- | spec/models/concerns/bulk_insert_safe_spec.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/spec/models/concerns/bulk_insert_safe_spec.rb b/spec/models/concerns/bulk_insert_safe_spec.rb index ca6df506ee8..209ee1264d5 100644 --- a/spec/models/concerns/bulk_insert_safe_spec.rb +++ b/spec/models/concerns/bulk_insert_safe_spec.rb @@ -20,6 +20,13 @@ RSpec.describe BulkInsertSafe do t.index :name, unique: true end + + create_table :bulk_insert_items_with_composite_pk, id: false, force: true do |t| + t.integer :id, null: true + t.string :name, null: true + end + + execute("ALTER TABLE bulk_insert_items_with_composite_pk ADD PRIMARY KEY (id,name);") end end @@ -27,6 +34,7 @@ RSpec.describe BulkInsertSafe do ActiveRecord::Schema.define do drop_table :bulk_insert_items, force: true drop_table :bulk_insert_parent_items, force: true + drop_table :bulk_insert_items_with_composite_pk, force: true end end @@ -227,5 +235,28 @@ RSpec.describe BulkInsertSafe do end end end + + context 'when a model with composite primary key is inserted' do + let_it_be(:bulk_insert_items_with_composite_pk_class) do + Class.new(ActiveRecord::Base) do + self.table_name = 'bulk_insert_items_with_composite_pk' + + include BulkInsertSafe + end + end + + let(:new_object) { bulk_insert_items_with_composite_pk_class.new(id: 1, name: 'composite') } + + it 'successfully inserts an item' do + expect(ActiveRecord::InsertAll).to receive(:new) + .with( + bulk_insert_items_with_composite_pk_class, [new_object.as_json], on_duplicate: :raise, returning: false, unique_by: %w[id name] + ).and_call_original + + expect { bulk_insert_items_with_composite_pk_class.bulk_insert!([new_object]) }.to( + change(bulk_insert_items_with_composite_pk_class, :count).from(0).to(1) + ) + end + end end end |