-
Notifications
You must be signed in to change notification settings - Fork 0
/
test.js
142 lines (122 loc) · 4.98 KB
/
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
import test from 'ava';
import containsPII from './index.js';
test('detects an email address', t => {
const result = containsPII('oops, an email [email protected].');
t.is(Boolean(result), true);
t.is(result.length, 1);
t.is(result[0].type, 'EMAIL');
t.is(result[0].message, 'Contains an email address');
t.is(result[0].reason, 'Email addresses disallowed in field');
});
test('detects a phone number', t => {
const result = containsPII('oops, call me at + 1 248.982.6323.');
t.is(Boolean(result), true);
t.is(result.length, 1);
t.is(result[0].type, 'PHONE');
t.is(result[0].message, 'Contains a phone number');
t.is(result[0].reason, 'Phone numbers disallowed in field');
});
test('detects a unit number', t => {
const result = containsPII('This is a lovely location in Unit 42.');
t.is(Boolean(result), true);
t.is(result.length, 1);
t.is(result[0].type, 'PROPERTY_UNIT_NUMBER');
t.is(result[0].message, 'Contains a condo-unit number');
t.is(result[0].reason, 'Condo-unit numbers disallowed in field');
});
test('detects a unit number with with a # pound', t => {
const result = containsPII('This is a lovely location in Unit # 142.');
t.is(Boolean(result), true);
t.is(result.length, 1);
t.is(result[0].type, 'PROPERTY_UNIT_NUMBER');
t.is(result[0].message, 'Contains a condo-unit number');
t.is(result[0].reason, 'Condo-unit numbers disallowed in field');
});
test('detects an unit number for an apartment', t => {
const result = containsPII('Apt. 3 is dope.');
t.is(Boolean(result), true);
t.is(result.length, 1);
t.is(result[0].type, 'PROPERTY_UNIT_NUMBER');
t.is(result[0].message, 'Contains a condo-unit number');
t.is(result[0].reason, 'Condo-unit numbers disallowed in field');
});
test('detects an unit number for an apartment without punctutation and ends with a street suffix ("place")', t => {
const result = containsPII(`Unit 2 is the Place.`);
t.is(Boolean(result), true);
t.is(result.length, 2);
t.is(result[0].type, 'PROPERTY_UNIT_NUMBER');
t.is(result[0].message, 'Contains a condo-unit number');
t.is(result[0].reason, 'Condo-unit numbers disallowed in field');
t.is(result[1].type, 'PROPERTY_STREET_ADDRESS');
t.is(result[1].message, 'Contains a street address');
t.is(result[1].reason, 'Street addresses disallowed in field');
});
test('detects a street address', t => {
const result = containsPII('This 650 Castro place is dope.');
t.is(Boolean(result), true);
t.is(result.length, 1);
t.is(result[0].type, 'PROPERTY_STREET_ADDRESS');
t.is(result[0].message, 'Contains a street address');
t.is(result[0].reason, 'Street addresses disallowed in field');
});
test('detects a social-security number', t => {
const result = containsPII('The person is \n\n313-52-0582\n.');
t.is(Boolean(result), true);
t.is(result.length, 1);
t.is(result[0].type, 'SSN');
t.is(result[0].message, 'Contains a social-security number');
t.is(result[0].reason, 'Social-Security Numbers disallowed in field');
});
test('allows a URL domain name (FQDN) without a protcol + path', t => {
const result = containsPII('You can find more at example.com.');
t.is(Boolean(result), false);
});
test('allows a URL without a path', t => {
const result = containsPII('You can find more at https://example.com.');
t.is(Boolean(result), false);
});
test('allows URL without a protocol', t => {
const result = containsPII('You can find more at example.com/wer.');
t.is(Boolean(result), false);
});
test('allows a URL with a path', t => {
const result = containsPII(
'You can find more at https://example.com/?more-info.'
);
t.is(Boolean(result), false);
});
test('allows number/string combo that might look like a street address', t => {
const result = containsPII('This is 1000 Square Ft.');
t.is(Boolean(result), false);
});
test('allows a string that might look like a street address', t => {
const result = containsPII('This is 1000 sq.ft.');
t.is(Boolean(result), false);
});
test('allows "lot" in a string (not a street address)', t => {
const result = containsPII(`This is a 1,500 sq. ft. lot.`);
t.is(Boolean(result), false);
});
test('allows "unit" in a string (not a street address)', t => {
const result = containsPII(`This unit is great.`);
t.is(Boolean(result), false);
});
test('allows "unit" near numbers in a string (not a street address)', t => {
const result = containsPII(`In this unit. 2 bed.`);
t.is(Boolean(result), false);
});
test('starts with a street address', t => {
const result = containsPII(`192 Everest Avenue has just been finished.`);
t.is(Boolean(result), true);
t.is(result.length, 1);
t.is(result[0].type, 'PROPERTY_STREET_ADDRESS');
t.is(result[0].message, 'Contains a street address');
t.is(result[0].reason, 'Street addresses disallowed in field');
});
test('allows a string body that contains false-positive-looking street addresses', t => {
const result = containsPII(
`3 beds and 2 bathrooms to the highest standards.`
);
console.log(result);
t.is(Boolean(result), false);
});