phonumber
Version:
Phone number parser. Good for formatting phone numbers entered by users.
99 lines (82 loc) • 2.66 kB
text/typescript
import parsePhoneNumber from './phoneNumberParser';
import { Formats, Resolver } from './types';
describe('Parser tests', () => {
const phone = {
code: 'RU',
dialCode: '+7',
nationalNumber: '9199881234',
formattedNumber: '+7 9199881234',
};
const unknownPhone = {
code: null,
dialCode: null,
nationalNumber: null,
formattedNumber: '',
};
const resolvers: Array<Resolver> = [
{
firstInputChars: {
8: {
mode: 'replace',
},
9: {
mode: 'add',
},
},
resolveAs: {
firstChar: 7,
code: 'RU',
},
},
];
const formats: Formats = {
RU: {
mask: '(###) ### ####',
},
};
test('Should get parsed phone number', () => {
const result = parsePhoneNumber('79199881234');
expect(result).toEqual(phone);
});
test('Should get parsed phone number from the string starting with a "+"', () => {
const result = parsePhoneNumber('+79199881234');
expect(result).toEqual(phone);
});
test('Should get parsed phone number from the string contained non digits', () => {
const result = parsePhoneNumber(' +7 ( 91$9 ) 98as8 - 1234 ');
expect(result).toEqual(phone);
});
test('Should detect UK', () => {
const result = parsePhoneNumber('44323');
expect(result.code).toBe('UK');
expect(result.dialCode).toBe('+44');
expect(result.nationalNumber).toBe('323');
expect(result.formattedNumber).toBe('+44 323');
});
test('Should get unknown phone number', () => {
const expectedResult = { ...unknownPhone };
expectedResult.formattedNumber = '+800555';
const result = parsePhoneNumber('800 555');
expect(result).toEqual(expectedResult);
});
test('Should get unknown phone number if pass empty string', () => {
const result = parsePhoneNumber('');
expect(result).toEqual(unknownPhone);
});
test('Should get phone number and use resolvers', () => {
const result = parsePhoneNumber('89199881234', { resolvers });
expect(result).toEqual(phone);
});
test('Should get phone number and use formats', () => {
const expectedResult = { ...phone };
expectedResult.formattedNumber = '+7 (919) 988 1234';
const result = parsePhoneNumber('79199881234', { formats });
expect(result).toEqual(expectedResult);
});
test('Should get phone number and use formats and resolvers', () => {
const expectedResult = { ...phone };
expectedResult.formattedNumber = '+7 (919) 988 1234';
const result = parsePhoneNumber('89199881234', { resolvers, formats });
expect(result).toEqual(expectedResult);
});
});