diff --git a/src/utils/validators/index.ts b/src/utils/validators/index.ts index f4ce7a88..48f681cd 100644 --- a/src/utils/validators/index.ts +++ b/src/utils/validators/index.ts @@ -78,6 +78,8 @@ export const validateExpiryDate = (date: string, format: string) => { if (!date.includes('/')) return false; const { month, year } = getYearAndMonthBasedOnFormat(date, format); if (format.endsWith('YYYY') && year.toString().length !== 4) { return false; } + const monthNum = Number(month); + if (monthNum < 1 || monthNum > 12) { return false; } const expiryDate = new Date(Number(year), Number(month), 0); expiryDate.setHours(23, 59, 59, 999); const today = new Date(); @@ -85,7 +87,6 @@ export const validateExpiryDate = (date: string, format: string) => { const maxDate = new Date(); maxDate.setFullYear(today.getFullYear() + 50); maxDate.setMonth(today.getMonth() + 1); - return expiryDate >= today && expiryDate <= maxDate; }; diff --git a/tests/utils/validators.test.js b/tests/utils/validators.test.js index c67b5b7e..c1ef6763 100644 --- a/tests/utils/validators.test.js +++ b/tests/utils/validators.test.js @@ -66,6 +66,56 @@ describe('Validation card number and Expiry Date', () => { expect(validateExpiryDate(expiryDate, "MM/YY")).toBe(false); }); + test('validate expiry date with month 00, MM/YY', () => { + const expiryDate = '00/45'; + expect(validateExpiryDate(expiryDate, "MM/YY")).toBe(false); + }); + + test('validate expiry date with month 13, MM/YY', () => { + const expiryDate = '13/45'; + expect(validateExpiryDate(expiryDate, "MM/YY")).toBe(false); + }); + + test('validate expiry date with month 00, YY/MM', () => { + const expiryDate = '45/00'; + expect(validateExpiryDate(expiryDate, "YY/MM")).toBe(false); + }); + + test('validate expiry date with month 13, YY/MM', () => { + const expiryDate = '45/13'; + expect(validateExpiryDate(expiryDate, "YY/MM")).toBe(false); + }); + + test('validate expiry date with month 00, YYYY/MM', () => { + const expiryDate = '2045/00'; + expect(validateExpiryDate(expiryDate, "YYYY/MM")).toBe(false); + }); + + test('validate expiry date with month 13, YYYY/MM', () => { + const expiryDate = '2045/13'; + expect(validateExpiryDate(expiryDate, "YYYY/MM")).toBe(false); + }); + + test('validate older expiry date with month 00, YYYY/MM', () => { + const expiryDate = '2024/00'; + expect(validateExpiryDate(expiryDate, "YYYY/MM")).toBe(false); + }); + + test('validate older expiry date with month 13, YYYY/MM', () => { + const expiryDate = '2024/13'; + expect(validateExpiryDate(expiryDate, "YYYY/MM")).toBe(false); + }); + + test('validate expiry date with month 00, MM/YYYY', () => { + const expiryDate = '00/2045'; + expect(validateExpiryDate(expiryDate, "MM/YYYY")).toBe(false); + }); + + test('validate expiry date with month 13, MM/YYYY', () => { + const expiryDate = '13/2045'; + expect(validateExpiryDate(expiryDate, "MM/YYYY")).toBe(false); + }); + test('validate expired date, MM/YY', () => { const currentDate = new Date(); const expiryDate = `${currentDate.getMonth()}/${currentDate.getFullYear().toString().slice(-2)}`;