validates_zipcode 0.2.4 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,363 +1,30 @@
1
1
  # frozen_string_literal: true
2
2
  require 'spec_helper'
3
3
 
4
+ # NOTE: Spain has the full case specs.
5
+ # Do not apply all checks to all countries for suite speed.
4
6
  describe ValidatesZipcode, '#validate_each' do
5
- context 'Argentina' do
6
- it 'does not add errors with a valid zipcode' do
7
- record = build_record('C1424CHN', 'AR')
8
- zipcode_should_be_valid(record)
9
- end
10
-
11
- it 'adds errors with an invalid Zipcode' do
12
- %w[1234 12345 D0D0D0 invalid_zip].each do |zipcode|
13
- record = build_record(zipcode, 'AR')
14
- zipcode_should_be_invalid(record, zipcode)
15
- end
16
- end
17
- end
18
-
19
- context 'Australia and New Zeland' do
20
- it 'does not add errors with a valid zipcode' do
21
- %w[AU NZ].each do |code|
22
- record = build_record('9310', code)
23
- zipcode_should_be_valid(record)
24
- end
25
- end
26
-
27
- it 'adds errors with an invalid Zipcode' do
28
- %w[AU NZ].each do |code|
29
- %w[C1424CHN 12345 invalid_zip].each do |zipcode|
30
- record = build_record(zipcode, code)
31
- zipcode_should_be_invalid(record, zipcode)
7
+ TEST_DATA.each do |country_code, values|
8
+ context country_code do
9
+ context 'validates with valid zipcodes' do
10
+ values[:valid].each do |zipcode|
11
+ it zipcode do
12
+ record = build_record(zipcode, country_code)
13
+ zipcode_should_be_valid(record)
14
+ end
32
15
  end
33
16
  end
