truncate-table.test.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import type {
  2. CreationOptional,
  3. InferAttributes,
  4. InferCreationAttributes,
  5. NonAttribute,
  6. } from '@sequelize/core';
  7. import { DataTypes, Model } from '@sequelize/core';
  8. import {
  9. Attribute,
  10. AutoIncrement,
  11. BelongsTo,
  12. NotNull,
  13. PrimaryKey,
  14. } from '@sequelize/core/decorators-legacy';
  15. import { expect } from 'chai';
  16. import { beforeAll2, sequelize, setResetMode } from '../support';
  17. const queryInterface = sequelize.queryInterface;
  18. describe('QueryInterface#truncate', () => {
  19. setResetMode('truncate');
  20. const vars = beforeAll2(async () => {
  21. class Level extends Model<InferAttributes<Level>, InferCreationAttributes<Level>> {
  22. @Attribute(DataTypes.INTEGER)
  23. @PrimaryKey
  24. @AutoIncrement
  25. declare id: CreationOptional<number>;
  26. @Attribute(DataTypes.STRING)
  27. @NotNull
  28. declare name: string;
  29. }
  30. sequelize.addModels([Level]);
  31. await sequelize.sync({ force: true });
  32. return { Level };
  33. });
  34. describe('Truncate', () => {
  35. beforeEach(async () => {
  36. await vars.Level.bulkCreate([{ name: 'level1' }, { name: 'level2' }, { name: 'level3' }]);
  37. });
  38. it('should truncate the table', async () => {
  39. await queryInterface.truncate(vars.Level);
  40. const count = await vars.Level.count();
  41. expect(count).to.equal(0);
  42. });
  43. if (sequelize.dialect.supports.truncate.restartIdentity) {
  44. it('should truncate the table with restart identity', async () => {
  45. await queryInterface.truncate(vars.Level, { restartIdentity: true });
  46. const count = await vars.Level.count();
  47. expect(count).to.equal(0);
  48. await vars.Level.bulkCreate([{ name: 'level1' }, { name: 'level2' }, { name: 'level3' }]);
  49. const [level1, level2, level3, ...rest] = await vars.Level.findAll();
  50. expect(rest).to.have.length(0);
  51. expect(level1.id).to.equal(1);
  52. expect(level2.id).to.equal(2);
  53. expect(level3.id).to.equal(3);
  54. });
  55. }
  56. if (sequelize.dialect.supports.truncate.cascade) {
  57. it('should truncate the table with cascade', async () => {
  58. class Actor extends Model<InferAttributes<Actor>, InferCreationAttributes<Actor>> {
  59. @Attribute(DataTypes.INTEGER)
  60. @PrimaryKey
  61. @AutoIncrement
  62. declare id: CreationOptional<number>;
  63. @Attribute(DataTypes.STRING)
  64. @NotNull
  65. declare name: string;
  66. @Attribute(DataTypes.INTEGER)
  67. @NotNull
  68. declare levelId: number;
  69. @BelongsTo(() => vars.Level, 'levelId')
  70. declare level: NonAttribute<typeof vars.Level>;
  71. }
  72. sequelize.addModels([Actor]);
  73. await sequelize.sync();
  74. await Actor.bulkCreate([
  75. { name: 'actor1', levelId: 1 },
  76. { name: 'actor2', levelId: 2 },
  77. { name: 'actor3', levelId: 3 },
  78. ]);
  79. await queryInterface.truncate(vars.Level, { cascade: true });
  80. const levels = await vars.Level.count();
  81. const actors = await Actor.count();
  82. expect(levels).to.equal(0);
  83. expect(actors).to.equal(0);
  84. });
  85. }
  86. });
  87. });