ibandit 0.1.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.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.rubocop.yml +43 -0
- data/.rubocop_todo.yml +23 -0
- data/CHANGELOG.md +48 -0
- data/Gemfile +3 -0
- data/LICENSE +22 -0
- data/README.md +303 -0
- data/TODO.md +5 -0
- data/bin/build_structure_file.rb +101 -0
- data/circle.yml +19 -0
- data/data/IBANSTRUCTURE.xml +1184 -0
- data/data/IBAN_Registry.txt +70 -0
- data/data/structure_additions.yml +43 -0
- data/ibandit.gemspec +24 -0
- data/lib/ibandit.rb +16 -0
- data/lib/ibandit/check_digit.rb +183 -0
- data/lib/ibandit/errors.rb +5 -0
- data/lib/ibandit/iban.rb +168 -0
- data/lib/ibandit/iban_builder.rb +528 -0
- data/lib/ibandit/structures.yml +703 -0
- data/lib/ibandit/version.rb +3 -0
- data/spec/ibandit/check_digit_spec.rb +130 -0
- data/spec/ibandit/iban_builder_spec.rb +853 -0
- data/spec/ibandit/iban_spec.rb +549 -0
- data/spec/spec_helper.rb +7 -0
- metadata +141 -0
@@ -0,0 +1,549 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ibandit::IBAN do
|
4
|
+
subject(:iban) { described_class.new(iban_code) }
|
5
|
+
let(:iban_code) { 'GB82WEST12345698765432' }
|
6
|
+
|
7
|
+
its(:iban) { is_expected.to eq(iban_code) }
|
8
|
+
|
9
|
+
context 'with a poorly formatted IBAN' do
|
10
|
+
let(:iban_code) { " gb82 WeSt 1234 5698 7654 32\n" }
|
11
|
+
its(:iban) { is_expected.to eq('GB82WEST12345698765432') }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'with nil' do
|
15
|
+
let(:iban_code) { nil }
|
16
|
+
its(:iban) { is_expected.to eq('') }
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'it decomposes the IBAN' do
|
20
|
+
its(:country_code) { is_expected.to eq('GB') }
|
21
|
+
its(:check_digits) { is_expected.to eq('82') }
|
22
|
+
its(:bank_code) { is_expected.to eq('WEST') }
|
23
|
+
its(:branch_code) { is_expected.to eq('123456') }
|
24
|
+
its(:account_number) { is_expected.to eq('98765432') }
|
25
|
+
its(:iban_national_id) { is_expected.to eq('WEST123456') }
|
26
|
+
its(:local_check_digits) { is_expected.to eq('') }
|
27
|
+
|
28
|
+
context 'when the IBAN is blank' do
|
29
|
+
let(:iban_code) { '' }
|
30
|
+
|
31
|
+
its(:country_code) { is_expected.to eq('') }
|
32
|
+
its(:check_digits) { is_expected.to eq('') }
|
33
|
+
its(:bank_code) { is_expected.to eq('') }
|
34
|
+
its(:branch_code) { is_expected.to eq('') }
|
35
|
+
its(:account_number) { is_expected.to eq('') }
|
36
|
+
its(:iban_national_id) { is_expected.to eq('') }
|
37
|
+
its(:bban) { is_expected.to eq('') }
|
38
|
+
its(:local_check_digits) { is_expected.to eq('') }
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe '#to_s' do
|
43
|
+
specify { expect(iban.to_s).to eq('GB82WEST12345698765432') }
|
44
|
+
specify { expect(iban.to_s(:compact)).to eq('GB82WEST12345698765432') }
|
45
|
+
|
46
|
+
it 'returns a prettified string when passed :formatted' do
|
47
|
+
expect(iban.to_s(:formatted)).to eq('GB82 WEST 1234 5698 7654 32')
|
48
|
+
end
|
49
|
+
|
50
|
+
specify { expect { iban.to_s(:russian) }.to raise_error ArgumentError }
|
51
|
+
end
|
52
|
+
|
53
|
+
###############
|
54
|
+
# Validations #
|
55
|
+
###############
|
56
|
+
|
57
|
+
describe '#valid_country_code?' do
|
58
|
+
subject { iban.valid_country_code? }
|
59
|
+
|
60
|
+
context 'with valid details' do
|
61
|
+
it { is_expected.to eq(true) }
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'with an unknown country code' do
|
65
|
+
let(:iban_code) { 'AA123456789123456' }
|
66
|
+
it { is_expected.to eq(false) }
|
67
|
+
|
68
|
+
it 'sets errors on the IBAN' do
|
69
|
+
iban.valid_country_code?
|
70
|
+
expect(iban.errors).to include(:country_code)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#valid_check_digits?' do
|
76
|
+
subject { iban.valid_check_digits? }
|
77
|
+
|
78
|
+
context 'with valid details' do
|
79
|
+
let(:iban_code) { 'GB82WEST12345698765432' }
|
80
|
+
it { is_expected.to eq(true) }
|
81
|
+
|
82
|
+
context 'where the check digit is zero-padded' do
|
83
|
+
let(:iban_code) { 'GB06WEST12345698765442' }
|
84
|
+
it { is_expected.to eq(true) }
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context 'with invalid details' do
|
89
|
+
let(:iban_code) { 'GB12WEST12345698765432' }
|
90
|
+
it { is_expected.to eq(false) }
|
91
|
+
|
92
|
+
it 'sets errors on the IBAN' do
|
93
|
+
iban.valid_check_digits?
|
94
|
+
expect(iban.errors).to include(:check_digits)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'with invalid characters' do
|
99
|
+
let(:iban_code) { 'AA82-EST123456987654' }
|
100
|
+
it { is_expected.to be_nil }
|
101
|
+
|
102
|
+
it 'does not set errors on the IBAN' do
|
103
|
+
iban.valid_check_digits?
|
104
|
+
expect(iban.errors).to_not include(:check_digits)
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'with an empty IBAN' do
|
109
|
+
let(:iban_code) { '' }
|
110
|
+
it { is_expected.to be_nil }
|
111
|
+
|
112
|
+
it 'does not set errors on the IBAN' do
|
113
|
+
iban.valid_check_digits?
|
114
|
+
expect(iban.errors).to_not include(:check_digits)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
describe '#valid_length?' do
|
120
|
+
subject { iban.valid_length? }
|
121
|
+
|
122
|
+
context 'with valid details' do
|
123
|
+
let(:iban_code) { 'GB82WEST12345698765432' }
|
124
|
+
it { is_expected.to eq(true) }
|
125
|
+
end
|
126
|
+
|
127
|
+
context 'with invalid details' do
|
128
|
+
let(:iban_code) { 'GB82WEST123456987654' }
|
129
|
+
it { is_expected.to eq(false) }
|
130
|
+
|
131
|
+
it 'sets errors on the IBAN' do
|
132
|
+
iban.valid_length?
|
133
|
+
expect(iban.errors).to include(:length)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
context 'with an invalid country_code' do
|
138
|
+
let(:iban_code) { 'AA82WEST123456987654' }
|
139
|
+
it { is_expected.to be_nil }
|
140
|
+
|
141
|
+
it 'does not set errors on the IBAN' do
|
142
|
+
iban.valid_length?
|
143
|
+
expect(iban.errors).to_not include(:length)
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
describe '#valid_characters?' do
|
149
|
+
subject { iban.valid_characters? }
|
150
|
+
|
151
|
+
context 'with valid details' do
|
152
|
+
let(:iban_code) { 'GB82WEST12345698765432' }
|
153
|
+
it { is_expected.to eq(true) }
|
154
|
+
end
|
155
|
+
|
156
|
+
context 'with invalid details' do
|
157
|
+
let(:iban_code) { 'GB-123ABCD' }
|
158
|
+
it { is_expected.to eq(false) }
|
159
|
+
|
160
|
+
it 'sets errors on the IBAN' do
|
161
|
+
iban.valid_characters?
|
162
|
+
expect(iban.errors).to include(:characters)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
describe '#valid_format?' do
|
168
|
+
subject { iban.valid_format? }
|
169
|
+
|
170
|
+
context 'with valid details' do
|
171
|
+
let(:iban_code) { 'GB82WEST12345698765432' }
|
172
|
+
it { is_expected.to eq(true) }
|
173
|
+
end
|
174
|
+
|
175
|
+
context 'with invalid details' do
|
176
|
+
let(:iban_code) { 'GB82WEST12AAAAAA7654' }
|
177
|
+
it { is_expected.to eq(false) }
|
178
|
+
|
179
|
+
it 'sets errors on the IBAN' do
|
180
|
+
iban.valid_format?
|
181
|
+
expect(iban.errors).to include(:format)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
context 'with an invalid country_code' do
|
186
|
+
let(:iban_code) { 'AA82WEST12AAAAAA7654' }
|
187
|
+
it { is_expected.to be_nil }
|
188
|
+
|
189
|
+
it 'does not set errors on the IBAN' do
|
190
|
+
iban.valid_format?
|
191
|
+
expect(iban.errors).to_not include(:format)
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe '#valid?' do
|
197
|
+
describe 'validations called' do
|
198
|
+
after { iban.valid? }
|
199
|
+
|
200
|
+
specify { expect(iban).to receive(:valid_country_code?).at_least(1) }
|
201
|
+
specify { expect(iban).to receive(:valid_characters?).at_least(1) }
|
202
|
+
specify { expect(iban).to receive(:valid_check_digits?).at_least(1) }
|
203
|
+
specify { expect(iban).to receive(:valid_length?).at_least(1) }
|
204
|
+
specify { expect(iban).to receive(:valid_format?).at_least(1) }
|
205
|
+
end
|
206
|
+
|
207
|
+
context 'for a valid Albanian IBAN' do
|
208
|
+
let(:iban_code) { 'AL47 2121 1009 0000 0002 3569 8741' }
|
209
|
+
it { is_expected.to be_valid }
|
210
|
+
end
|
211
|
+
|
212
|
+
context 'for a valid Andorran IBAN' do
|
213
|
+
let(:iban_code) { 'AD12 0001 2030 2003 5910 0100' }
|
214
|
+
it { is_expected.to be_valid }
|
215
|
+
end
|
216
|
+
|
217
|
+
context 'for a valid Austrian IBAN' do
|
218
|
+
let(:iban_code) { 'AT61 1904 3002 3457 3201' }
|
219
|
+
it { is_expected.to be_valid }
|
220
|
+
end
|
221
|
+
|
222
|
+
context 'for a valid Azerbaijanian IBAN' do
|
223
|
+
let(:iban_code) { 'AZ21 NABZ 0000 0000 1370 1000 1944' }
|
224
|
+
it { is_expected.to be_valid }
|
225
|
+
end
|
226
|
+
|
227
|
+
context 'for a valid Bahrainian IBAN' do
|
228
|
+
let(:iban_code) { 'BH67 BMAG 0000 1299 1234 56' }
|
229
|
+
it { is_expected.to be_valid }
|
230
|
+
end
|
231
|
+
|
232
|
+
context 'for a valid Belgian IBAN' do
|
233
|
+
let(:iban_code) { 'BE62 5100 0754 7061' }
|
234
|
+
it { is_expected.to be_valid }
|
235
|
+
end
|
236
|
+
|
237
|
+
context 'for a valid Bosnian IBAN' do
|
238
|
+
let(:iban_code) { 'BA39 1290 0794 0102 8494' }
|
239
|
+
it { is_expected.to be_valid }
|
240
|
+
end
|
241
|
+
|
242
|
+
context 'for a valid Bulgarian IBAN' do
|
243
|
+
let(:iban_code) { 'BG80 BNBG 9661 1020 3456 78' }
|
244
|
+
it { is_expected.to be_valid }
|
245
|
+
end
|
246
|
+
|
247
|
+
context 'for a valid Croatian IBAN' do
|
248
|
+
let(:iban_code) { 'HR12 1001 0051 8630 0016 0' }
|
249
|
+
it { is_expected.to be_valid }
|
250
|
+
end
|
251
|
+
|
252
|
+
context 'for a valid Cypriot IBAN' do
|
253
|
+
let(:iban_code) { 'CY17 0020 0128 0000 0012 0052 7600' }
|
254
|
+
it { is_expected.to be_valid }
|
255
|
+
end
|
256
|
+
|
257
|
+
context 'for a valid Czech IBAN' do
|
258
|
+
let(:iban_code) { 'CZ65 0800 0000 1920 0014 5399' }
|
259
|
+
it { is_expected.to be_valid }
|
260
|
+
end
|
261
|
+
|
262
|
+
context 'for a valid Danish IBAN' do
|
263
|
+
let(:iban_code) { 'DK50 0040 0440 1162 43' }
|
264
|
+
it { is_expected.to be_valid }
|
265
|
+
end
|
266
|
+
|
267
|
+
context 'for a valid Estonian IBAN' do
|
268
|
+
let(:iban_code) { 'EE38 2200 2210 2014 5685' }
|
269
|
+
it { is_expected.to be_valid }
|
270
|
+
end
|
271
|
+
|
272
|
+
context 'for a valid Faroe Islands IBAN' do
|
273
|
+
let(:iban_code) { 'FO97 5432 0388 8999 44' }
|
274
|
+
it { is_expected.to be_valid }
|
275
|
+
end
|
276
|
+
|
277
|
+
context 'for a valid Finnish IBAN' do
|
278
|
+
let(:iban_code) { 'FI21 1234 5600 0007 85' }
|
279
|
+
it { is_expected.to be_valid }
|
280
|
+
end
|
281
|
+
|
282
|
+
context 'for a valid French IBAN' do
|
283
|
+
let(:iban_code) { 'FR14 2004 1010 0505 0001 3M02 606' }
|
284
|
+
it { is_expected.to be_valid }
|
285
|
+
end
|
286
|
+
|
287
|
+
context 'for a valid Georgian IBAN' do
|
288
|
+
let(:iban_code) { 'GE29 NB00 0000 0101 9049 17' }
|
289
|
+
it { is_expected.to be_valid }
|
290
|
+
end
|
291
|
+
|
292
|
+
context 'for a valid German IBAN' do
|
293
|
+
let(:iban_code) { 'DE89 3704 0044 0532 0130 00' }
|
294
|
+
it { is_expected.to be_valid }
|
295
|
+
end
|
296
|
+
|
297
|
+
context 'for a valid Gibraltan IBAN' do
|
298
|
+
let(:iban_code) { 'GI75 NWBK 0000 0000 7099 453' }
|
299
|
+
it { is_expected.to be_valid }
|
300
|
+
end
|
301
|
+
|
302
|
+
context 'for a valid Greek IBAN' do
|
303
|
+
let(:iban_code) { 'GR16 0110 1250 0000 0001 2300 695' }
|
304
|
+
it { is_expected.to be_valid }
|
305
|
+
end
|
306
|
+
|
307
|
+
context 'for a valid Greenland IBAN' do
|
308
|
+
let(:iban_code) { 'GL56 0444 9876 5432 10' }
|
309
|
+
it { is_expected.to be_valid }
|
310
|
+
end
|
311
|
+
|
312
|
+
context 'for a valid Hungarian IBAN' do
|
313
|
+
let(:iban_code) { 'HU42 1177 3016 1111 1018 0000 0000' }
|
314
|
+
it { is_expected.to be_valid }
|
315
|
+
end
|
316
|
+
|
317
|
+
context 'for a valid Icelandic IBAN' do
|
318
|
+
let(:iban_code) { 'IS14 0159 2600 7654 5510 7303 39' }
|
319
|
+
it { is_expected.to be_valid }
|
320
|
+
end
|
321
|
+
|
322
|
+
context 'for a valid Irish IBAN' do
|
323
|
+
let(:iban_code) { 'IE29 AIBK 9311 5212 3456 78' }
|
324
|
+
it { is_expected.to be_valid }
|
325
|
+
end
|
326
|
+
|
327
|
+
context 'for a valid Israeli IBAN' do
|
328
|
+
let(:iban_code) { 'IL62 0108 0000 0009 9999 999' }
|
329
|
+
it { is_expected.to be_valid }
|
330
|
+
end
|
331
|
+
|
332
|
+
context 'for a valid Italian IBAN' do
|
333
|
+
let(:iban_code) { 'IT40 S054 2811 1010 0000 0123 456' }
|
334
|
+
it { is_expected.to be_valid }
|
335
|
+
end
|
336
|
+
|
337
|
+
context 'for a valid Jordanian IBAN' do
|
338
|
+
let(:iban_code) { 'JO94 CBJO 0010 0000 0000 0131 0003 02' }
|
339
|
+
it { is_expected.to be_valid }
|
340
|
+
end
|
341
|
+
|
342
|
+
context 'for a valid Kuwaiti IBAN' do
|
343
|
+
let(:iban_code) { 'KW81 CBKU 0000 0000 0000 1234 5601 01' }
|
344
|
+
it { is_expected.to be_valid }
|
345
|
+
end
|
346
|
+
|
347
|
+
context 'for a valid Latvian IBAN' do
|
348
|
+
let(:iban_code) { 'LV80 BANK 0000 4351 9500 1' }
|
349
|
+
it { is_expected.to be_valid }
|
350
|
+
end
|
351
|
+
|
352
|
+
context 'for a valid Lebanese IBAN' do
|
353
|
+
let(:iban_code) { 'LB62 0999 0000 0001 0019 0122 9114' }
|
354
|
+
it { is_expected.to be_valid }
|
355
|
+
end
|
356
|
+
|
357
|
+
context 'for a valid Liechtensteinian IBAN' do
|
358
|
+
let(:iban_code) { 'LI21 0881 0000 2324 013A A' }
|
359
|
+
it { is_expected.to be_valid }
|
360
|
+
end
|
361
|
+
|
362
|
+
context 'for a valid Lithuanian IBAN' do
|
363
|
+
let(:iban_code) { 'LT12 1000 0111 0100 1000' }
|
364
|
+
it { is_expected.to be_valid }
|
365
|
+
end
|
366
|
+
|
367
|
+
context 'for a valid Luxembourgian IBAN' do
|
368
|
+
let(:iban_code) { 'LU28 0019 4006 4475 0000' }
|
369
|
+
it { is_expected.to be_valid }
|
370
|
+
end
|
371
|
+
|
372
|
+
context 'for a valid Macedonian IBAN' do
|
373
|
+
let(:iban_code) { 'MK072 5012 0000 0589 84' }
|
374
|
+
it { is_expected.to be_valid }
|
375
|
+
end
|
376
|
+
|
377
|
+
context 'for a valid Maltese IBAN' do
|
378
|
+
let(:iban_code) { 'MT84 MALT 0110 0001 2345 MTLC AST0 01S' }
|
379
|
+
it { is_expected.to be_valid }
|
380
|
+
end
|
381
|
+
|
382
|
+
context 'for a valid Maurititanian IBAN' do
|
383
|
+
let(:iban_code) { 'MU17 BOMM 0101 1010 3030 0200 000M UR' }
|
384
|
+
it { is_expected.to be_valid }
|
385
|
+
end
|
386
|
+
|
387
|
+
context 'for a valid Moldovan IBAN' do
|
388
|
+
let(:iban_code) { 'MD24 AG00 0225 1000 1310 4168' }
|
389
|
+
it { is_expected.to be_valid }
|
390
|
+
end
|
391
|
+
|
392
|
+
context 'for a valid Monocan IBAN' do
|
393
|
+
let(:iban_code) { 'MC93 2005 2222 1001 1223 3M44 555' }
|
394
|
+
it { is_expected.to be_valid }
|
395
|
+
end
|
396
|
+
|
397
|
+
context 'for a valid Montenegrian IBAN' do
|
398
|
+
let(:iban_code) { 'ME25 5050 0001 2345 6789 51' }
|
399
|
+
it { is_expected.to be_valid }
|
400
|
+
end
|
401
|
+
|
402
|
+
context 'for a valid Dutch IBAN' do
|
403
|
+
let(:iban_code) { 'NL39 RABO 0300 0652 64' }
|
404
|
+
it { is_expected.to be_valid }
|
405
|
+
end
|
406
|
+
|
407
|
+
context 'for a valid Norwegian IBAN' do
|
408
|
+
let(:iban_code) { 'NO93 8601 1117 947' }
|
409
|
+
it { is_expected.to be_valid }
|
410
|
+
end
|
411
|
+
|
412
|
+
context 'for a valid Pakistani IBAN' do
|
413
|
+
let(:iban_code) { 'PK36 SCBL 0000 0011 2345 6702' }
|
414
|
+
it { is_expected.to be_valid }
|
415
|
+
end
|
416
|
+
|
417
|
+
context 'for a valid Polish IBAN' do
|
418
|
+
let(:iban_code) { 'PL60 1020 1026 0000 0422 7020 1111' }
|
419
|
+
it { is_expected.to be_valid }
|
420
|
+
end
|
421
|
+
|
422
|
+
context 'for a valid Potuguese IBAN' do
|
423
|
+
let(:iban_code) { 'PT50 0002 0123 1234 5678 9015 4' }
|
424
|
+
it { is_expected.to be_valid }
|
425
|
+
end
|
426
|
+
|
427
|
+
context 'for a valid Qatari IBAN' do
|
428
|
+
let(:iban_code) { 'QA58 DOHB 0000 1234 5678 90AB CDEF G' }
|
429
|
+
it { is_expected.to be_valid }
|
430
|
+
end
|
431
|
+
|
432
|
+
context 'for a valid Romanian IBAN' do
|
433
|
+
let(:iban_code) { 'RO49 AAAA 1B31 0075 9384 0000' }
|
434
|
+
it { is_expected.to be_valid }
|
435
|
+
end
|
436
|
+
|
437
|
+
context 'for a valid San Marinian IBAN' do
|
438
|
+
let(:iban_code) { 'SM86 U032 2509 8000 0000 0270 100' }
|
439
|
+
it { is_expected.to be_valid }
|
440
|
+
end
|
441
|
+
|
442
|
+
context 'for a valid Saudi IBAN' do
|
443
|
+
let(:iban_code) { 'SA03 8000 0000 6080 1016 7519' }
|
444
|
+
it { is_expected.to be_valid }
|
445
|
+
end
|
446
|
+
|
447
|
+
context 'for a valid Serbian IBAN' do
|
448
|
+
let(:iban_code) { 'RS35 2600 0560 1001 6113 79' }
|
449
|
+
it { is_expected.to be_valid }
|
450
|
+
end
|
451
|
+
|
452
|
+
context 'for a valid Slovakian IBAN' do
|
453
|
+
let(:iban_code) { 'SK31 1200 0000 1987 4263 7541' }
|
454
|
+
it { is_expected.to be_valid }
|
455
|
+
end
|
456
|
+
|
457
|
+
context 'for a valid Slovenian IBAN' do
|
458
|
+
let(:iban_code) { 'SI56 1910 0000 0123 438' }
|
459
|
+
it { is_expected.to be_valid }
|
460
|
+
end
|
461
|
+
|
462
|
+
context 'for a valid Spanish IBAN' do
|
463
|
+
let(:iban_code) { 'ES80 2310 0001 1800 0001 2345' }
|
464
|
+
it { is_expected.to be_valid }
|
465
|
+
end
|
466
|
+
|
467
|
+
context 'for a valid Swedish IBAN' do
|
468
|
+
let(:iban_code) { 'SE35 5000 0000 0549 1000 0003' }
|
469
|
+
it { is_expected.to be_valid }
|
470
|
+
end
|
471
|
+
|
472
|
+
context 'for a valid Swiss IBAN' do
|
473
|
+
let(:iban_code) { 'CH93 0076 2011 6238 5295 7' }
|
474
|
+
it { is_expected.to be_valid }
|
475
|
+
end
|
476
|
+
|
477
|
+
context 'for a valid Tunisian IBAN' do
|
478
|
+
let(:iban_code) { 'TN59 1000 6035 1835 9847 8831' }
|
479
|
+
it { is_expected.to be_valid }
|
480
|
+
end
|
481
|
+
|
482
|
+
context 'for a valid Turkish IBAN' do
|
483
|
+
let(:iban_code) { 'TR33 0006 1005 1978 6457 8413 26' }
|
484
|
+
it { is_expected.to be_valid }
|
485
|
+
end
|
486
|
+
|
487
|
+
context 'for a valid UAE IBAN' do
|
488
|
+
let(:iban_code) { 'AE07 0331 2345 6789 0123 456' }
|
489
|
+
it { is_expected.to be_valid }
|
490
|
+
end
|
491
|
+
|
492
|
+
context 'for a valid UK IBAN' do
|
493
|
+
let(:iban_code) { 'GB82 WEST 1234 5698 7654 32' }
|
494
|
+
it { is_expected.to be_valid }
|
495
|
+
end
|
496
|
+
end
|
497
|
+
|
498
|
+
describe '#local_check_digits' do
|
499
|
+
context 'with a Belgian IBAN' do
|
500
|
+
let(:iban_code) { 'BE62510007547061' }
|
501
|
+
its(:local_check_digits) { is_expected.to eq('61') }
|
502
|
+
end
|
503
|
+
|
504
|
+
context 'with a French IBAN' do
|
505
|
+
let(:iban_code) { 'FR1234567890123456789012345' }
|
506
|
+
its(:local_check_digits) { is_expected.to eq('45') }
|
507
|
+
end
|
508
|
+
|
509
|
+
context 'with a Monocan IBAN' do
|
510
|
+
let(:iban_code) { 'MC9320052222100112233M44555' }
|
511
|
+
its(:local_check_digits) { is_expected.to eq('55') }
|
512
|
+
end
|
513
|
+
|
514
|
+
context 'with a Spanish IBAN' do
|
515
|
+
let(:iban_code) { 'ES1212345678911234567890' }
|
516
|
+
its(:local_check_digits) { is_expected.to eq('91') }
|
517
|
+
end
|
518
|
+
|
519
|
+
context 'with an Italian IBAN' do
|
520
|
+
let(:iban_code) { 'IT12A1234567890123456789012' }
|
521
|
+
its(:local_check_digits) { is_expected.to eq('A') }
|
522
|
+
end
|
523
|
+
|
524
|
+
context 'with an Estonian IBAN' do
|
525
|
+
let(:iban_code) { 'EE382200221020145685' }
|
526
|
+
its(:local_check_digits) { is_expected.to eq('5') }
|
527
|
+
end
|
528
|
+
|
529
|
+
context 'with an Finnish IBAN' do
|
530
|
+
let(:iban_code) { 'FI2112345600000785' }
|
531
|
+
its(:local_check_digits) { is_expected.to eq('5') }
|
532
|
+
end
|
533
|
+
|
534
|
+
context 'with an Portuguese IBAN' do
|
535
|
+
let(:iban_code) { 'PT50000201231234567890154' }
|
536
|
+
its(:local_check_digits) { is_expected.to eq('54') }
|
537
|
+
end
|
538
|
+
|
539
|
+
context 'with a Slovakian IBAN' do
|
540
|
+
let(:iban_code) { 'SK3112000000198742637541' }
|
541
|
+
its(:local_check_digits) { is_expected.to eq('9') }
|
542
|
+
end
|
543
|
+
|
544
|
+
context 'with a Dutch IBAN' do
|
545
|
+
let(:iban_code) { 'NL91ABNA0417164300' }
|
546
|
+
its(:local_check_digits) { is_expected.to eq('0') }
|
547
|
+
end
|
548
|
+
end
|
549
|
+
end
|