34
- end
35
- end
36
-
37
- context 'Brazil' do
38
- it 'validates with a valid zipcode' do
39
- ['72315', '72315-500', '72315500', '24210-325', '24210325'].each do |zipcode|
40
- record = build_record(zipcode, 'BR')
41
- zipcode_should_be_valid(record)
42
- end
43
- end
44
-
45
- it 'does not validate with an invalid zipcode' do
46
- record = build_record('723155', 'BR')
47
- zipcode_should_be_invalid(record, '723155')
48
- end
49
- end
50
-
51
- context 'Canada' do
52
- it 'does not add errors with a valid zipcode' do
53
- record = build_record('A1J2Z9', 'CA')
54
- zipcode_should_be_valid(record)
55
- end
56
-
57
- it 'adds errors with an invalid Zipcode' do
58
- %w[C1424CHN 12345 D0D0D0 invalid_zip].each do |zipcode|
59
- record = build_record(zipcode, 'CA')
60
- zipcode_should_be_invalid(record, zipcode)
61
- end
62
- end
63
- end
64
-
65
- context 'Chile' do
66
- it 'does not add errors with a valid zipcode' do
67
- ['123-1233', '000-0000', '1234567'].each do |zipcode|
68
- record = build_record(zipcode, 'CL')
69
- zipcode_should_be_valid(record)
70
- end
71
- end
72
-
73
- it 'adds errors with an invalid Zipcode' do
74
- ['1234', '12345', 'D0D0D0', 'invalid_zip', 'C1424CHN', '122-12345'].each do |zipcode|
75
- record = build_record(zipcode, 'CL')
76
- zipcode_should_be_invalid(record, zipcode)
77
- end
78
- end
79
- end
80
-
81
- context 'Czech' do
82
- it 'validates with a valid zipcode' do
83
- ['12000', '721 00'].each do |zipcode|
84
- record = build_record(zipcode, 'CZ')
85
- zipcode_should_be_valid(record)
86
- end
87
- end
88
-
89
- it 'does not validate with an invalid zipcode' do
90
- record = build_record('981 32', 'CZ')
91
- zipcode_should_be_invalid(record, '981 32')
92
- end
93
- end
94
-
95
- context 'Ireland' do
96
- it 'does not add errors with a valid postcode - old format' do
97
- ['D02 AF30', 'X91 PK81', 'V94 H2PP', 'D07 R6YE', 'D6W1234',
98
- 'A230984', 'D00AV92', 'Y631FHK', 'A000000', 'D44N4X4'].each do |zipcode|
99
- record = build_record(zipcode, 'IE')
100
- zipcode_should_be_valid(record)
101
- end
102
- end
103
-
104
- it 'adds errors with an invalid Zipcode' do
105
- ['1234', '12345-12345', 'invalid_zip'].each do |zipcode|
106
- record = build_record(zipcode, 'IE')
107
- zipcode_should_be_invalid(record, zipcode)
108
- end
109
- end
110
- end
111
-
112
- context 'Israel' do
113
- it 'validates with a valid zipcode' do
114
- %w[1029200 880000 90001].each do |zipcode|
115
- record = build_record(zipcode, 'IL')
116
- zipcode_should_be_valid(record)
117
- end
118
- end
119
-
120
- it 'does not validate with an invalid zipcode' do
121
- record = build_record('1200', 'IL')
122
- zipcode_should_be_invalid(record, '1200')
123
- end
124
- end
125
-
126
- context 'Japan' do
127
- it 'validates with a valid zipcode' do
128
- %w[1029200 102-9200 408-0301 207-1000].each do |zipcode|
129
- record = build_record(zipcode, 'JP')
130
- zipcode_should_be_valid(record)
131
- end
132
- end
133
-
134
- it 'does not validate with an invalid zipcode' do
135
- record = build_record('1200', 'JP')
136
- zipcode_should_be_invalid(record, '1200')
137
- end
138
- end
139
-
140
- context 'Lithuania' do
141
- it 'validates with a valid zipcode' do
142
- record = build_record('LT-00110', 'LT')
143
- zipcode_should_be_valid(record)
144
- record = build_record('00110', 'LT')
145
- zipcode_should_be_valid(record)
146
- end
147
-
148
- it 'does not validate with an invalid zipcode' do
149
- record = build_record('2100', 'LT')
150
- zipcode_should_be_invalid(record, '2100')
151
- record = build_record('LT-2100', 'LT')
152
- zipcode_should_be_invalid(record, 'LT-2100')
153
- record = build_record('LT21006', 'LT')
154
- zipcode_should_be_invalid(record, 'LT21006')
155
- end
156
- end
157
-
158
- context 'Luxembourg' do
159
- it 'does not add errors with a valid zipcode' do
160
- ['L-5635', '5635'].each do |zipcode|
161
- record = build_record(zipcode, 'LU')
162
- zipcode_should_be_valid(record)
163
- end
164
- end
165
-
166
- it 'adds errors with an invalid Zipcode' do
167
- ['124', '12345-12345', 'D0D0D0', 'invalid_zip'].each do |zipcode|
168
- record = build_record(zipcode, 'LU')
169
- zipcode_should_be_invalid(record, zipcode)
170
- end
171
- end
172
- end
173
-
174
- context 'Mauritius' do
175
- it 'validates with a valid zipcode' do
176
- %w[42602 A2101 r6414].each do |zipcode|
177
- record = build_record(zipcode, 'MU')
178
- zipcode_should_be_valid(record)
179
- end
180
- end
181
-
182
- it 'does not validate with an invalid zipcode' do
183
- %w[05678 B4242].each do |zipcode|
184
- record = build_record(zipcode, 'MU')
185
- zipcode_should_be_invalid(record, zipcode)
186
- end
187
- end
188
- end
189
-
190
- context 'Moldova' do
191
- it 'validates with a valid zipcode' do
192
- record = build_record('MD2001', 'MD')
193
- zipcode_should_be_valid(record)
194
- end
195
-
196
- it 'does not validate with an invalid zipcode' do
197
- record = build_record('MD-2100', 'MD')
198
- zipcode_should_be_invalid(record, 'MD-2100')
199
- end
200
- end
201
-
202
- context 'Panama' do
203
- it 'validates with a valid zipcode' do
204
- %w[0800 6369].each do |zipcode|
205
- record = build_record(zipcode, 'PA')
206
- zipcode_should_be_valid(record)
207
- end
208
- end
209
-
210
- it 'does not validate with an invalid zipcode' do
211
- %w[10800 369 A341].each do |zipcode|
212
- record = build_record(zipcode, 'PA')
213
- zipcode_should_be_invalid(record, zipcode)
214
- end
215
- end
216
- end
217
-
218
- context 'Portugal' do
219
- it 'validates with a valid zipcode' do
220
- ['4500', '4500-250'].each do |zipcode|
221
- record = build_record(zipcode, 'PT')
222
- zipcode_should_be_valid(record)
223
- end
224
- end
225
-
226
- it 'does not validate with an invalid zipcode' do
227
- record = build_record('4500-2500', 'PT')
228
- zipcode_should_be_invalid(record, '4500-2500')
229
- end
230
- end
231
-
232
- context 'Serbia' do
233
- it 'validates with a valid zipcode' do
234
- record = build_record('21000', 'RS')
235
- zipcode_should_be_valid(record)
236
- end
237
-
238
- it 'does not validate with an invalid zipcode' do
239
- record = build_record('2100', 'RS')
240
- zipcode_should_be_invalid(record, '2100')
241
- end
242
- end
243
-
244
- context 'Slovakia' do
245
- it 'validates with a valid zipcode' do
246
- ['83102', '911 05', '094 12'].each do |zipcode|
247
- record = build_record(zipcode, 'SK')
248
- zipcode_should_be_valid(record)
249
- end
250
- end
251
-
252
- it 'does not validate with an invalid zipcode' do
253
- record = build_record('120 00', 'SK')
254
- zipcode_should_be_invalid(record, '120 00')
255
- end
256
- end
257
-
258
- context 'Spain' do
259
- it 'does not add errors with a valid zipcode' do
260
- record = build_record('93108', 'ES')
261
- zipcode_should_be_valid(record)
262
- end
263
-
264
- it 'adds errors with an invalid Zipcode' do
265
- ['1234', '12345-12345', 'D0D0D0', 'invalid_zip'].each do |zipcode|
266
- record = build_record(zipcode, 'ES')
267
- zipcode_should_be_invalid(record, zipcode)
268
- end
269
- end
270
- end
271
-
272
- context 'South Korea' do
273
- it 'validates with a valid zipcode' do
274
- ['72315', '723-150', '11011', '110-110'].each do |zipcode|
275
- record = build_record(zipcode, 'KR')
276
- zipcode_should_be_valid(record)
277
- end
278
- end
279
-
280
- it 'does not validate with an invalid zipcode' do
281
- record = build_record('723155', 'KR')
282
- zipcode_should_be_invalid(record, '723155')
283
- end
284
- end
285
-
286
- context 'Taiwan' do
287
- it 'validates with a valid zipcode' do
288
- ['833', '74144'].each do |zipcode|
289
- record = build_record(zipcode, 'TW')
290
- zipcode_should_be_valid(record)
291
- end
292
- end
293
17
 
