http-url.test.ts 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import { describe, expect, it } from 'vitest'
  2. import { httpEndpointUrlSchema, isValidHttpEndpointUrl } from './http-url'
  3. const schema = httpEndpointUrlSchema({
  4. requiredMessage: 'required',
  5. invalidMessage: 'invalid',
  6. prefixMessage: 'prefix',
  7. })
  8. describe('isValidHttpEndpointUrl', () => {
  9. it('accepts valid http and https endpoints', () => {
  10. expect(isValidHttpEndpointUrl('https://api.supabase.com/webhooks')).toBe(true)
  11. expect(isValidHttpEndpointUrl('http://localhost:3000/hooks')).toBe(true)
  12. expect(isValidHttpEndpointUrl('https://127.0.0.1:4318/v1/logs')).toBe(true)
  13. expect(isValidHttpEndpointUrl('https://[::1]:4318/v1/logs')).toBe(true)
  14. })
  15. it('rejects invalid endpoint URLs', () => {
  16. expect(isValidHttpEndpointUrl('https://webhook')).toBe(false)
  17. expect(isValidHttpEndpointUrl('ftp://api.supabase.com/webhooks')).toBe(false)
  18. expect(isValidHttpEndpointUrl('not a url')).toBe(false)
  19. })
  20. })
  21. describe('httpEndpointUrlSchema', () => {
  22. it('rejects empty values', () => {
  23. const result = schema.safeParse('')
  24. expect(result.success).toBe(false)
  25. if (!result.success) {
  26. expect(result.error.issues[0].message).toBe('required')
  27. }
  28. })
  29. it('rejects URLs without an http or https prefix', () => {
  30. const result = schema.safeParse('api.supabase.com/webhooks')
  31. expect(result.success).toBe(false)
  32. if (!result.success) {
  33. expect(result.error.issues[0].message).toBe('prefix')
  34. }
  35. })
  36. it('rejects incomplete hostnames', () => {
  37. const result = schema.safeParse('https://webhook')
  38. expect(result.success).toBe(false)
  39. if (!result.success) {
  40. expect(result.error.issues[0].message).toBe('invalid')
  41. }
  42. })
  43. it('accepts valid endpoints after trimming', () => {
  44. const result = schema.safeParse(' https://api.supabase.com/webhooks ')
  45. expect(result.success).toBe(true)
  46. if (result.success) {
  47. expect(result.data).toBe('https://api.supabase.com/webhooks')
  48. }
  49. })
  50. })