123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855 |
- 'use strict';
- const chai = require('chai');
- const expect = chai.expect;
- const Support = require('../support');
- const { DataTypes } = require('@sequelize/core');
- const sinon = require('sinon');
- const dialect = Support.getTestDialect();
- describe(Support.getTestDialectTeaser('Hooks'), () => {
- beforeEach(async function () {
- this.User = this.sequelize.define('User', {
- username: {
- type: DataTypes.STRING,
- allowNull: false,
- },
- mood: {
- type: DataTypes.ENUM(['happy', 'sad', 'neutral']),
- },
- });
- this.ParanoidUser = this.sequelize.define(
- 'ParanoidUser',
- {
- username: DataTypes.STRING,
- mood: {
- type: DataTypes.ENUM(['happy', 'sad', 'neutral']),
- },
- },
- {
- paranoid: true,
- },
- );
- await this.sequelize.sync({ force: true });
- });
- describe('associations', () => {
- describe('1:1', () => {
- describe('cascade onUpdate', () => {
- beforeEach(async function () {
- this.Projects = this.sequelize.define('Project', {
- title: DataTypes.STRING,
- });
- this.Tasks = this.sequelize.define('Task', {
- title: DataTypes.STRING,
- });
- this.Projects.hasOne(this.Tasks, { foreignKey: { onUpdate: 'cascade' }, hooks: true });
- await this.Projects.sync({ force: true });
- await this.Tasks.sync({ force: true });
- });
- it('on success', async function () {
- let beforeHook = false;
- let afterHook = false;
- this.Tasks.beforeUpdate(async () => {
- beforeHook = true;
- });
- this.Tasks.afterUpdate(async () => {
- afterHook = true;
- });
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await project.setTask(task);
- await project.update({ id: 2 });
- expect(beforeHook).to.be.true;
- expect(afterHook).to.be.true;
- });
- it('on error', async function () {
- this.Tasks.afterUpdate(async () => {
- throw new Error('Whoops!');
- });
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- try {
- await project.setTask(task);
- } catch (error) {
- expect(error).to.be.instanceOf(Error);
- }
- });
- });
- // this test makes no sense: task was destroyed by the database through CASCADE.
- // there is no way for Sequelize to call its beforeDestroy/afterDestroy
- // describe('destroy() with cascade onDelete', () => {
- // beforeEach(async function () {
- // this.Projects = this.sequelize.define('Project', {
- // title: DataTypes.STRING,
- // });
- //
- // this.Tasks = this.sequelize.define('Task', {
- // title: DataTypes.STRING,
- // });
- //
- // this.Projects.hasOne(this.Tasks, { foreignKey: { onDelete: 'CASCADE' }, hooks: true });
- //
- // await this.sequelize.sync({ force: true });
- // });
- //
- // it('with no errors', async function () {
- // const beforeProject = sinon.spy();
- // const afterProject = sinon.spy();
- // const beforeTask = sinon.spy();
- // const afterTask = sinon.spy();
- //
- // this.Projects.beforeCreate(beforeProject);
- // this.Projects.afterCreate(afterProject);
- // this.Tasks.beforeDestroy(beforeTask);
- // this.Tasks.afterDestroy(afterTask);
- //
- // const project = await this.Projects.create({ title: 'New Project' });
- // const task = await this.Tasks.create({ title: 'New Task' });
- // await project.setTask(task);
- // await project.destroy();
- // expect(beforeProject).to.have.been.calledOnce;
- // expect(afterProject).to.have.been.calledOnce;
- // expect(beforeTask).to.have.been.calledOnce;
- // expect(afterTask).to.have.been.calledOnce;
- // });
- //
- // it('with errors', async function () {
- // const CustomErrorText = 'Whoops!';
- // let beforeProject = false;
- // let afterProject = false;
- // let beforeTask = false;
- // let afterTask = false;
- //
- // this.Projects.beforeCreate(async () => {
- // beforeProject = true;
- // });
- //
- // this.Projects.afterCreate(async () => {
- // afterProject = true;
- // });
- //
- // this.Tasks.beforeDestroy(async () => {
- // beforeTask = true;
- // throw new Error(CustomErrorText);
- // });
- //
- // this.Tasks.afterDestroy(async () => {
- // afterTask = true;
- // });
- //
- // const project = await this.Projects.create({ title: 'New Project' });
- // const task = await this.Tasks.create({ title: 'New Task' });
- // await project.setTask(task);
- // await expect(project.destroy()).to.eventually.be.rejectedWith(CustomErrorText);
- // expect(beforeProject).to.be.true;
- // expect(afterProject).to.be.true;
- // expect(beforeTask).to.be.true;
- // expect(afterTask).to.be.false;
- // });
- // });
- describe('no cascade update', () => {
- beforeEach(async function () {
- this.Projects = this.sequelize.define('Project', {
- title: DataTypes.STRING,
- });
- this.Tasks = this.sequelize.define('Task', {
- title: DataTypes.STRING,
- });
- this.Projects.hasOne(this.Tasks);
- this.Tasks.belongsTo(this.Projects);
- await this.Projects.sync({ force: true });
- await this.Tasks.sync({ force: true });
- });
- it('on success', async function () {
- const beforeHook = sinon.spy();
- const afterHook = sinon.spy();
- this.Tasks.beforeUpdate(beforeHook);
- this.Tasks.afterUpdate(afterHook);
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await project.setTask(task);
- await project.update({ id: 2 });
- expect(beforeHook).to.have.been.calledOnce;
- expect(afterHook).to.have.been.calledOnce;
- });
- it('on error', async function () {
- this.Tasks.afterUpdate(() => {
- throw new Error('Whoops!');
- });
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await expect(project.setTask(task)).to.be.rejected;
- });
- });
- describe('no cascade delete', () => {
- beforeEach(async function () {
- this.Projects = this.sequelize.define('Project', {
- title: DataTypes.STRING,
- });
- this.Tasks = this.sequelize.define('Task', {
- title: DataTypes.STRING,
- });
- this.Projects.hasMany(this.Tasks);
- this.Tasks.belongsTo(this.Projects);
- await this.Projects.sync({ force: true });
- await this.Tasks.sync({ force: true });
- });
- describe('#remove', () => {
- it('with no errors', async function () {
- const beforeProject = sinon.spy();
- const afterProject = sinon.spy();
- const beforeTask = sinon.spy();
- const afterTask = sinon.spy();
- this.Projects.beforeCreate(beforeProject);
- this.Projects.afterCreate(afterProject);
- this.Tasks.beforeUpdate(beforeTask);
- this.Tasks.afterUpdate(afterTask);
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await project.addTask(task);
- await project.removeTask(task);
- expect(beforeProject).to.have.been.called;
- expect(afterProject).to.have.been.called;
- expect(beforeTask).not.to.have.been.called;
- expect(afterTask).not.to.have.been.called;
- });
- it('with errors', async function () {
- const beforeProject = sinon.spy();
- const afterProject = sinon.spy();
- const beforeTask = sinon.spy();
- const afterTask = sinon.spy();
- this.Projects.beforeCreate(beforeProject);
- this.Projects.afterCreate(afterProject);
- this.Tasks.beforeUpdate(() => {
- beforeTask();
- throw new Error('Whoops!');
- });
- this.Tasks.afterUpdate(afterTask);
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- try {
- await project.addTask(task);
- } catch (error) {
- expect(error).to.be.instanceOf(Error);
- expect(beforeProject).to.have.been.calledOnce;
- expect(afterProject).to.have.been.calledOnce;
- expect(beforeTask).to.have.been.calledOnce;
- expect(afterTask).not.to.have.been.called;
- }
- });
- });
- });
- });
- describe('1:M', () => {
- // this test makes no sense: task was destroyed by the database through CASCADE.
- // there is no way for Sequelize to call its beforeDestroy/afterDestroy
- // describe('destroy with CASCADE', () => {
- // beforeEach(async function () {
- // this.Projects = this.sequelize.define('Project', {
- // title: DataTypes.STRING,
- // });
- //
- // this.Tasks = this.sequelize.define('Task', {
- // title: DataTypes.STRING,
- // });
- //
- // this.Projects.hasMany(this.Tasks, { foreignKey: { onDelete: 'cascade' }, hooks: true });
- //
- // await this.Projects.sync({ force: true });
- //
- // await this.Tasks.sync({ force: true });
- // });
- //
- // it('with no errors', async function () {
- // const beforeProject = sinon.spy();
- // const afterProject = sinon.spy();
- // const beforeTask = sinon.spy();
- // const afterTask = sinon.spy();
- //
- // this.Projects.beforeCreate(beforeProject);
- // this.Projects.afterCreate(afterProject);
- // this.Tasks.beforeDestroy(beforeTask);
- // this.Tasks.afterDestroy(afterTask);
- //
- // const project = await this.Projects.create({ title: 'New Project' });
- // const task = await this.Tasks.create({ title: 'New Task' });
- // await project.addTask(task);
- // await project.destroy();
- // expect(beforeProject).to.have.been.calledOnce;
- // expect(afterProject).to.have.been.calledOnce;
- // expect(beforeTask).to.have.been.calledOnce;
- // expect(afterTask).to.have.been.calledOnce;
- // });
- //
- // it('with errors', async function () {
- // let beforeProject = false;
- // let afterProject = false;
- // let beforeTask = false;
- // let afterTask = false;
- //
- // this.Projects.beforeCreate(async () => {
- // beforeProject = true;
- // });
- //
- // this.Projects.afterCreate(async () => {
- // afterProject = true;
- // });
- //
- // this.Tasks.beforeDestroy(async () => {
- // beforeTask = true;
- // throw new Error('Whoops!');
- // });
- //
- // this.Tasks.afterDestroy(async () => {
- // afterTask = true;
- // });
- //
- // const project = await this.Projects.create({ title: 'New Project' });
- // const task = await this.Tasks.create({ title: 'New Task' });
- // await project.addTask(task);
- //
- // try {
- // await project.destroy();
- // } catch (error) {
- // expect(error).to.be.instanceOf(Error);
- // expect(beforeProject).to.be.true;
- // expect(afterProject).to.be.true;
- // expect(beforeTask).to.be.true;
- // expect(afterTask).to.be.false;
- // }
- // });
- // });
- describe('no cascade', () => {
- beforeEach(async function () {
- this.Projects = this.sequelize.define('Project', {
- title: DataTypes.STRING,
- });
- this.Tasks = this.sequelize.define('Task', {
- title: DataTypes.STRING,
- });
- this.Projects.hasMany(this.Tasks);
- this.Tasks.belongsTo(this.Projects);
- await this.sequelize.sync({ force: true });
- });
- describe('#remove', () => {
- it('with no errors', async function () {
- const beforeProject = sinon.spy();
- const afterProject = sinon.spy();
- const beforeTask = sinon.spy();
- const afterTask = sinon.spy();
- this.Projects.beforeCreate(beforeProject);
- this.Projects.afterCreate(afterProject);
- this.Tasks.beforeUpdate(beforeTask);
- this.Tasks.afterUpdate(afterTask);
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await project.addTask(task);
- await project.removeTask(task);
- expect(beforeProject).to.have.been.called;
- expect(afterProject).to.have.been.called;
- expect(beforeTask).not.to.have.been.called;
- expect(afterTask).not.to.have.been.called;
- });
- it('with errors', async function () {
- let beforeProject = false;
- let afterProject = false;
- let beforeTask = false;
- let afterTask = false;
- this.Projects.beforeCreate(async () => {
- beforeProject = true;
- });
- this.Projects.afterCreate(async () => {
- afterProject = true;
- });
- this.Tasks.beforeUpdate(async () => {
- beforeTask = true;
- throw new Error('Whoops!');
- });
- this.Tasks.afterUpdate(async () => {
- afterTask = true;
- });
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- try {
- await project.addTask(task);
- } catch (error) {
- expect(error).to.be.instanceOf(Error);
- expect(beforeProject).to.be.true;
- expect(afterProject).to.be.true;
- expect(beforeTask).to.be.true;
- expect(afterTask).to.be.false;
- }
- });
- });
- });
- });
- describe('M:M', () => {
- describe('cascade', () => {
- beforeEach(async function () {
- this.Projects = this.sequelize.define('Project', {
- title: DataTypes.STRING,
- });
- this.Tasks = this.sequelize.define('Task', {
- title: DataTypes.STRING,
- });
- this.Projects.belongsToMany(this.Tasks, {
- foreignKey: { onDelete: 'CASCADE' },
- otherKey: { onDelete: 'CASCADE' },
- through: 'projects_and_tasks',
- hooks: true,
- });
- await this.sequelize.sync({ force: true });
- });
- describe('#remove', () => {
- it('with no errors', async function () {
- const beforeProject = sinon.spy();
- const afterProject = sinon.spy();
- const beforeTask = sinon.spy();
- const afterTask = sinon.spy();
- this.Projects.beforeCreate(beforeProject);
- this.Projects.afterCreate(afterProject);
- this.Tasks.beforeDestroy(beforeTask);
- this.Tasks.afterDestroy(afterTask);
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await project.addTask(task);
- await project.destroy();
- expect(beforeProject).to.have.been.calledOnce;
- expect(afterProject).to.have.been.calledOnce;
- // Since Sequelize does not cascade M:M, these should be false
- expect(beforeTask).not.to.have.been.called;
- expect(afterTask).not.to.have.been.called;
- });
- it('with errors', async function () {
- let beforeProject = false;
- let afterProject = false;
- let beforeTask = false;
- let afterTask = false;
- this.Projects.beforeCreate(async () => {
- beforeProject = true;
- });
- this.Projects.afterCreate(async () => {
- afterProject = true;
- });
- this.Tasks.beforeDestroy(async () => {
- beforeTask = true;
- throw new Error('Whoops!');
- });
- this.Tasks.afterDestroy(async () => {
- afterTask = true;
- });
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await project.addTask(task);
- await project.destroy();
- expect(beforeProject).to.be.true;
- expect(afterProject).to.be.true;
- expect(beforeTask).to.be.false;
- expect(afterTask).to.be.false;
- });
- });
- });
- describe('no cascade', () => {
- beforeEach(async function () {
- this.Projects = this.sequelize.define('Project', {
- title: DataTypes.STRING,
- });
- this.Tasks = this.sequelize.define('Task', {
- title: DataTypes.STRING,
- });
- this.Projects.belongsToMany(this.Tasks, { hooks: true, through: 'project_tasks' });
- this.Tasks.belongsToMany(this.Projects, { hooks: true, through: 'project_tasks' });
- await this.sequelize.sync({ force: true });
- });
- describe('#remove', () => {
- it('with no errors', async function () {
- const beforeProject = sinon.spy();
- const afterProject = sinon.spy();
- const beforeTask = sinon.spy();
- const afterTask = sinon.spy();
- this.Projects.beforeCreate(beforeProject);
- this.Projects.afterCreate(afterProject);
- this.Tasks.beforeUpdate(beforeTask);
- this.Tasks.afterUpdate(afterTask);
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await project.addTask(task);
- await project.removeTask(task);
- expect(beforeProject).to.have.been.calledOnce;
- expect(afterProject).to.have.been.calledOnce;
- expect(beforeTask).not.to.have.been.called;
- expect(afterTask).not.to.have.been.called;
- });
- it('with errors', async function () {
- let beforeProject = false;
- let afterProject = false;
- let beforeTask = false;
- let afterTask = false;
- this.Projects.beforeCreate(async () => {
- beforeProject = true;
- });
- this.Projects.afterCreate(async () => {
- afterProject = true;
- });
- this.Tasks.beforeUpdate(async () => {
- beforeTask = true;
- throw new Error('Whoops!');
- });
- this.Tasks.afterUpdate(async () => {
- afterTask = true;
- });
- const project = await this.Projects.create({ title: 'New Project' });
- const task = await this.Tasks.create({ title: 'New Task' });
- await project.addTask(task);
- expect(beforeProject).to.be.true;
- expect(afterProject).to.be.true;
- expect(beforeTask).to.be.false;
- expect(afterTask).to.be.false;
- });
- });
- });
- });
- // NOTE: Reenable when FK constraints create table query is fixed when using hooks
- if (dialect !== 'mssql') {
- // this test makes no sense: task was destroyed by the database through CASCADE.
- // there is no way for Sequelize to call its beforeDestroy/afterDestroy
- // describe('multiple 1:M', () => {
- //
- // describe('destroy with onDelete CASCADE', () => {
- // beforeEach(async function () {
- // this.Projects = this.sequelize.define('Project', {
- // title: DataTypes.STRING,
- // });
- //
- // this.Tasks = this.sequelize.define('Task', {
- // title: DataTypes.STRING,
- // });
- //
- // this.MiniTasks = this.sequelize.define('MiniTask', {
- // mini_title: DataTypes.STRING,
- // });
- //
- // this.Projects.hasMany(this.Tasks, { foreignKey: { onDelete: 'cascade' }, hooks: true });
- // this.Projects.hasMany(this.MiniTasks, { foreignKey: { onDelete: 'cascade' }, hooks: true });
- // this.Tasks.hasMany(this.MiniTasks, { foreignKey: { onDelete: 'cascade' }, hooks: true });
- //
- // await this.sequelize.sync({ force: true });
- // });
- //
- // it('with no errors', async function () {
- // let beforeProject = false;
- // let afterProject = false;
- // let beforeTask = false;
- // let afterTask = false;
- // let beforeMiniTask = false;
- // let afterMiniTask = false;
- //
- // this.Projects.beforeCreate(async () => {
- // beforeProject = true;
- // });
- //
- // this.Projects.afterCreate(async () => {
- // afterProject = true;
- // });
- //
- // this.Tasks.beforeDestroy(async () => {
- // beforeTask = true;
- // });
- //
- // this.Tasks.afterDestroy(async () => {
- // afterTask = true;
- // });
- //
- // this.MiniTasks.beforeDestroy(async () => {
- // beforeMiniTask = true;
- // });
- //
- // this.MiniTasks.afterDestroy(async () => {
- // afterMiniTask = true;
- // });
- //
- // const [project, minitask] = await Promise.all([
- // this.Projects.create({ title: 'New Project' }),
- // this.MiniTasks.create({ mini_title: 'New MiniTask' }),
- // ]);
- //
- // await project.addMiniTask(minitask);
- // await project.destroy();
- // expect(beforeProject).to.be.true;
- // expect(afterProject).to.be.true;
- // expect(beforeTask).to.be.false;
- // expect(afterTask).to.be.false;
- // expect(beforeMiniTask).to.be.true;
- // expect(afterMiniTask).to.be.true;
- // });
- //
- // it('with errors', async function () {
- // let beforeProject = false;
- // let afterProject = false;
- // let beforeTask = false;
- // let afterTask = false;
- // let beforeMiniTask = false;
- // let afterMiniTask = false;
- //
- // this.Projects.beforeCreate(async () => {
- // beforeProject = true;
- // });
- //
- // this.Projects.afterCreate(async () => {
- // afterProject = true;
- // });
- //
- // this.Tasks.beforeDestroy(async () => {
- // beforeTask = true;
- // });
- //
- // this.Tasks.afterDestroy(async () => {
- // afterTask = true;
- // });
- //
- // this.MiniTasks.beforeDestroy(async () => {
- // beforeMiniTask = true;
- // throw new Error('Whoops!');
- // });
- //
- // this.MiniTasks.afterDestroy(async () => {
- // afterMiniTask = true;
- // });
- //
- // try {
- // const [project, minitask] = await Promise.all([
- // this.Projects.create({ title: 'New Project' }),
- // this.MiniTasks.create({ mini_title: 'New MiniTask' }),
- // ]);
- //
- // await project.addMiniTask(minitask);
- // await project.destroy();
- // } catch {
- // expect(beforeProject).to.be.true;
- // expect(afterProject).to.be.true;
- // expect(beforeTask).to.be.false;
- // expect(afterTask).to.be.false;
- // expect(beforeMiniTask).to.be.true;
- // expect(afterMiniTask).to.be.false;
- // }
- // });
- // });
- // });
- // this test makes no sense: task was destroyed by the database through CASCADE.
- // there is no way for Sequelize to call its beforeDestroy/afterDestroy
- // describe('multiple 1:M sequential hooks', () => {
- // describe('destroy with onDelete CASCADE', () => {
- // beforeEach(async function () {
- // this.Projects = this.sequelize.define('Project', {
- // title: DataTypes.STRING,
- // });
- //
- // this.Tasks = this.sequelize.define('Task', {
- // title: DataTypes.STRING,
- // });
- //
- // this.MiniTasks = this.sequelize.define('MiniTask', {
- // mini_title: DataTypes.STRING,
- // });
- //
- // this.Projects.hasMany(this.Tasks, { foreignKey: { onDelete: 'cascade' }, hooks: true });
- // this.Projects.hasMany(this.MiniTasks, { foreignKey: { onDelete: 'cascade' }, hooks: true });
- // this.Tasks.hasMany(this.MiniTasks, { foreignKey: { onDelete: 'cascade' }, hooks: true });
- //
- // await this.sequelize.sync({ force: true });
- // });
- //
- // it('with no errors', async function () {
- // let beforeProject = false;
- // let afterProject = false;
- // let beforeTask = false;
- // let afterTask = false;
- // let beforeMiniTask = false;
- // let afterMiniTask = false;
- //
- // this.Projects.beforeCreate(async () => {
- // beforeProject = true;
- // });
- //
- // this.Projects.afterCreate(async () => {
- // afterProject = true;
- // });
- //
- // this.Tasks.beforeDestroy(async () => {
- // beforeTask = true;
- // });
- //
- // this.Tasks.afterDestroy(async () => {
- // afterTask = true;
- // });
- //
- // this.MiniTasks.beforeDestroy(async () => {
- // beforeMiniTask = true;
- // });
- //
- // this.MiniTasks.afterDestroy(async () => {
- // afterMiniTask = true;
- // });
- //
- // const [project0, task, minitask] = await Promise.all([
- // this.Projects.create({ title: 'New Project' }),
- // this.Tasks.create({ title: 'New Task' }),
- // this.MiniTasks.create({ mini_title: 'New MiniTask' }),
- // ]);
- //
- // await Promise.all([
- // task.addMiniTask(minitask),
- // project0.addTask(task),
- // ]);
- //
- // const project = project0;
- // await project.destroy();
- // expect(beforeProject).to.be.true;
- // expect(afterProject).to.be.true;
- // expect(beforeTask).to.be.true;
- // expect(afterTask).to.be.true;
- // expect(beforeMiniTask).to.be.true;
- // expect(afterMiniTask).to.be.true;
- // });
- //
- // it('with errors', async function () {
- // let beforeProject = false;
- // let afterProject = false;
- // let beforeTask = false;
- // let afterTask = false;
- // let beforeMiniTask = false;
- // let afterMiniTask = false;
- // const CustomErrorText = 'Whoops!';
- //
- // this.Projects.beforeCreate(() => {
- // beforeProject = true;
- // });
- //
- // this.Projects.afterCreate(() => {
- // afterProject = true;
- // });
- //
- // this.Tasks.beforeDestroy(() => {
- // beforeTask = true;
- // throw new Error(CustomErrorText);
- // });
- //
- // this.Tasks.afterDestroy(() => {
- // afterTask = true;
- // });
- //
- // this.MiniTasks.beforeDestroy(() => {
- // beforeMiniTask = true;
- // });
- //
- // this.MiniTasks.afterDestroy(() => {
- // afterMiniTask = true;
- // });
- //
- // const [project0, task, minitask] = await Promise.all([
- // this.Projects.create({ title: 'New Project' }),
- // this.Tasks.create({ title: 'New Task' }),
- // this.MiniTasks.create({ mini_title: 'New MiniTask' }),
- // ]);
- //
- // await Promise.all([
- // task.addMiniTask(minitask),
- // project0.addTask(task),
- // ]);
- //
- // const project = project0;
- // await expect(project.destroy()).to.eventually.be.rejectedWith(CustomErrorText);
- // expect(beforeProject).to.be.true;
- // expect(afterProject).to.be.true;
- // expect(beforeTask).to.be.true;
- // expect(afterTask).to.be.false;
- // expect(beforeMiniTask).to.be.false;
- // expect(afterMiniTask).to.be.false;
- // });
- // });
- // });
- }
- });
- });
|