294
- it 'does not validate with an invalid zipcode' do
295
- record = build_record('4329', 'TW')
296
- zipcode_should_be_invalid(record, '4329')
297
- end
298
- end
18
+ context 'does not validate with invalid zipcodes' do
19
+ values[:invalid].each do |zipcode|
20
+ display_name = zipcode.nil? ? 'nil' : zipcode.blank? ? 'blank' : zipcode
299
21
 
300
- %w[UK GB].each do |cc|
301
- context cc do
302
- it 'validates with a valid zipcode' do
303
- [
304
- 'ID1 1QD',
305
- 'M32 0JG',
306
- 'NE30 1DP',
307
- 'OX49 5NU',
308
- 'SW1A 2AA',
309
- 'W1K 7DA',
310
- 'id1 1qd',
311
- 'Sw1A 2aA',
312
- 'id11qd',
313
- 'SW1A2AA'
314
- ].each do |zipcode|
315
- record = build_record(zipcode, cc)
316
- zipcode_should_be_valid(record)
22
+ it display_name.to_s do
23
+ record = build_record(zipcode, country_code)
24
+ zipcode_should_be_invalid(record, nil)
25
+ end
317
26
  end
318
27
  end
319
-
320
- it 'does not validate with an invalid zipcode' do
321
- [nil, '', 'nope', 'id11qd1000', '28001'].each do |zipcode|
322
- record = build_record(zipcode, cc)
323
- zipcode_should_be_invalid(record, nil)
324
- end
325
- end
326
- end
327
- end
328
-
329
- context 'USA' do
330
- it 'does not add errors with a valid zipcode' do
331
- record = build_record('93108', 'US')
332
- zipcode_should_be_valid(record)
333
- [12_345, '12345', '12345-1234', '12345-123456', '12345 1234', '12345 123456'].each do |zipcode|
334
- record = build_record(zipcode, 'US')
335
- zipcode_should_be_valid(record)
336
- end
337
- end
338
-
339
- it 'adds errors with an invalid Zipcode' do
340
- ['1234', '12345-12345', 'D0D0D0', 'invalid_zip'].each do |zipcode|
341
- record = build_record(zipcode, 'US')
342
- zipcode_should_be_invalid(record, zipcode)
343
- end
344
- end
345
- end
346
-
347
- context 'Nicaragua' do
348
- it 'validates with a valid zipcode' do
349
- # @see https://en.wikipedia.org/wiki/Postal_codes_in_Nicaragua
350
- ['11002', '11034'].each do |zipcode|
351
- record = build_record(zipcode, 'NI')
352
- zipcode_should_be_valid(record)
353
- end
354
- end
355
-
356
- it 'does not validate with an invalid zipcode' do
357
- ['1002', '111034'].each do |zipcode|
358
- record = build_record(zipcode, 'NI')
359
- zipcode_should_be_invalid(record, zipcode)
360
- end
361
28
  end
