123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- 'use strict';
- const chai = require('chai');
- const { DataTypes } = require('@sequelize/core');
- const expect = chai.expect;
- const Support = require('../support');
- const dialect = Support.getTestDialect();
- const current = Support.sequelize;
- if (current.dialect.supports.tmpTableTrigger) {
- describe(Support.getTestDialectTeaser('Model'), () => {
- describe('trigger', () => {
- let User;
- let triggerQuery =
- 'create trigger User_ChangeTracking on [users] for insert,update, delete \n' +
- 'as\n' +
- 'SET NOCOUNT ON\n' +
- 'if exists(select 1 from inserted)\n' +
- 'begin\n' +
- 'select * from inserted\n' +
- 'end\n' +
- 'if exists(select 1 from deleted)\n' +
- 'begin\n' +
- 'select * from deleted\n' +
- 'end\n';
- if (dialect === 'db2') {
- triggerQuery =
- 'CREATE OR REPLACE TRIGGER User_ChangeTracking\n' +
- 'AFTER INSERT ON "users"\n' +
- 'FOR EACH STATEMENT\n' +
- 'BEGIN ATOMIC\n' +
- ' SELECT * FROM "users";\n' +
- 'END';
- }
- beforeEach(async function () {
- User = this.sequelize.define(
- 'user',
- {
- username: {
- type: DataTypes.STRING,
- field: 'user_name',
- },
- },
- {
- hasTrigger: true,
- },
- );
- await User.sync({ force: true });
- await this.sequelize.query(triggerQuery, { type: this.sequelize.QueryTypes.RAW });
- });
- it('should return output rows after insert', async () => {
- await User.create({
- username: 'triggertest',
- });
- await expect(User.findOne({ username: 'triggertest' }))
- .to.eventually.have.property('username')
- .which.equals('triggertest');
- });
- it('should return output rows after instance update', async () => {
- const user = await User.create({
- username: 'triggertest',
- });
- user.username = 'usernamechanged';
- await user.save();
- await expect(User.findOne({ username: 'usernamechanged' }))
- .to.eventually.have.property('username')
- .which.equals('usernamechanged');
- });
- it('should return output rows after Model update', async () => {
- const user = await User.create({
- username: 'triggertest',
- });
- await User.update(
- {
- username: 'usernamechanged',
- },
- {
- where: {
- id: user.get('id'),
- },
- },
- );
- await expect(User.findOne({ username: 'usernamechanged' }))
- .to.eventually.have.property('username')
- .which.equals('usernamechanged');
- });
- it('should successfully delete with a trigger on the table', async () => {
- const user = await User.create({
- username: 'triggertest',
- });
- await user.destroy();
- await expect(User.findOne({ username: 'triggertest' })).to.eventually.be.null;
- });
- });
- });
- }
|