knex/test/integration2/query/insert/on-conflict-deferred.spec.js
2022-01-28 12:34:26 +02:00

77 lines
2.3 KiB
JavaScript

const {
getAllDbs,
getKnexForDb,
} = require('../../util/knex-instance-provider');
const { isPostgreSQL } = require('../../../util/db-helpers');
describe('Insert', () => {
describe('onConflict deferred', () => {
getAllDbs().forEach((db) => {
describe(db, () => {
let knex;
before(function () {
knex = getKnexForDb(db);
if (!isPostgreSQL(knex)) {
this.skip('This test is PostgreSQL only');
}
});
after(() => {
return knex.destroy();
});
beforeEach(async () => {
await knex.schema.createTable('table_a', (table) => {
table.integer('id').primary().notNull();
table.integer('b_id').notNull();
table.integer('value').notNull();
});
await knex.schema.createTable('table_b', (table) => {
table.integer('id').primary().notNull();
table.integer('a_id').notNull();
table.integer('value').notNull();
});
await knex.schema.table('table_a', (table) => {
table
.foreign('b_id')
.references('table_b.id')
.onDelete('cascade')
.onUpdate('cascade')
.deferrable('deferred');
});
await knex.schema.table('table_b', (table) => {
table
.foreign('a_id')
.references('table_a.id')
.onDelete('cascade')
.onUpdate('cascade')
.deferrable('deferred');
});
});
afterEach(async () => {
await knex.schema.raw('drop table table_a cascade');
await knex.schema.raw('drop table table_b cascade');
});
it('inserts entries with delayed checks correctly', async function () {
for (let i = 0; i < 10; i++) {
await knex.transaction(async function (txn) {
await txn
.table('table_a')
.insert({ id: i, b_id: i, value: i })
.onConflict('id')
.merge();
await txn
.table('table_b')
.insert({ id: i, a_id: i, value: i })
.onConflict('id')
.merge();
});
}
});
});
});
});
});