362
29
  end
363
30
 
@@ -373,18 +40,30 @@ describe ValidatesZipcode, '#validate_each' do
373
40
  it 'validates with a valid zipcode' do
374
41
  %w[0800 6369].each do |zipcode|
375
42
  record = build_record(zipcode, 'PA')
376
- zipcode_should_be_valid(record, excluded_country_codes: ['PA'])
43
+ zipcode_should_be_valid(record, excluded_country_codes: %w[PA])
377
44
  end
378
45
  end
379
46
 
380
47
  it 'validates with an invalid zipcode' do
381
48
  %w[10800 369 A341].each do |zipcode|
382
49
  record = build_record(zipcode, 'PA')
383
- zipcode_should_be_valid(record, excluded_country_codes: ['PA'])
50
+ zipcode_should_be_valid(record, excluded_country_codes: %w[PA])
384
51
  end
385
52
  end
386
53
  end
387
54
  end
55
+
56
+ context 'with formatting' do
57
+ it 'is true with a valid zipcode for a given country code' do
58
+ zipcode_should_be_valid(build_record('28 108', 'ES'), format: true)
59
+ zipcode_should_be_invalid(build_record('28 108', 'ES'), nil)
60
+ zipcode_should_be_invalid(build_record('28 108', 'ES'), nil, format: false)
61
+
62
+ zipcode_should_be_valid(build_record('V2r-1c8', 'CA'), format: true)
63
+ zipcode_should_be_invalid(build_record('V2r-1c8', 'CA'), nil)
64
+ zipcode_should_be_invalid(build_record('V2r-1c8', 'CA'), nil, format: false)
65
+ end
66
+ end
388
67
  end
389
68
 
390
69
  describe ValidatesZipcode, '.valid?' do
@@ -404,9 +83,29 @@ describe ValidatesZipcode, '.valid?' do
404
83
  end
405
84
 
406
85
  it "is true with an excluded country code - we don't want those to fail and nil is hairy" do
407
- expect(ValidatesZipcode.valid?('XXXX!!!XXXX', 'PA', excluded_country_codes: ['PA'])).to eq(true)
86
+ expect(ValidatesZipcode.valid?('XXXX!!!XXXX', 'PA', excluded_country_codes: %w[PA])).to eq(true)
408
87
  end
409
88
  end
89
+
90
+ context 'with formatting' do
91
+ it 'is true with a valid zipcode for a given country code' do
92
+ expect(ValidatesZipcode.valid?('28 108', 'ES', format: true)).to eq(true)
93
+ expect(ValidatesZipcode.valid?('28 108', 'ES', format: false)).to eq(false)
94
+
95
+ expect(ValidatesZipcode.valid?('V2r-1c8', 'CA', format: true)).to eq(true)
96
+ expect(ValidatesZipcode.valid?('V2r-1c8', 'CA', format: false)).to eq(false)
97
+ end
98
+ end
99
+ end
100
+
101
+ describe ValidatesZipcode, '.format' do
102
+ it 'formats valid zipcodes' do
103
+ expect(ValidatesZipcode.format('Ka9 2dj', 'UK')).to eq('KA9 2DJ')
104
+ end
105
+
106
+ it 'raises for invalid zipcodes' do
107
+ expect { ValidatesZipcode.format('KA9 1tr', 'DE') }.to raise_error(ValidatesZipcode::InvalidZipcodeError)
108
+ end
410
109
  end
411
110
 
412
111
  def zipcode_should_be_valid(record, options = {})
@@ -422,6 +121,14 @@ def zipcode_should_be_invalid(record, _zipcode, options = {})
422
121
  expect(record.errors.messages[:zipcode]).to include 'Zipcode is invalid'
423
122
  end
424
123
 
124
+ def zipcode_should_be_invalid_with_custom_message(record, _zipcode, options = {})
125
+ custom_message = 'is really wrong'
126
+ ValidatesZipcode::Validator.new(options.merge(attributes: :zipcode, message: custom_message)).validate(record)
127
+
128
+ expect(record.errors.size).to eq 1
129
+ expect(record.errors.messages[:zipcode]).to include custom_message
130
+ end
131
+
425
132
  def build_record(zipcode, country_alpha2)
426
133
  ValidationDummyClass.new.tap do |object|
427
134
  object.country_alpha2 = country_alpha2