fix(bulk-create): `ON CONFLICT` with unique index (#13345) · sequelize/sequelize@6dcb565
@@ -638,6 +638,67 @@ describe(Support.getTestDialectTeaser('Model'), () => {
638638expect(people[1].name).to.equal('Bob');
639639});
640640641+it('[#12516] when the primary key column names and model field names are different and have composite unique index constraints', async function() {
642+const Person = this.sequelize.define(
643+'Person',
644+{
645+id: {
646+type: DataTypes.INTEGER,
647+allowNull: false,
648+autoIncrement: true,
649+primaryKey: true,
650+field: 'id'
651+},
652+systemId: {
653+type: DataTypes.INTEGER,
654+allowNull: false,
655+field: 'system_id'
656+},
657+system: {
658+type: DataTypes.STRING,
659+allowNull: false,
660+field: 'system'
661+},
662+name: {
663+type: DataTypes.STRING,
664+allowNull: false,
665+field: 'name'
666+}
667+},
668+{
669+indexes: [
670+{
671+unique: true,
672+fields: ['system_id', 'system']
673+}
674+]
675+}
676+);
677+678+await Person.sync({ force: true });
679+const inserts = [{ systemId: 1, system: 'system1', name: 'Alice' }];
680+const people0 = await Person.bulkCreate(inserts);
681+expect(people0.length).to.equal(1);
682+expect(people0[0].systemId).to.equal(1);
683+expect(people0[0].system).to.equal('system1');
684+expect(people0[0].name).to.equal('Alice');
685+686+const updates = [
687+{ systemId: 1, system: 'system1', name: 'CHANGED NAME' },
688+{ systemId: 1, system: 'system2', name: 'Bob' }
689+];
690+691+const people = await Person.bulkCreate(updates, {
692+updateOnDuplicate: ['systemId', 'system', 'name']
693+});
694+expect(people.length).to.equal(2);
695+expect(people[0].systemId).to.equal(1);
696+expect(people[0].system).to.equal('system1');
697+expect(people[0].name).to.equal('CHANGED NAME');
698+expect(people[1].systemId).to.equal(1);
699+expect(people[1].system).to.equal('system2');
700+expect(people[1].name).to.equal('Bob');
701+});
641702});
642703643704