query.test.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { describe, test, vi, expect, beforeEach, afterEach } from 'vitest'
  2. import type { Query as PiniaOrmQuery } from 'pinia-orm'
  3. import { ref } from 'vue'
  4. import Query from '~/services/data/Query'
  5. import type { ApiFilter } from '~/types/data'
  6. import type ApiResource from '~/models/ApiResource'
  7. import PageFilter from '~/services/data/Filters/PageFilter'
  8. import EqualFilter from '~/services/data/Filters/EqualFilter'
  9. import OrderBy from '~/services/data/Filters/OrderBy'
  10. class TestableQuery extends Query {
  11. public getFilters() {
  12. return this.filters
  13. }
  14. }
  15. describe('constructor', () => {
  16. test('simple call', () => {
  17. // @ts-ignore
  18. const filter1 = vi.fn() as ApiFilter
  19. // @ts-ignore
  20. const filter2 = vi.fn() as ApiFilter
  21. const query = new TestableQuery(filter1, filter2)
  22. expect(query.getFilters()).toEqual([filter1, filter2])
  23. })
  24. })
  25. describe('add', () => {
  26. test('simple call', () => {
  27. // @ts-ignore
  28. const filter1 = vi.fn() as ApiFilter
  29. // @ts-ignore
  30. const filter2 = vi.fn() as ApiFilter
  31. const query = new TestableQuery(filter1)
  32. expect(query.getFilters()).toEqual([filter1])
  33. const result = query.add(filter2)
  34. expect(query.getFilters()).toEqual([filter1, filter2])
  35. expect(result).toEqual(query)
  36. })
  37. })
  38. describe('getUrlQuery', () => {
  39. test('simple call', () => {
  40. // @ts-ignore
  41. const filter1 = vi.fn() as ApiFilter
  42. // @ts-ignore
  43. const filter2 = vi.fn() as ApiFilter
  44. // @ts-ignore
  45. const filter3 = vi.fn() as ApiFilter
  46. const query = new TestableQuery(filter1, filter2, filter3)
  47. filter1.getApiQueryPart = vi.fn(() => 'foo=1')
  48. filter2.getApiQueryPart = vi.fn(() => '')
  49. filter3.getApiQueryPart = vi.fn(() => 'bar=2')
  50. const result = query.getUrlQuery()
  51. expect(result).toEqual('foo=1&bar=2')
  52. })
  53. })
  54. describe('applyToPiniaOrmQuery', () => {
  55. test('simple call', () => {
  56. const filter1 = new EqualFilter('a', 1)
  57. const filter2 = new EqualFilter('a', 1)
  58. const orderBy = new OrderBy('a')
  59. const pageFilter = new PageFilter(ref(1), ref(10))
  60. // @ts-ignore
  61. const piniaOrmQuery1 = vi.fn() as PiniaOrmQuery<ApiResource>
  62. // @ts-ignore
  63. const piniaOrmQuery2 = vi.fn() as PiniaOrmQuery<ApiResource>
  64. // @ts-ignore
  65. const piniaOrmQuery3 = vi.fn() as PiniaOrmQuery<ApiResource>
  66. // @ts-ignore
  67. const piniaOrmQuery4 = vi.fn() as PiniaOrmQuery<ApiResource>
  68. // @ts-ignore
  69. const piniaOrmQuery5 = vi.fn() as PiniaOrmQuery<ApiResource>
  70. const query = new TestableQuery(orderBy, filter1, pageFilter, filter2)
  71. filter1.applyToPiniaOrmQuery = vi.fn((query) => piniaOrmQuery2)
  72. filter2.applyToPiniaOrmQuery = vi.fn((query) => piniaOrmQuery3)
  73. orderBy.applyToPiniaOrmQuery = vi.fn((query) => piniaOrmQuery4)
  74. pageFilter.applyToPiniaOrmQuery = vi.fn((query) => piniaOrmQuery5)
  75. const result = query.applyToPiniaOrmQuery(piniaOrmQuery1)
  76. expect(filter1.applyToPiniaOrmQuery).toHaveBeenCalledWith(piniaOrmQuery1)
  77. expect(filter2.applyToPiniaOrmQuery).toHaveBeenCalledWith(piniaOrmQuery2)
  78. expect(orderBy.applyToPiniaOrmQuery).toHaveBeenCalledWith(piniaOrmQuery3)
  79. expect(pageFilter.applyToPiniaOrmQuery).toHaveBeenCalledWith(piniaOrmQuery4)
  80. expect(result).toEqual(piniaOrmQuery5)
  81. })
  82. })