delete.test.ts 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import type { CreationOptional, InferAttributes, InferCreationAttributes } from '@sequelize/core';
  2. import { DataTypes, Model } from '@sequelize/core';
  3. import {
  4. Attribute,
  5. AutoIncrement,
  6. NotNull,
  7. PrimaryKey,
  8. Table,
  9. } from '@sequelize/core/decorators-legacy';
  10. import { expect } from 'chai';
  11. import { beforeAll2, sequelize, setResetMode } from '../support';
  12. const queryInterface = sequelize.queryInterface;
  13. describe('QueryInterface#delete', () => {
  14. setResetMode('truncate');
  15. const vars = beforeAll2(async () => {
  16. @Table({ timestamps: false })
  17. class Level extends Model<InferAttributes<Level>, InferCreationAttributes<Level>> {
  18. @Attribute(DataTypes.INTEGER)
  19. @PrimaryKey
  20. @AutoIncrement
  21. declare id: CreationOptional<number>;
  22. @Attribute(DataTypes.STRING)
  23. @NotNull
  24. declare name: string;
  25. @Attribute(DataTypes.INTEGER)
  26. @NotNull
  27. declare value: number;
  28. }
  29. sequelize.addModels([Level]);
  30. await sequelize.sync({ force: true });
  31. return { Level };
  32. });
  33. describe('Delete', () => {
  34. beforeEach(async () => {
  35. await vars.Level.bulkCreate([
  36. { name: 'level1', value: 5 },
  37. { name: 'level2', value: 10 },
  38. { name: 'level3', value: 10 },
  39. ]);
  40. });
  41. it('should delete a row', async () => {
  42. const beforeDelete = await vars.Level.findAll({ raw: true, where: { name: 'level1' } });
  43. expect(beforeDelete.map(({ name, value }) => ({ name, value }))).to.deep.equal([
  44. { name: 'level1', value: 5 },
  45. ]);
  46. const count = await queryInterface.bulkDelete(vars.Level, { where: { name: 'level1' } });
  47. expect(count).to.equal(1);
  48. const afterDelete = await vars.Level.findAll({ raw: true, where: { name: 'level1' } });
  49. expect(afterDelete).to.deep.equal([]);
  50. });
  51. it('should delete multiple rows', async () => {
  52. const beforeDelete = await vars.Level.findAll({ raw: true });
  53. expect(beforeDelete.map(({ name, value }) => ({ name, value }))).to.deep.equal([
  54. { name: 'level1', value: 5 },
  55. { name: 'level2', value: 10 },
  56. { name: 'level3', value: 10 },
  57. ]);
  58. const count = await queryInterface.bulkDelete(vars.Level, { where: { value: 10 } });
  59. expect(count).to.equal(2);
  60. const afterDelete = await vars.Level.findAll({ raw: true });
  61. expect(afterDelete.map(({ name, value }) => ({ name, value }))).to.deep.equal([
  62. { name: 'level1', value: 5 },
  63. ]);
  64. });
  65. it('should delete all rows', async () => {
  66. const beforeDelete = await vars.Level.findAll({ raw: true });
  67. expect(beforeDelete.map(({ name, value }) => ({ name, value }))).to.deep.equal([
  68. { name: 'level1', value: 5 },
  69. { name: 'level2', value: 10 },
  70. { name: 'level3', value: 10 },
  71. ]);
  72. const count = await queryInterface.bulkDelete(vars.Level, { where: {} });
  73. expect(count).to.equal(3);
  74. const afterDelete = await vars.Level.findAll({ raw: true });
  75. expect(afterDelete).to.deep.equal([]);
  76. });
  77. it('should limit the number of deleted rows', async () => {
  78. const beforeDelete = await vars.Level.findAll({ raw: true });
  79. expect(beforeDelete.map(({ name, value }) => ({ name, value }))).to.deep.equal([
  80. { name: 'level1', value: 5 },
  81. { name: 'level2', value: 10 },
  82. { name: 'level3', value: 10 },
  83. ]);
  84. const count = await queryInterface.bulkDelete(vars.Level, { where: {}, limit: 1 });
  85. expect(count).to.equal(1);
  86. const afterDelete = await vars.Level.findAll({ raw: true });
  87. expect(afterDelete.map(({ name, value }) => ({ name, value }))).to.deep.equal([
  88. { name: 'level2', value: 10 },
  89. { name: 'level3', value: 10 },
  90. ]);
  91. });
  92. });
  93. describe('Bulk Delete', () => {
  94. beforeEach(async () => {
  95. await vars.Level.bulkCreate([
  96. { name: 'level1', value: 5 },
  97. { name: 'level2', value: 10 },
  98. { name: 'level3', value: 10 },
  99. ]);
  100. });
  101. it('should bulk delete rows', async () => {
  102. const beforeDelete = await vars.Level.findAll({ raw: true });
  103. expect(beforeDelete.map(({ name, value }) => ({ name, value }))).to.deep.equal([
  104. { name: 'level1', value: 5 },
  105. { name: 'level2', value: 10 },
  106. { name: 'level3', value: 10 },
  107. ]);
  108. const count = await queryInterface.bulkDelete(vars.Level);
  109. expect(count).to.equal(3);
  110. const afterDelete = await vars.Level.findAll({ raw: true });
  111. expect(afterDelete).to.deep.equal([]);
  112. });
  113. });
  114. });