Reports.constants.test.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import { describe, expect, it } from 'vitest'
  2. import { generateRegexpWhere } from './Reports.constants'
  3. import type { ReportFilterItem } from './Reports.types'
  4. describe('generateRegexpWhere', () => {
  5. it('should return empty string when no filters provided', () => {
  6. const result = generateRegexpWhere([])
  7. expect(result).toBe('')
  8. })
  9. it('should generate WHERE clause for single filter', () => {
  10. const filters: ReportFilterItem[] = [
  11. {
  12. key: 'request.path',
  13. value: '/api/users',
  14. compare: 'is',
  15. },
  16. ]
  17. const result = generateRegexpWhere(filters, true)
  18. expect(result).toBe("WHERE request.path = '/api/users'")
  19. })
  20. it('should generate AND clause for single filter with prepend=false', () => {
  21. const filters: ReportFilterItem[] = [
  22. {
  23. key: 'request.path',
  24. value: '/api/users',
  25. compare: 'is',
  26. },
  27. ]
  28. const result = generateRegexpWhere(filters, false)
  29. expect(result).toBe("AND request.path = '/api/users'")
  30. })
  31. it('should handle different comparison operators', () => {
  32. const filters: ReportFilterItem[] = [
  33. {
  34. key: 'request.path',
  35. value: '/api/*',
  36. compare: 'matches',
  37. },
  38. {
  39. key: 'response.status_code',
  40. value: 404,
  41. compare: 'is',
  42. },
  43. ]
  44. const result = generateRegexpWhere(filters, true)
  45. expect(result).toBe(
  46. "WHERE REGEXP_CONTAINS(request.path, '/api/*') AND response.status_code = 404"
  47. )
  48. })
  49. it('should handle values with quotes', () => {
  50. const filters: ReportFilterItem[] = [
  51. {
  52. key: 'request.path',
  53. value: '"/api/users"',
  54. compare: 'is',
  55. },
  56. ]
  57. const result = generateRegexpWhere(filters, true)
  58. expect(result).toBe(`WHERE request.path = "/api/users"`)
  59. })
  60. it('should handle values without quotes', () => {
  61. const filters: ReportFilterItem[] = [
  62. {
  63. key: 'request.path',
  64. value: '/api/users',
  65. compare: 'is',
  66. },
  67. ]
  68. const result = generateRegexpWhere(filters, true)
  69. expect(result).toBe("WHERE request.path = '/api/users'")
  70. })
  71. it('should handle values with quotes and lowercase', () => {
  72. const filters: ReportFilterItem[] = [
  73. {
  74. key: 'request.path',
  75. value: '"/Api/Users"',
  76. compare: 'is',
  77. },
  78. ]
  79. const result = generateRegexpWhere(filters, true)
  80. expect(result).toBe(`WHERE request.path = "/api/users"`)
  81. })
  82. it('should handle numbers', () => {
  83. const filters: ReportFilterItem[] = [
  84. {
  85. key: 'request.status_code',
  86. value: 200,
  87. compare: 'is',
  88. },
  89. ]
  90. const result = generateRegexpWhere(filters, true)
  91. expect(result).toBe(`WHERE request.status_code = 200`)
  92. })
  93. })