subdomainValidation.test.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import { describe, expect, test, vi, beforeEach } from 'vitest'
  2. import SubdomainValidation from '~/services/validation/subdomainValidation'
  3. import type ApiRequestService from '~/services/data/apiRequestService'
  4. import type { AssociativeArray } from '~/types/data'
  5. let subdomainValidation: SubdomainValidation
  6. let apiRequestService: ApiRequestService
  7. beforeEach(() => {
  8. // @ts-ignore
  9. apiRequestService = vi.fn() as ApiRequestService
  10. subdomainValidation = new SubdomainValidation(apiRequestService)
  11. })
  12. describe('isValid', () => {
  13. test('simple cases', () => {
  14. expect(SubdomainValidation.isValid('abcd')).toBeTruthy()
  15. expect(SubdomainValidation.isValid('abc-def')).toBeTruthy()
  16. expect(SubdomainValidation.isValid('abc-123')).toBeTruthy()
  17. expect(
  18. SubdomainValidation.isValid('abcdefghijklmnopqrstuvwxyz0123456789'),
  19. ).toBeTruthy()
  20. expect(
  21. SubdomainValidation.isValid(
  22. '0123456789-0123456789-0123456789-0123456789-0123456789-0123456789-0123456789',
  23. ),
  24. ).toBeFalsy() // Too long
  25. expect(SubdomainValidation.isValid('a')).toBeFalsy()
  26. expect(SubdomainValidation.isValid('abc_def')).toBeFalsy()
  27. expect(SubdomainValidation.isValid('abc%')).toBeFalsy()
  28. expect(SubdomainValidation.isValid('ab/')).toBeFalsy()
  29. expect(SubdomainValidation.isValid('ab cd')).toBeFalsy()
  30. expect(SubdomainValidation.isValid('-abcd')).toBeFalsy()
  31. expect(SubdomainValidation.isValid('abcd-')).toBeFalsy()
  32. })
  33. })
  34. describe('isAvailable', () => {
  35. test('is available', async () => {
  36. apiRequestService.get = vi.fn(
  37. async (url: string, query: AssociativeArray) => {
  38. if (
  39. url !== '/api/subdomains/is_available' ||
  40. !Object.prototype.hasOwnProperty.call(query, 'subdomain') ||
  41. query.subdomain !== 'abc'
  42. ) {
  43. throw new Error('Invalid arguments')
  44. }
  45. // @ts-ignore
  46. return { available: true } as Response
  47. },
  48. )
  49. expect(await subdomainValidation.isAvailable('abc')).toBeTruthy()
  50. })
  51. test('is not available', async () => {
  52. apiRequestService.get = vi.fn(
  53. async (url: string, query: AssociativeArray) => {
  54. if (
  55. url !== '/api/subdomains/is_available' ||
  56. !Object.prototype.hasOwnProperty.call(query, 'subdomain') ||
  57. query.subdomain !== 'abc'
  58. ) {
  59. throw new Error('Invalid arguments')
  60. }
  61. // @ts-ignore
  62. return { available: false } as Response
  63. },
  64. )
  65. expect(await subdomainValidation.isAvailable('abc')).toBeFalsy()
  66. })
  67. })