codetrix
Version:
A lightweight lodash-style utility library
105 lines (104 loc) • 4.53 kB
JavaScript
import { isCreditCard, isEmail, isPhoneNumber, isPostalCode, isStrongPassword, isURL, isUsername } from "../../formUtils";
describe('isEmail', () => {
it('should return true for valid emails', () => {
expect(isEmail('test@example.com')).toBe(true);
expect(isEmail('user.name+alias@domain.co')).toBe(true);
});
it('should return false for invalid emails', () => {
expect(isEmail('plainaddress')).toBe(false);
expect(isEmail('user@.com')).toBe(false);
});
});
describe('isStrongPassword', () => {
it('should return true for strong passwords', () => {
expect(isStrongPassword('Aa1@abcd')).toBe(true);
});
it('should return false for weak passwords', () => {
expect(isStrongPassword('12345678')).toBe(false);
expect(isStrongPassword('password')).toBe(false);
expect(isStrongPassword('ABC123!!')).toBe(false);
});
});
describe('isPhoneNumber', () => {
it('should return true for valid international numbers', () => {
expect(isPhoneNumber('+919999999999')).toBe(true);
});
it('should return false for invalid numbers', () => {
expect(isPhoneNumber('123')).toBe(false);
expect(isPhoneNumber('abcdefgh')).toBe(false);
});
});
describe('isUsername', () => {
it('should return true for valid usernames', () => {
expect(isUsername('user_01')).toBe(true);
expect(isUsername('abc123')).toBe(true);
});
it('should return false for invalid usernames', () => {
expect(isUsername('ab')).toBe(false);
expect(isUsername('user@name')).toBe(false);
});
});
describe('isPostalCode', () => {
// US postal codes
it('should return true for valid US postal code', () => {
expect(isPostalCode('12345', 'US')).toBe(true);
expect(isPostalCode('12345-6789', 'US')).toBe(true);
});
it('should return false for invalid US postal code', () => {
expect(isPostalCode('1234', 'US')).toBe(false);
expect(isPostalCode('123456', 'US')).toBe(false);
expect(isPostalCode('ABCDE', 'US')).toBe(false);
});
// IN postal codes
it('should return true for valid Indian postal code', () => {
expect(isPostalCode('560001', 'IN')).toBe(true);
});
it('should return false for invalid Indian postal code', () => {
expect(isPostalCode('56001', 'IN')).toBe(false);
expect(isPostalCode('5600011', 'IN')).toBe(false);
expect(isPostalCode('ABCDEF', 'IN')).toBe(false);
});
// Fallback case: unsupported country
it('should return false for unsupported country code', () => {
expect(isPostalCode('12345', 'FR')).toBe(false);
expect(isPostalCode('560001', 'XYZ')).toBe(false);
});
// Default country (IN)
it('should default to IN if no country is provided', () => {
expect(isPostalCode('560001')).toBe(true);
expect(isPostalCode('12345')).toBe(false);
});
});
describe('isCreditCard', () => {
it('should return false for non-numeric input or invalid length', () => {
expect(isCreditCard('abcd efgh ijkl mnop')).toBe(false); // non-numeric
expect(isCreditCard('1234')).toBe(false); // too short
expect(isCreditCard('1234-5678')).toBe(false); // too short + hyphen
});
it('should return false for completely invalid card number (fails Luhn)', () => {
expect(isCreditCard('0000 0000 0000 0000')).toBe(false);
});
it('should return true for a valid Visa card number', () => {
expect(isCreditCard('4111 1111 1111 1111')).toBe(true); // passes Luhn
});
it('should return true for valid MasterCard number with >9 digit doubling', () => {
expect(isCreditCard('5500 0000 0000 0004')).toBe(true); // doubles to >9
});
it('should handle sanitization correctly (hyphens, spaces)', () => {
expect(isCreditCard('4111-1111-1111-1111')).toBe(true);
expect(isCreditCard('4111111111111111')).toBe(true);
});
it('should return false if checksum fails due to Luhn mismatch', () => {
expect(isCreditCard('4111 1111 1111 1112')).toBe(false); // off by 1 digit
});
});
describe('isURL', () => {
it('should return true for valid URLs', () => {
expect(isURL('http://example.com')).toBe(true);
expect(isURL('https://sub.example.co/path')).toBe(true);
});
it('should return false for invalid URLs', () => {
expect(isURL('example')).toBe(false);
expect(isURL('http:/example.com')).toBe(false);
});
});