1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- import type { ReferentialAction } from '@sequelize/core';
- import { DataTypes, Deferrable } from '@sequelize/core';
- import { sequelize } from '../support';
- const dialect = sequelize.dialect.name;
- describe('Sequelize#drop', () => {
- it('supports dropping cyclic associations', async () => {
- const A = sequelize.define('A', {
- bId: {
- type: DataTypes.INTEGER,
- references: {
- deferrable: Deferrable.INITIALLY_IMMEDIATE,
- },
- },
- });
- const B = sequelize.define('B', {
- aId: {
- type: DataTypes.INTEGER,
- references: {
- deferrable: Deferrable.INITIALLY_IMMEDIATE,
- },
- },
- });
- // mssql refuses cyclic references unless ON DELETE and ON UPDATE is set to NO ACTION
- const mssqlConstraints =
- dialect === 'mssql'
- ? { onDelete: 'NO ACTION' as ReferentialAction, onUpdate: 'NO ACTION' as ReferentialAction }
- : null;
- // These models both have a foreign key that references the other model.
- // Sequelize should be able to create them.
- A.belongsTo(B, { foreignKey: { allowNull: false, ...mssqlConstraints } });
- B.belongsTo(A, { foreignKey: { allowNull: false, ...mssqlConstraints } });
- await sequelize.sync();
- // drop both tables
- await sequelize.drop();
- });
- it('supports dropping cyclic associations with { cascade: true } in supported dialects', async () => {
- if (!sequelize.dialect.supports.dropTable.cascade) {
- return;
- }
- const A = sequelize.define('A', {
- bId: {
- type: DataTypes.INTEGER,
- },
- });
- const B = sequelize.define('B', {
- aId: {
- type: DataTypes.INTEGER,
- },
- });
- // These models both have a foreign key that references the other model.
- // Sequelize should be able to create them.
- A.belongsTo(B, { foreignKey: { allowNull: false } });
- B.belongsTo(A, { foreignKey: { allowNull: false } });
- await sequelize.sync();
- // drop both tables
- await sequelize.drop({ cascade: true });
- });
- });
|