extractPhoneContext.test.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import parsePhoneNumber_ from '../parsePhoneNumber.js'
  2. import PhoneNumber from '../PhoneNumber.js'
  3. import metadata from '../../metadata.min.json' assert { type: 'json' }
  4. function parsePhoneNumber(...parameters) {
  5. parameters.push(metadata)
  6. return parsePhoneNumber_.apply(this, parameters)
  7. }
  8. describe('extractPhoneContext', function() {
  9. it('should parse RFC 3966 phone number URIs', function() {
  10. // context = ";phone-context=" descriptor
  11. // descriptor = domainname / global-number-digits
  12. const NZ_NUMBER = new PhoneNumber('64', '33316005', metadata)
  13. // Valid global-phone-digits
  14. expectPhoneNumbersToBeEqual(
  15. parsePhoneNumber('tel:033316005;phone-context=+64'),
  16. NZ_NUMBER
  17. )
  18. expectPhoneNumbersToBeEqual(
  19. parsePhoneNumber('tel:033316005;phone-context=+64;{this isn\'t part of phone-context anymore!}'),
  20. NZ_NUMBER
  21. )
  22. const nzFromPhoneContext = new PhoneNumber('64', '3033316005', metadata)
  23. expectPhoneNumbersToBeEqual(
  24. parsePhoneNumber('tel:033316005;phone-context=+64-3'),
  25. nzFromPhoneContext
  26. )
  27. const brFromPhoneContext = new PhoneNumber('55', '5033316005', metadata)
  28. expectPhoneNumbersToBeEqual(
  29. parsePhoneNumber('tel:033316005;phone-context=+(555)'),
  30. brFromPhoneContext
  31. )
  32. const usFromPhoneContext = new PhoneNumber('1', '23033316005', metadata)
  33. expectPhoneNumbersToBeEqual(
  34. parsePhoneNumber('tel:033316005;phone-context=+-1-2.3()'),
  35. usFromPhoneContext
  36. )
  37. // Valid domainname.
  38. expectPhoneNumbersToBeEqual(
  39. parsePhoneNumber('tel:033316005;phone-context=abc.nz', 'NZ'),
  40. NZ_NUMBER
  41. )
  42. expectPhoneNumbersToBeEqual(
  43. parsePhoneNumber('tel:033316005;phone-context=www.PHONE-numb3r.com', 'NZ'),
  44. NZ_NUMBER
  45. )
  46. expectPhoneNumbersToBeEqual(
  47. parsePhoneNumber('tel:033316005;phone-context=a', 'NZ'),
  48. NZ_NUMBER
  49. )
  50. expectPhoneNumbersToBeEqual(
  51. parsePhoneNumber('tel:033316005;phone-context=3phone.J.', 'NZ'),
  52. NZ_NUMBER
  53. )
  54. expectPhoneNumbersToBeEqual(
  55. parsePhoneNumber('tel:033316005;phone-context=a--z', 'NZ'),
  56. NZ_NUMBER
  57. )
  58. // Should strip ISDN subaddress.
  59. expectPhoneNumbersToBeEqual(
  60. parsePhoneNumber('tel:033316005;isub=/@;phone-context=+64', 'NZ'),
  61. NZ_NUMBER
  62. )
  63. // // Should support incorrectly-written RFC 3966 phone numbers:
  64. // // the ones written without a `tel:` prefix.
  65. // expectPhoneNumbersToBeEqual(
  66. // parsePhoneNumber('033316005;phone-context=+64', 'NZ'),
  67. // NZ_NUMBER
  68. // )
  69. // Invalid descriptor.
  70. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=')
  71. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=+')
  72. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=64')
  73. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=++64')
  74. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=+abc')
  75. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=.')
  76. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=3phone')
  77. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=a-.nz')
  78. expectToThrowForInvalidPhoneContext('tel:033316005;phone-context=a{b}c')
  79. })
  80. })
  81. function expectToThrowForInvalidPhoneContext(string) {
  82. expect(parsePhoneNumber(string)).to.be.undefined
  83. }
  84. function expectPhoneNumbersToBeEqual(phoneNumber1, phoneNumber2) {
  85. if (!phoneNumber1 || !phoneNumber2) {
  86. return false
  87. }
  88. return phoneNumber1.number === phoneNumber2.number &&
  89. phoneNumber1.ext === phoneNumber2.ext
  90. }