-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.test.js
85 lines (81 loc) · 3.06 KB
/
index.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import nationalIdNumber, { mod10CheckDigit, isValidDate } from '.';
describe('nationalIdNumber', () => {
// Test each number scenario
// -----------------------------------------
it.each`
number | valid | type
${'9202295029188'} | ${true} | ${'valid'}
${'7311190013080'} | ${true} | ${'valid'}
${'6512230302083'} | ${true} | ${'valid'}
${'7311190T13080'} | ${false} | ${'invalid format'}
${'9202295029187'} | ${false} | ${'invalid checksum'}
${'8813210302087'} | ${false} | ${'invalid date'}
${'9302295029087'} | ${false} | ${'invalid date'}
${'1806110013082'} | ${false} | ${'too young'}
${'6512230302281'} | ${false} | ${'invalid citizenship'}
${'73111900130805'} | ${false} | ${'too many digits'}
${'651223030206'} | ${false} | ${'too few digits'}
${''} | ${false} | ${'blank'}
`('checks $type returns $valid', ({ number, valid }) => {
expect(nationalIdNumber({ number })).toEqual(valid);
});
// Test error messages work
// -----------------------------------------
it.each`
number | message
${'7311190T13080'} | ${'format'}
${'6512230302281'} | ${'format'}
${'9202295029187'} | ${'checksum'}
${'9302295029087'} | ${'date'}
${'1806110013082'} | ${'age'}
${'73111900130805'} | ${'long'}
${'651223030206'} | ${'short'}
`('returns specific error message for $message', ({ number, message }) => {
const errorMessages = {};
errorMessages[message] = message;
expect(nationalIdNumber({ number, errorMessages })).toEqual(message);
});
// Type check
// -----------------------------------------
it('returns error if not entering a string', () => {
try {
nationalIdNumber({ number: 1 });
} catch (e) {
expect(e.message).toBe('Input should be string');
}
});
});
describe('isValidDate', () => {
it.each`
date | output
${'2020/02/29'} | ${true}
${'2020/02/30'} | ${false}
${'1993/02/29'} | ${false}
${'1988/13/21'} | ${false}
${'2000/01/20'} | ${true}
${'2000/01/32'} | ${false}
`('returns correct value $output for $date', ({ date, output }) => {
expect(isValidDate(date)).toBe(output);
});
});
describe('mod10CheckDigit', () => {
// Check checksum works
// -----------------------------------------
it.each`
number | output
${'9202204720082'} | ${2}
${'7992739871'} | ${3}
${'7240157335352'} | ${4}
`('returns correct checksum for $number', ({ number, output }) => {
expect(mod10CheckDigit({ number })).toBe(output);
});
// Type check
// -----------------------------------------
it('returns error if not entering a string', () => {
try {
mod10CheckDigit({ number: 1 });
} catch (e) {
expect(e.message).toBe('Input should be string');
}
});
});