trigger.test.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. 'use strict';
  2. const chai = require('chai');
  3. const { DataTypes } = require('@sequelize/core');
  4. const expect = chai.expect;
  5. const Support = require('../support');
  6. const dialect = Support.getTestDialect();
  7. const current = Support.sequelize;
  8. if (current.dialect.supports.tmpTableTrigger) {
  9. describe(Support.getTestDialectTeaser('Model'), () => {
  10. describe('trigger', () => {
  11. let User;
  12. let triggerQuery =
  13. 'create trigger User_ChangeTracking on [users] for insert,update, delete \n' +
  14. 'as\n' +
  15. 'SET NOCOUNT ON\n' +
  16. 'if exists(select 1 from inserted)\n' +
  17. 'begin\n' +
  18. 'select * from inserted\n' +
  19. 'end\n' +
  20. 'if exists(select 1 from deleted)\n' +
  21. 'begin\n' +
  22. 'select * from deleted\n' +
  23. 'end\n';
  24. if (dialect === 'db2') {
  25. triggerQuery =
  26. 'CREATE OR REPLACE TRIGGER User_ChangeTracking\n' +
  27. 'AFTER INSERT ON "users"\n' +
  28. 'FOR EACH STATEMENT\n' +
  29. 'BEGIN ATOMIC\n' +
  30. ' SELECT * FROM "users";\n' +
  31. 'END';
  32. }
  33. beforeEach(async function () {
  34. User = this.sequelize.define(
  35. 'user',
  36. {
  37. username: {
  38. type: DataTypes.STRING,
  39. field: 'user_name',
  40. },
  41. },
  42. {
  43. hasTrigger: true,
  44. },
  45. );
  46. await User.sync({ force: true });
  47. await this.sequelize.query(triggerQuery, { type: this.sequelize.QueryTypes.RAW });
  48. });
  49. it('should return output rows after insert', async () => {
  50. await User.create({
  51. username: 'triggertest',
  52. });
  53. await expect(User.findOne({ username: 'triggertest' }))
  54. .to.eventually.have.property('username')
  55. .which.equals('triggertest');
  56. });
  57. it('should return output rows after instance update', async () => {
  58. const user = await User.create({
  59. username: 'triggertest',
  60. });
  61. user.username = 'usernamechanged';
  62. await user.save();
  63. await expect(User.findOne({ username: 'usernamechanged' }))
  64. .to.eventually.have.property('username')
  65. .which.equals('usernamechanged');
  66. });
  67. it('should return output rows after Model update', async () => {
  68. const user = await User.create({
  69. username: 'triggertest',
  70. });
  71. await User.update(
  72. {
  73. username: 'usernamechanged',
  74. },
  75. {
  76. where: {
  77. id: user.get('id'),
  78. },
  79. },
  80. );
  81. await expect(User.findOne({ username: 'usernamechanged' }))
  82. .to.eventually.have.property('username')
  83. .which.equals('usernamechanged');
  84. });
  85. it('should successfully delete with a trigger on the table', async () => {
  86. const user = await User.create({
  87. username: 'triggertest',
  88. });
  89. await user.destroy();
  90. await expect(User.findOne({ username: 'triggertest' })).to.eventually.be.null;
  91. });
  92. });
  93. });
  94. }