-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtracking_numbers_test.go
166 lines (148 loc) · 9.89 KB
/
tracking_numbers_test.go
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package trackr
import (
"fmt"
"reflect"
"testing"
)
func TestFind(t *testing.T) {
tests := []struct {
name string
message string
want []TrackingNumber
}{
{"empty string", "", []TrackingNumber{}},
{"random word", "foo", []TrackingNumber{}},
{"random words", "foo bar baz", []TrackingNumber{}},
{"FedEx Express 12-digit", "012345678983", []TrackingNumber{{"FedEx", "012345678983"}}},
{"mangled FedEx Express 12-digit", "012345678980", []TrackingNumber{}},
{"mangled FedEx Express 12-digit", "012345678981", []TrackingNumber{}},
{"mangled FedEx Express 12-digit", "012345678982", []TrackingNumber{}},
{"mangled FedEx Express 12-digit", "012345678984", []TrackingNumber{}},
{"mangled FedEx Express 12-digit", "012345678985", []TrackingNumber{}},
{"mangled FedEx Express 12-digit", "012345678986", []TrackingNumber{}},
{"mangled FedEx Express 12-digit", "012345678987", []TrackingNumber{}},
{"mangled FedEx Express 12-digit", "012345678988", []TrackingNumber{}},
{"mangled FedEx Express 12-digit", "012345678989", []TrackingNumber{}},
{"FedEx Express 12-digit with extra number", "0123456789831", []TrackingNumber{}},
{"FedEx Express 12-digit with spaces", " 012345678983 ", []TrackingNumber{{"FedEx", "012345678983"}}},
{"FedEx Express 12-digit with words", "this 012345678983 thing", []TrackingNumber{{"FedEx", "012345678983"}}},
{"FedEx Express 12-digit with punctuation", "here:012345678983!!!", []TrackingNumber{{"FedEx", "012345678983"}}},
{"FedEx Express 12-digit with numbers", "123543 012345678983.763", []TrackingNumber{{"FedEx", "012345678983"}}},
{"multiple FedEx Express 12-digit", "012345678983 452520484968", []TrackingNumber{{"FedEx", "012345678983"}, {"FedEx", "452520484968"}}},
{"FedEx Express 15-digit", "753840910347261", []TrackingNumber{{"FedEx", "753840910347261"}}},
{"mangled FedEx Express 15-digit", "753840910347260", []TrackingNumber{}},
{"mangled FedEx Express 15-digit", "753840910347262", []TrackingNumber{}},
{"mangled FedEx Express 15-digit", "753840910347263", []TrackingNumber{}},
{"mangled FedEx Express 15-digit", "753840910347264", []TrackingNumber{}},
{"mangled FedEx Express 15-digit", "753840910347265", []TrackingNumber{}},
{"mangled FedEx Express 15-digit", "753840910347266", []TrackingNumber{}},
{"mangled FedEx Express 15-digit", "753840910347267", []TrackingNumber{}},
{"mangled FedEx Express 15-digit", "753840910347268", []TrackingNumber{}},
{"mangled FedEx Express 15-digit", "753840910347269", []TrackingNumber{}},
{"FedEx Express 15-digit with extra number", "7538409103472611", []TrackingNumber{}},
{"FedEx Express 15-digit with spaces", " 753840910347261 ", []TrackingNumber{{"FedEx", "753840910347261"}}},
{"FedEx Express 15-digit with words", "this 753840910347261 thing", []TrackingNumber{{"FedEx", "753840910347261"}}},
{"FedEx Express 15-digit with punctuation", "here:753840910347261!!!", []TrackingNumber{{"FedEx", "753840910347261"}}},
{"FedEx Express 9-digit", "555121207", []TrackingNumber{}},
{"FedEx Express 18-digit", "90175491001234560", []TrackingNumber{}},
{"FedEx Ground 15-digit", "987654312345672", []TrackingNumber{{"FedEx", "987654312345672"}}},
{"FedEx Ground 15-digit", "366226074417244", []TrackingNumber{{"FedEx", "366226074417244"}}},
{"mangled FedEx Ground 15-digit", "987654312345670", []TrackingNumber{}},
// 987654312345671 is, in fact, a valid FedEx Express number
{"mangled FedEx Ground 15-digit", "987654312345673", []TrackingNumber{}},
{"mangled FedEx Ground 15-digit", "987654312345674", []TrackingNumber{}},
{"mangled FedEx Ground 15-digit", "987654312345675", []TrackingNumber{}},
{"mangled FedEx Ground 15-digit", "987654312345676", []TrackingNumber{}},
{"mangled FedEx Ground 15-digit", "987654312345677", []TrackingNumber{}},
{"mangled FedEx Ground 15-digit", "987654312345678", []TrackingNumber{}},
{"mangled FedEx Ground 15-digit", "987654312345679", []TrackingNumber{}},
{"FedEx Ground 15-digit with extra number", "3662260744172444", []TrackingNumber{}},
{"FedEx Ground 15-digit with spaces", " 366226074417244 ", []TrackingNumber{{"FedEx", "366226074417244"}}},
{"FedEx Ground 15-digit with words", "this 366226074417244 thing", []TrackingNumber{{"FedEx", "366226074417244"}}},
{"FedEx Ground 15-digit with punctuation", "here:366226074417244!!!", []TrackingNumber{{"FedEx", "366226074417244"}}},
{"multiple FedEx Ground 15-digits", "366226074417244 and 987654312345672?", []TrackingNumber{{"FedEx", "366226074417244"}, {"FedEx", "987654312345672"}}},
{"fun FedEx Ground", "753840910327850", []TrackingNumber{{"FedEx", "753840910327850"}}},
{"fun FedEx Ground", "753840910269020", []TrackingNumber{{"FedEx", "753840910269020"}}},
//{"multiple FedEx", "FedEx\tGround\tReturn\t753840910327874\t2016.03.21\t\t\t\t\nGenerate PDF\nFedEx\tStandard Overnight\tOutbound\t782643691812\t2016.03.21\t2016.03.22\t\t\t\nFedEx\tStandard Overnight\tOutbound\t782643668950\t2016.03.21\t2016.03.22\t\t\t\nFedEx\tGround\tReturn\t753840910327850", []TrackingNumber{{"FedEx", "753840910327874"}, {"FedEx", "782643691812"}, {"FedEx", "782643668950"}, {"FedEx", "753840910327850"}}},
{"UPS", "1Z0A19T50395201562", []TrackingNumber{{"UPS", "1Z0A19T50395201562"}}},
{"mangled UPS", "1Z0A19T50395201560", []TrackingNumber{}},
{"mangled UPS", "1Z0A19T50395201561", []TrackingNumber{}},
{"mangled UPS", "1Z0A19T50395201563", []TrackingNumber{}},
{"mangled UPS", "1Z0A19T50395201564", []TrackingNumber{}},
{"mangled UPS", "1Z0A19T50395201565", []TrackingNumber{}},
{"mangled UPS", "1Z0A19T50395201566", []TrackingNumber{}},
{"mangled UPS", "1Z0A19T50395201567", []TrackingNumber{}},
{"mangled UPS", "1Z0A19T50395201568", []TrackingNumber{}},
{"mangled UPS", "1Z0A19T50395201569", []TrackingNumber{}},
{"UPS with extra number", "1Z0A19T503952015695", []TrackingNumber{}},
{"UPS with extra letter", "1Z0A19T50395201569A", []TrackingNumber{}},
{"UPS with spaces", " 1Z0A19T50395201562 ", []TrackingNumber{{"UPS", "1Z0A19T50395201562"}}},
{"UPS with words", "this 1Z0A19T50395201562 thing", []TrackingNumber{{"UPS", "1Z0A19T50395201562"}}},
{"UPS with punctuation", "here:1Z0A19T50395201562!!!", []TrackingNumber{{"UPS", "1Z0A19T50395201562"}}},
{"multiple UPS", "1Z17RV550319270595 and 1ZW0W2150362177018?", []TrackingNumber{{"UPS", "1Z17RV550319270595"}, {"UPS", "1ZW0W2150362177018"}}},
// from LR database
{"USPS mod 10", "9505514863416085007661", []TrackingNumber{{"USPS", "9505514863416085007661"}}},
{"USPS mod 10", "9500114129076084016042", []TrackingNumber{{"USPS", "9500114129076084016042"}}},
{"USPS mod 10", "9114999944314135394161", []TrackingNumber{{"USPS", "9114999944314135394161"}}},
{"USPS mod 10", "9405503699300135960087", []TrackingNumber{{"USPS", "9405503699300135960087"}}},
{"USPS mod 10", "9400109699938317563628", []TrackingNumber{{"USPS", "9400109699938317563628"}}},
{"USPS mod 10", "9405510200830034303190", []TrackingNumber{{"USPS", "9405510200830034303190"}}},
{"USPS mod 10", "70150640000609285719", []TrackingNumber{{"USPS", "70150640000609285719"}}},
{"USPS mod 10", "13152810000050524531", []TrackingNumber{{"USPS", "13152810000050524531"}}},
// from https://github.com/franckverrot/activevalidators/blob/master/test/validations/tracking_number_test.rb
{"USS39 mod 10", "EA123456784US", []TrackingNumber{{"USPS", "EA123456784US"}}},
{"USS39 mod 11", "RB123456785US", []TrackingNumber{{"USPS", "RB123456785US"}}},
{"20 character USS128 mod 10", "71123456789123456787", []TrackingNumber{{"USPS", "71123456789123456787"}}},
{"20 character USS128 mod 10 ending in 0", "03110240000115809160", []TrackingNumber{{"USPS", "03110240000115809160"}}},
{"22 character USS128 mod 10 ending in 0", "9171969010756003077385", []TrackingNumber{{"USPS", "9171969010756003077385"}}},
{"USS39 tracking number with invalid check digit", "EA123456782US", []TrackingNumber{}},
{"USS39 tracking number that is too short", "123456784US", []TrackingNumber{}},
{"USS39 tracking number that is too long", "EAB123456784US", []TrackingNumber{}},
{"USS39 tracking number with non-US product id", "EA123456784UT", []TrackingNumber{}},
{"USS128 tracking number with invalid check-digit", "71123456789123456788", []TrackingNumber{}},
{"USS128 tracking number that is too short", "7112345678912345678", []TrackingNumber{}},
{"USS128 tracking number that is too long", "711234567891234567879287", []TrackingNumber{}},
{"USS128 tracking number with invalid chars", "U11234567891234567879", []TrackingNumber{}},
{"mangled USPS", "9114901496450568878985", []TrackingNumber{}},
}
for _, tt := range tests {
t.Run(fmt.Sprintf("%s/%s", tt.name, tt.message), func(t *testing.T) {
// try it verbatim
message := tt.message
want := tt.want
if len(want) == 0 {
want = nil
}
if got := Find(message); !reflect.DeepEqual(got, want) {
t.Errorf("Find(%q) = %v, want %v", message, got, want)
}
// prepending/appending crap shouldn't change anything
// try that
message = "wat:" + tt.message + "?"
if got := Find(message); !reflect.DeepEqual(got, want) {
t.Errorf("Find(%q) = %v, want %v", message, got, want)
}
message = "words words\n" + tt.message
if got := Find(message); !reflect.DeepEqual(got, want) {
t.Errorf("Find(%q) = %v, want %v", message, got, want)
}
message = "555-1212-324 " + tt.message + " S430343"
if got := Find(message); !reflect.DeepEqual(got, want) {
t.Errorf("Find(%q) = %v, want %v", message, got, want)
}
// doubling the message and optionally including nonsense should return double the results
message = tt.message + "/" + tt.message
want = append(tt.want, tt.want...)
if len(want) == 0 {
want = nil
}
if got := Find(message); !reflect.DeepEqual(got, want) {
t.Errorf("Find(%q) = %v, want %v", message, got, want)
}
message = "what about " + tt.message + "&" + tt.message + "?"
if got := Find(message); !reflect.DeepEqual(got, want) {
t.Errorf("Find(%q) = %v, want %v", message, got, want)
}
})
}
}