select.test.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import { DataTypes, literal } from '@sequelize/core';
  2. import { expect } from 'chai';
  3. import { beforeAll2, getTestDialect, sequelize, setResetMode } from '../support';
  4. const dialect = getTestDialect();
  5. const supportedByDialect = ['postgres'].includes(dialect);
  6. describe('QueryInterface#select', () => {
  7. setResetMode('truncate');
  8. const qi = sequelize.queryInterface;
  9. const vars = beforeAll2(async () => {
  10. const User = sequelize.define(
  11. 'user',
  12. {
  13. name: { type: DataTypes.TEXT },
  14. },
  15. { timestamps: false },
  16. );
  17. await User.sync({ force: true });
  18. return { User };
  19. });
  20. describe('limit/offset', () => {
  21. beforeEach(async () => {
  22. await vars.User.bulkCreate([{ name: 'Abraham' }, { name: 'John' }, { name: 'Jane' }]);
  23. });
  24. it('selects only the first two records', async () => {
  25. const result: Array<Record<string, any>> = await qi.select(vars.User, vars.User.table, {
  26. limit: 2,
  27. offset: 0,
  28. });
  29. expect(result.length).to.equal(2);
  30. expect(result[0].name).to.equal('Abraham');
  31. expect(result[1].name).to.equal('John');
  32. });
  33. it('selects only the last two records', async () => {
  34. const result: Array<Record<string, any>> = await qi.select(vars.User, vars.User.table, {
  35. limit: 2,
  36. offset: 1,
  37. });
  38. expect(result.length).to.equal(2);
  39. expect(result[0].name).to.equal('John');
  40. expect(result[1].name).to.equal('Jane');
  41. });
  42. it('supports literals with replacements', async () => {
  43. const result: Array<Record<string, any>> = await qi.select(vars.User, vars.User.table, {
  44. limit: literal(':limit'),
  45. offset: literal(':offset'),
  46. replacements: {
  47. limit: 2,
  48. offset: 1,
  49. },
  50. });
  51. expect(result.length).to.equal(2);
  52. expect(result[0].name).to.equal('John');
  53. expect(result[1].name).to.equal('Jane');
  54. });
  55. });
  56. if (supportedByDialect) {
  57. it('fetches records with alias minification', async () => {
  58. await vars.User.create({ name: 'Sourav' });
  59. const result: Array<Record<string, any>> = await qi.select(vars.User, vars.User.table, {
  60. minifyAliases: true,
  61. where: { name: 'Sourav' },
  62. });
  63. expect(result[0].name).to.equal('Sourav');
  64. });
  65. }
  66. });