findNumbers.test.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. "use strict";
  2. var _findNumbers = _interopRequireDefault(require("./findNumbers.js"));
  3. var _metadataMax = _interopRequireDefault(require("../../metadata.max.json"));
  4. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
  5. describe('findNumbers', function () {
  6. it('should find numbers', function () {
  7. (0, _findNumbers["default"])('2133734253', 'US', _metadataMax["default"]).should.deep.equal([{
  8. phone: '2133734253',
  9. country: 'US',
  10. startsAt: 0,
  11. endsAt: 10
  12. }]);
  13. (0, _findNumbers["default"])('(213) 373-4253', 'US', _metadataMax["default"]).should.deep.equal([{
  14. phone: '2133734253',
  15. country: 'US',
  16. startsAt: 0,
  17. endsAt: 14
  18. }]);
  19. (0, _findNumbers["default"])('The number is +7 (800) 555-35-35 and not (213) 373-4253 as written in the document.', 'US', _metadataMax["default"]).should.deep.equal([{
  20. phone: '8005553535',
  21. country: 'RU',
  22. startsAt: 14,
  23. endsAt: 32
  24. }, {
  25. phone: '2133734253',
  26. country: 'US',
  27. startsAt: 41,
  28. endsAt: 55
  29. }]); // Opening parenthesis issue.
  30. // https://github.com/catamphetamine/libphonenumber-js/issues/252
  31. (0, _findNumbers["default"])('The number is +7 (800) 555-35-35 and not (213) 373-4253 (that\'s not even in the same country!) as written in the document.', 'US', _metadataMax["default"]).should.deep.equal([{
  32. phone: '8005553535',
  33. country: 'RU',
  34. startsAt: 14,
  35. endsAt: 32
  36. }, {
  37. phone: '2133734253',
  38. country: 'US',
  39. startsAt: 41,
  40. endsAt: 55
  41. }]); // No default country.
  42. (0, _findNumbers["default"])('The number is +7 (800) 555-35-35 as written in the document.', _metadataMax["default"]).should.deep.equal([{
  43. phone: '8005553535',
  44. country: 'RU',
  45. startsAt: 14,
  46. endsAt: 32
  47. }]); // Passing `options` and default country.
  48. (0, _findNumbers["default"])('The number is +7 (800) 555-35-35 as written in the document.', 'US', {
  49. leniency: 'VALID'
  50. }, _metadataMax["default"]).should.deep.equal([{
  51. phone: '8005553535',
  52. country: 'RU',
  53. startsAt: 14,
  54. endsAt: 32
  55. }]); // Passing `options`.
  56. (0, _findNumbers["default"])('The number is +7 (800) 555-35-35 as written in the document.', {
  57. leniency: 'VALID'
  58. }, _metadataMax["default"]).should.deep.equal([{
  59. phone: '8005553535',
  60. country: 'RU',
  61. startsAt: 14,
  62. endsAt: 32
  63. }]); // Not a phone number and a phone number.
  64. (0, _findNumbers["default"])('Digits 12 are not a number, but +7 (800) 555-35-35 is.', {
  65. leniency: 'VALID'
  66. }, _metadataMax["default"]).should.deep.equal([{
  67. phone: '8005553535',
  68. country: 'RU',
  69. startsAt: 32,
  70. endsAt: 50
  71. }]); // Phone number extension.
  72. (0, _findNumbers["default"])('Date 02/17/2018 is not a number, but +7 (800) 555-35-35 ext. 123 is.', {
  73. leniency: 'VALID'
  74. }, _metadataMax["default"]).should.deep.equal([{
  75. phone: '8005553535',
  76. country: 'RU',
  77. ext: '123',
  78. startsAt: 37,
  79. endsAt: 64
  80. }]);
  81. });
  82. it('should find numbers (v2)', function () {
  83. var phoneNumbers = (0, _findNumbers["default"])('The number is +7 (800) 555-35-35 ext. 1234 and not (213) 373-4253 as written in the document.', 'US', {
  84. v2: true
  85. }, _metadataMax["default"]);
  86. phoneNumbers.length.should.equal(2);
  87. phoneNumbers[0].startsAt.should.equal(14);
  88. phoneNumbers[0].endsAt.should.equal(42);
  89. phoneNumbers[0].number.number.should.equal('+78005553535');
  90. phoneNumbers[0].number.nationalNumber.should.equal('8005553535');
  91. phoneNumbers[0].number.country.should.equal('RU');
  92. phoneNumbers[0].number.countryCallingCode.should.equal('7');
  93. phoneNumbers[0].number.ext.should.equal('1234');
  94. phoneNumbers[1].startsAt.should.equal(51);
  95. phoneNumbers[1].endsAt.should.equal(65);
  96. phoneNumbers[1].number.number.should.equal('+12133734253');
  97. phoneNumbers[1].number.nationalNumber.should.equal('2133734253');
  98. phoneNumbers[1].number.country.should.equal('US');
  99. phoneNumbers[1].number.countryCallingCode.should.equal('1');
  100. });
  101. it('shouldn\'t find non-valid numbers', function () {
  102. // Not a valid phone number for US.
  103. (0, _findNumbers["default"])('1111111111', 'US', _metadataMax["default"]).should.deep.equal([]);
  104. });
  105. it('should find non-European digits', function () {
  106. // E.g. in Iraq they don't write `+442323234` but rather `+٤٤٢٣٢٣٢٣٤`.
  107. (0, _findNumbers["default"])('العَرَبِيَّة‎ +٤٤٣٣٣٣٣٣٣٣٣٣عَرَبِيّ‎', _metadataMax["default"]).should.deep.equal([{
  108. country: 'GB',
  109. phone: '3333333333',
  110. startsAt: 14,
  111. endsAt: 27
  112. }]);
  113. });
  114. it('should work in edge cases', function () {
  115. var thrower; // No input
  116. (0, _findNumbers["default"])('', _metadataMax["default"]).should.deep.equal([]); // // No country metadata for this `require` country code
  117. // thrower = () => findNumbers('123', 'ZZ', metadata)
  118. // thrower.should.throw('Unknown country')
  119. // Numerical `value`
  120. thrower = function thrower() {
  121. return (0, _findNumbers["default"])(2141111111, 'US');
  122. };
  123. thrower.should["throw"]('A text for parsing must be a string.'); // // No metadata
  124. // thrower = () => findNumbers('')
  125. // thrower.should.throw('`metadata` argument not passed')
  126. // No metadata, no default country, no phone numbers.
  127. (0, _findNumbers["default"])('').should.deep.equal([]);
  128. });
  129. it('should find international numbers when passed a non-existent default country', function () {
  130. var numbers = (0, _findNumbers["default"])('Phone: +7 (800) 555 35 35. National: 8 (800) 555-55-55', {
  131. defaultCountry: 'XX',
  132. v2: true
  133. }, _metadataMax["default"]);
  134. numbers.length.should.equal(1);
  135. numbers[0].number.nationalNumber.should.equal('8005553535');
  136. });
  137. it('shouldn\'t find phone numbers which are not phone numbers', function () {
  138. // A timestamp.
  139. (0, _findNumbers["default"])('2012-01-02 08:00', 'US', _metadataMax["default"]).should.deep.equal([]); // A valid number (not a complete timestamp).
  140. (0, _findNumbers["default"])('2012-01-02 08', 'US', _metadataMax["default"]).should.deep.equal([{
  141. country: 'US',
  142. phone: '2012010208',
  143. startsAt: 0,
  144. endsAt: 13
  145. }]); // Invalid parens.
  146. (0, _findNumbers["default"])('213(3734253', 'US', _metadataMax["default"]).should.deep.equal([]); // Letters after phone number.
  147. (0, _findNumbers["default"])('2133734253a', 'US', _metadataMax["default"]).should.deep.equal([]); // Valid phone (same as the one found in the UUID below).
  148. (0, _findNumbers["default"])('The phone number is 231354125.', 'FR', _metadataMax["default"]).should.deep.equal([{
  149. country: 'FR',
  150. phone: '231354125',
  151. startsAt: 20,
  152. endsAt: 29
  153. }]); // Not a phone number (part of a UUID).
  154. // Should parse in `{ extended: true }` mode.
  155. var possibleNumbers = (0, _findNumbers["default"])('The UUID is CA801c26f98cd16e231354125ad046e40b.', 'FR', {
  156. extended: true
  157. }, _metadataMax["default"]);
  158. possibleNumbers.length.should.equal(1);
  159. possibleNumbers[0].country.should.equal('FR');
  160. possibleNumbers[0].phone.should.equal('231354125'); // Not a phone number (part of a UUID).
  161. // Shouldn't parse by default.
  162. (0, _findNumbers["default"])('The UUID is CA801c26f98cd16e231354125ad046e40b.', 'FR', _metadataMax["default"]).should.deep.equal([]);
  163. }); // https://gitlab.com/catamphetamine/libphonenumber-js/-/merge_requests/4
  164. it('should return correct `startsAt` and `endsAt` when matching "inner" candidates in a could-be-a-candidate substring', function () {
  165. (0, _findNumbers["default"])('39945926 77200596 16533084', 'ID', _metadataMax["default"]).should.deep.equal([{
  166. country: 'ID',
  167. phone: '77200596',
  168. startsAt: 9,
  169. endsAt: 17
  170. }]);
  171. });
  172. });
  173. //# sourceMappingURL=findNumbers.test.js.map