i18nUtils.test.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import { describe, test, it, expect } from 'vitest'
  2. import {createI18n, VueI18n} from 'vue-i18n'
  3. import I18nUtils from "~/services/utils/i18nUtils";
  4. import { config } from "@vue/test-utils"
  5. import {EnumChoices} from "~/types/interfaces";
  6. // config.global.mocks = {
  7. // $t: (tKey: string) => tKey // just return translation key
  8. // };
  9. // const i18n = createI18n({})
  10. // config.global.plugins = [i18n]
  11. //
  12. // config.global.mocks["t"] = (msg: string) => 'test'
  13. describe('translateEnum', () => {
  14. test('with simple enum', () => {
  15. // @ts-ignore
  16. const i18n = vi.fn() as VueI18n;
  17. i18n.t = vi.fn((msg: string) => msg.replace('This is the letter', 'C\'est la lettre'))
  18. // @ts-ignore
  19. const i18nUtils = new I18nUtils(i18n)
  20. const input: EnumChoices = [
  21. { value: 'Alpha', label: 'This is the letter A' },
  22. { value: 'Beta', label: 'This is the letter B' },
  23. { value: 'Epsilon', label: 'This is the letter E' },
  24. ]
  25. const expected: EnumChoices = [
  26. { value: 'Alpha', label: 'C\'est la lettre A' },
  27. { value: 'Beta', label: 'C\'est la lettre B' },
  28. { value: 'Epsilon', label: 'C\'est la lettre E' },
  29. ]
  30. expect(i18nUtils.translateEnum(input)).toEqual(expected)
  31. })
  32. test('with simple enum and sorting enabled', () => {
  33. // @ts-ignore
  34. const i18n = vi.fn() as VueI18n;
  35. i18n.t = vi.fn((msg: string) => msg.replace('This is the letter', 'C\'est la lettre'))
  36. // @ts-ignore
  37. const i18nUtils = new I18nUtils(i18n)
  38. const input: EnumChoices = [
  39. { value: 'Epsilon', label: 'This is the letter E' },
  40. { value: 'Alpha', label: 'This is the letter A' },
  41. { value: 'Beta', label: 'This is the letter B' },
  42. ]
  43. const expected: EnumChoices = [
  44. { value: 'Alpha', label: 'C\'est la lettre A' },
  45. { value: 'Beta', label: 'C\'est la lettre B' },
  46. { value: 'Epsilon', label: 'C\'est la lettre E' },
  47. ]
  48. expect(i18nUtils.translateEnum(input, true)).toEqual(expected)
  49. })
  50. })
  51. describe('formatPhoneNumber', () => {
  52. test('with valid international phone number', () => {
  53. // @ts-ignore
  54. const i18nUtils = new I18nUtils(i18n)
  55. expect(i18nUtils.formatPhoneNumber('+33611223344')).toEqual('06 11 22 33 44')
  56. })
  57. test('with valid non-formatted phone number', () => {
  58. // @ts-ignore
  59. const i18nUtils = new I18nUtils(i18n)
  60. expect(i18nUtils.formatPhoneNumber('0611223344', 'FR')).toEqual('06 11 22 33 44')
  61. })
  62. test('with empty string', () => {
  63. // @ts-ignore
  64. const i18nUtils = new I18nUtils(i18n)
  65. expect(() => i18nUtils.formatPhoneNumber('', 'FR')).toThrowError('NOT_A_NUMBER')
  66. })
  67. test('with invalid string', () => {
  68. // @ts-ignore
  69. const i18nUtils = new I18nUtils(i18n)
  70. expect(() => i18nUtils.formatPhoneNumber('abcd', 'FR')).toThrowError('NOT_A_NUMBER')
  71. })
  72. })