decrement.test.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { DataTypes } from '@sequelize/core';
  2. import { expect } from 'chai';
  3. import sinon from 'sinon';
  4. import { beforeAll2, expectsql, sequelize } from '../../support';
  5. describe('QueryInterface#decrement', () => {
  6. const vars = beforeAll2(() => {
  7. const User = sequelize.define(
  8. 'User',
  9. {
  10. firstName: DataTypes.STRING,
  11. },
  12. { timestamps: false },
  13. );
  14. return { User };
  15. });
  16. afterEach(() => {
  17. sinon.restore();
  18. });
  19. // you'll find more replacement tests in query-generator tests
  20. it('does not parse replacements outside of raw sql', async () => {
  21. const { User } = vars;
  22. const stub = sinon.stub(sequelize, 'queryRaw');
  23. await sequelize.queryInterface.decrement(
  24. User,
  25. User.table,
  26. // where
  27. { firstName: ':firstName' },
  28. // incrementAmountsByField
  29. { age: ':age' },
  30. // extraAttributesToBeUpdated
  31. { name: ':name' },
  32. // options
  33. {
  34. returning: [':data'],
  35. replacements: {
  36. age: 1,
  37. id: 2,
  38. data: 3,
  39. },
  40. },
  41. );
  42. expect(stub.callCount).to.eq(1);
  43. const firstCall = stub.getCall(0);
  44. expectsql(firstCall.args[0], {
  45. default: `UPDATE [Users] SET [age]=[age]- ':age',[name]=':name' WHERE [firstName] = ':firstName'`,
  46. mssql: `UPDATE [Users] SET [age]=[age]- N':age',[name]=N':name' OUTPUT INSERTED.[:data] WHERE [firstName] = N':firstName'`,
  47. sqlite3:
  48. "UPDATE `Users` SET `age`=`age`- ':age',`name`=':name' WHERE `firstName` = ':firstName' RETURNING `:data`",
  49. postgres: `UPDATE "Users" SET "age"="age"- ':age',"name"=':name' WHERE "firstName" = ':firstName' RETURNING ":data"`,
  50. });
  51. expect(firstCall.args[1]?.bind).to.be.undefined;
  52. });
  53. });