PerformanceSettingsForm.test.ts 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { describe, expect, it } from 'vitest'
  2. import { DatabaseFormSchema } from './PerformanceSettingsForm'
  3. describe('DatabaseFormSchema', () => {
  4. describe('percent unit', () => {
  5. it('accepts 1 (lower bound)', () => {
  6. const result = DatabaseFormSchema.safeParse({
  7. DB_MAX_POOL_SIZE: 1,
  8. DB_MAX_POOL_SIZE_UNIT: 'percent',
  9. })
  10. expect(result.success).toBe(true)
  11. })
  12. it('accepts 100 (upper bound)', () => {
  13. const result = DatabaseFormSchema.safeParse({
  14. DB_MAX_POOL_SIZE: 100,
  15. DB_MAX_POOL_SIZE_UNIT: 'percent',
  16. })
  17. expect(result.success).toBe(true)
  18. })
  19. it('accepts a mid-range value', () => {
  20. const result = DatabaseFormSchema.safeParse({
  21. DB_MAX_POOL_SIZE: 50,
  22. DB_MAX_POOL_SIZE_UNIT: 'percent',
  23. })
  24. expect(result.success).toBe(true)
  25. })
  26. it('rejects 0', () => {
  27. const result = DatabaseFormSchema.safeParse({
  28. DB_MAX_POOL_SIZE: 0,
  29. DB_MAX_POOL_SIZE_UNIT: 'percent',
  30. })
  31. expect(result.success).toBe(false)
  32. })
  33. it('rejects 101', () => {
  34. const result = DatabaseFormSchema.safeParse({
  35. DB_MAX_POOL_SIZE: 101,
  36. DB_MAX_POOL_SIZE_UNIT: 'percent',
  37. })
  38. expect(result.success).toBe(false)
  39. if (!result.success) {
  40. const issue = result.error.issues.find((i) => i.path[0] === 'DB_MAX_POOL_SIZE')
  41. expect(issue?.message).toBe('Percentage must be between 1 and 100')
  42. }
  43. })
  44. it('rejects negative values', () => {
  45. const result = DatabaseFormSchema.safeParse({
  46. DB_MAX_POOL_SIZE: -5,
  47. DB_MAX_POOL_SIZE_UNIT: 'percent',
  48. })
  49. expect(result.success).toBe(false)
  50. })
  51. it('coerces string input', () => {
  52. const result = DatabaseFormSchema.safeParse({
  53. DB_MAX_POOL_SIZE: '75',
  54. DB_MAX_POOL_SIZE_UNIT: 'percent',
  55. })
  56. expect(result.success).toBe(true)
  57. })
  58. it('rejects out-of-range string input', () => {
  59. const result = DatabaseFormSchema.safeParse({
  60. DB_MAX_POOL_SIZE: '150',
  61. DB_MAX_POOL_SIZE_UNIT: 'percent',
  62. })
  63. expect(result.success).toBe(false)
  64. })
  65. })
  66. describe('connections unit', () => {
  67. it('accepts 1 (min)', () => {
  68. const result = DatabaseFormSchema.safeParse({
  69. DB_MAX_POOL_SIZE: 1,
  70. DB_MAX_POOL_SIZE_UNIT: 'connections',
  71. })
  72. expect(result.success).toBe(true)
  73. })
  74. it('accepts values above 100 (no upper schema bound for absolute)', () => {
  75. const result = DatabaseFormSchema.safeParse({
  76. DB_MAX_POOL_SIZE: 500,
  77. DB_MAX_POOL_SIZE_UNIT: 'connections',
  78. })
  79. expect(result.success).toBe(true)
  80. })
  81. it('rejects 0', () => {
  82. const result = DatabaseFormSchema.safeParse({
  83. DB_MAX_POOL_SIZE: 0,
  84. DB_MAX_POOL_SIZE_UNIT: 'connections',
  85. })
  86. expect(result.success).toBe(false)
  87. })
  88. })
  89. describe('unit enum', () => {
  90. it('rejects unknown unit values', () => {
  91. const result = DatabaseFormSchema.safeParse({
  92. DB_MAX_POOL_SIZE: 10,
  93. DB_MAX_POOL_SIZE_UNIT: 'bytes',
  94. })
  95. expect(result.success).toBe(false)
  96. })
  97. })
  98. })