Skip to content

Commit 71ebd92

Browse files
SK-2675 fix date validation for month (#683)
* SK-2610 fix the type gap to pass the nested objects * SK-2675 fix the date validation * SK-2675 add unit test for fixing the date validation * SK-2675 undo style change
1 parent 21f24f3 commit 71ebd92

2 files changed

Lines changed: 52 additions & 1 deletion

File tree

src/utils/validators/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,15 @@ export const validateExpiryDate = (date: string, format: string) => {
7878
if (!date.includes('/')) return false;
7979
const { month, year } = getYearAndMonthBasedOnFormat(date, format);
8080
if (format.endsWith('YYYY') && year.toString().length !== 4) { return false; }
81+
const monthNum = Number(month);
82+
if (monthNum < 1 || monthNum > 12) { return false; }
8183
const expiryDate = new Date(Number(year), Number(month), 0);
8284
expiryDate.setHours(23, 59, 59, 999);
8385
const today = new Date();
8486

8587
const maxDate = new Date();
8688
maxDate.setFullYear(today.getFullYear() + 50);
8789
maxDate.setMonth(today.getMonth() + 1);
88-
8990
return expiryDate >= today && expiryDate <= maxDate;
9091
};
9192

tests/utils/validators.test.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,56 @@ describe('Validation card number and Expiry Date', () => {
6666
expect(validateExpiryDate(expiryDate, "MM/YY")).toBe(false);
6767
});
6868

69+
test('validate expiry date with month 00, MM/YY', () => {
70+
const expiryDate = '00/45';
71+
expect(validateExpiryDate(expiryDate, "MM/YY")).toBe(false);
72+
});
73+
74+
test('validate expiry date with month 13, MM/YY', () => {
75+
const expiryDate = '13/45';
76+
expect(validateExpiryDate(expiryDate, "MM/YY")).toBe(false);
77+
});
78+
79+
test('validate expiry date with month 00, YY/MM', () => {
80+
const expiryDate = '45/00';
81+
expect(validateExpiryDate(expiryDate, "YY/MM")).toBe(false);
82+
});
83+
84+
test('validate expiry date with month 13, YY/MM', () => {
85+
const expiryDate = '45/13';
86+
expect(validateExpiryDate(expiryDate, "YY/MM")).toBe(false);
87+
});
88+
89+
test('validate expiry date with month 00, YYYY/MM', () => {
90+
const expiryDate = '2045/00';
91+
expect(validateExpiryDate(expiryDate, "YYYY/MM")).toBe(false);
92+
});
93+
94+
test('validate expiry date with month 13, YYYY/MM', () => {
95+
const expiryDate = '2045/13';
96+
expect(validateExpiryDate(expiryDate, "YYYY/MM")).toBe(false);
97+
});
98+
99+
test('validate older expiry date with month 00, YYYY/MM', () => {
100+
const expiryDate = '2024/00';
101+
expect(validateExpiryDate(expiryDate, "YYYY/MM")).toBe(false);
102+
});
103+
104+
test('validate older expiry date with month 13, YYYY/MM', () => {
105+
const expiryDate = '2024/13';
106+
expect(validateExpiryDate(expiryDate, "YYYY/MM")).toBe(false);
107+
});
108+
109+
test('validate expiry date with month 00, MM/YYYY', () => {
110+
const expiryDate = '00/2045';
111+
expect(validateExpiryDate(expiryDate, "MM/YYYY")).toBe(false);
112+
});
113+
114+
test('validate expiry date with month 13, MM/YYYY', () => {
115+
const expiryDate = '13/2045';
116+
expect(validateExpiryDate(expiryDate, "MM/YYYY")).toBe(false);
117+
});
118+
69119
test('validate expired date, MM/YY', () => {
70120
const currentDate = new Date();
71121
const expiryDate = `${currentDate.getMonth()}/${currentDate.getFullYear().toString().slice(-2)}`;

0 commit comments

Comments
 (0)