ibandit 0.2.1 → 0.3.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 +4 -4
- data/CHANGELOG.md +10 -3
- data/README.md +3 -0
- data/bin/build_structure_file.rb +41 -5
- data/data/raw/structure_additions.yml +43 -0
- data/data/structures.yml +157 -0
- data/ibandit.gemspec +1 -1
- data/lib/ibandit/iban.rb +147 -60
- data/lib/ibandit/iban_assembler.rb +117 -0
- data/lib/ibandit/iban_splitter.rb +66 -0
- data/lib/ibandit/local_details_cleaner.rb +298 -0
- data/lib/ibandit/version.rb +1 -1
- data/lib/ibandit.rb +9 -1
- data/spec/ibandit/iban_assembler_spec.rb +567 -0
- data/spec/ibandit/iban_spec.rb +294 -13
- data/spec/ibandit/iban_splitter_spec.rb +41 -0
- data/spec/ibandit/local_details_cleaner_spec.rb +688 -0
- metadata +10 -6
- data/lib/ibandit/iban_builder.rb +0 -539
- data/spec/ibandit/iban_builder_spec.rb +0 -892
@@ -0,0 +1,688 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ibandit::LocalDetailsCleaner do
|
4
|
+
subject(:cleaned) { described_class.clean(local_details) }
|
5
|
+
let(:local_details) do
|
6
|
+
{
|
7
|
+
country_code: country_code,
|
8
|
+
bank_code: bank_code,
|
9
|
+
branch_code: branch_code,
|
10
|
+
account_number: account_number
|
11
|
+
}
|
12
|
+
end
|
13
|
+
let(:country_code) { nil }
|
14
|
+
let(:bank_code) { nil }
|
15
|
+
let(:branch_code) { nil }
|
16
|
+
let(:account_number) { nil }
|
17
|
+
|
18
|
+
context 'without country code' do
|
19
|
+
it { is_expected.to eq(local_details) }
|
20
|
+
end
|
21
|
+
|
22
|
+
context 'with an unsupported country code' do
|
23
|
+
let(:country_code) { 'FU' }
|
24
|
+
it { is_expected.to eq(local_details) }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'Austria' do
|
28
|
+
let(:country_code) { 'AT' }
|
29
|
+
let(:bank_code) { '19043' }
|
30
|
+
let(:account_number) { '00234573201' }
|
31
|
+
|
32
|
+
it { is_expected.to eq(local_details) }
|
33
|
+
|
34
|
+
context 'with an account number which needs zero-padding' do
|
35
|
+
let(:account_number) { '234573201' }
|
36
|
+
its([:account_number]) { is_expected.to eq('00234573201') }
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'with an account number under 4 digits' do
|
40
|
+
let(:account_number) { '123' }
|
41
|
+
its([:account_number]) { is_expected.to eq('123') }
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'with a long account number' do
|
45
|
+
let(:account_number) { '234573201999' }
|
46
|
+
it { is_expected.to eq(local_details) }
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'without an account number' do
|
50
|
+
let(:account_number) { nil }
|
51
|
+
it { is_expected.to eq(local_details) }
|
52
|
+
end
|
53
|
+
|
54
|
+
context 'with a short bank code' do
|
55
|
+
let(:bank_code) { '1904' }
|
56
|
+
it { is_expected.to eq(local_details) }
|
57
|
+
end
|
58
|
+
|
59
|
+
context 'with a long bank code' do
|
60
|
+
let(:bank_code) { '190430' }
|
61
|
+
it { is_expected.to eq(local_details) }
|
62
|
+
end
|
63
|
+
|
64
|
+
context 'without a bank code' do
|
65
|
+
let(:bank_code) { nil }
|
66
|
+
it { is_expected.to eq(local_details) }
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'Belgium' do
|
71
|
+
let(:country_code) { 'BE' }
|
72
|
+
let(:account_number) { '510007547061' }
|
73
|
+
|
74
|
+
its([:country_code]) { is_expected.to eq(country_code) }
|
75
|
+
its([:account_number]) { is_expected.to eq(account_number) }
|
76
|
+
its([:bank_code]) { is_expected.to eq('510') }
|
77
|
+
|
78
|
+
context 'with dashes' do
|
79
|
+
let(:account_number) { '510-0075470-61' }
|
80
|
+
its([:bank_code]) { is_expected.to eq('510') }
|
81
|
+
its([:account_number]) { is_expected.to eq('510007547061') }
|
82
|
+
end
|
83
|
+
|
84
|
+
context 'without an account number' do
|
85
|
+
let(:account_number) { nil }
|
86
|
+
it { is_expected.to eq(local_details) }
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'Cyprus' do
|
91
|
+
let(:country_code) { 'CY' }
|
92
|
+
let(:account_number) { '0000001200527600' }
|
93
|
+
let(:bank_code) { '002' }
|
94
|
+
let(:branch_code) { '00128' }
|
95
|
+
|
96
|
+
it { is_expected.to eq(local_details) }
|
97
|
+
|
98
|
+
context 'with a short account number' do
|
99
|
+
let(:account_number) { '1200527600' }
|
100
|
+
its([:account_number]) { is_expected.to eq('0000001200527600') }
|
101
|
+
end
|
102
|
+
|
103
|
+
context 'with a too-short account number' do
|
104
|
+
let(:account_number) { '123456' }
|
105
|
+
its([:account_number]) { is_expected.to eq(account_number) }
|
106
|
+
end
|
107
|
+
|
108
|
+
context 'with a long account number' do
|
109
|
+
let(:account_number) { '00000001200527600' }
|
110
|
+
it { is_expected.to eq(local_details) }
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'without an account number' do
|
114
|
+
let(:account_number) { nil }
|
115
|
+
it { is_expected.to eq(local_details) }
|
116
|
+
end
|
117
|
+
|
118
|
+
context 'with the branch code in the bank code field' do
|
119
|
+
let(:bank_code) { '002 00128' }
|
120
|
+
let(:branch_code) { nil }
|
121
|
+
its([:bank_code]) { is_expected.to eq('002') }
|
122
|
+
its([:branch_code]) { is_expected.to eq('00128') }
|
123
|
+
end
|
124
|
+
|
125
|
+
context 'without a bank code' do
|
126
|
+
let(:bank_code) { nil }
|
127
|
+
it { is_expected.to eq(local_details) }
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context 'Germany' do
|
132
|
+
let(:country_code) { 'DE' }
|
133
|
+
let(:bank_code) { '37040044' }
|
134
|
+
let(:account_number) { '0532013000' }
|
135
|
+
|
136
|
+
it { is_expected.to eq(local_details) }
|
137
|
+
|
138
|
+
context 'without a bank code' do
|
139
|
+
let(:bank_code) { nil }
|
140
|
+
it { is_expected.to eq(local_details) }
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'without an account number' do
|
144
|
+
let(:account_number) { nil }
|
145
|
+
it { is_expected.to eq(local_details) }
|
146
|
+
end
|
147
|
+
|
148
|
+
context 'with an excessively short account number' do
|
149
|
+
let(:account_number) { '666' }
|
150
|
+
its([:account_number]) { is_expected.to eq(account_number) }
|
151
|
+
end
|
152
|
+
|
153
|
+
context 'with a pseudo account number' do
|
154
|
+
let(:bank_code) { '37080040' }
|
155
|
+
let(:account_number) { '111' }
|
156
|
+
its([:bank_code]) { is_expected.to eq(bank_code) }
|
157
|
+
its([:account_number]) { is_expected.to eq('0215022000') }
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
context 'Estonia' do
|
162
|
+
let(:country_code) { 'EE' }
|
163
|
+
let(:account_number) { '0221020145685' }
|
164
|
+
|
165
|
+
its([:bank_code]) { is_expected.to eq('22') }
|
166
|
+
its([:account_number]) { is_expected.to eq('00221020145685') }
|
167
|
+
|
168
|
+
context 'with an account number that needs translating' do
|
169
|
+
let(:account_number) { '111020145685' }
|
170
|
+
its([:bank_code]) { is_expected.to eq('22') }
|
171
|
+
its([:account_number]) { is_expected.to eq('00111020145685') }
|
172
|
+
end
|
173
|
+
|
174
|
+
context 'without an account number' do
|
175
|
+
let(:account_number) { nil }
|
176
|
+
it { is_expected.to eq(local_details) }
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
context 'Spain' do
|
181
|
+
let(:country_code) { 'ES' }
|
182
|
+
let(:bank_code) { '2310' }
|
183
|
+
let(:branch_code) { '0001' }
|
184
|
+
let(:account_number) { '180000012345' }
|
185
|
+
|
186
|
+
it { is_expected.to eq(local_details) }
|
187
|
+
|
188
|
+
context 'with bank and branch codes in the account number' do
|
189
|
+
let(:bank_code) { nil }
|
190
|
+
let(:branch_code) { nil }
|
191
|
+
let(:account_number) { '2310-0001-18-0000012345' }
|
192
|
+
|
193
|
+
its([:bank_code]) { is_expected.to eq('2310') }
|
194
|
+
its([:branch_code]) { is_expected.to eq('0001') }
|
195
|
+
its([:account_number]) { is_expected.to eq('180000012345') }
|
196
|
+
end
|
197
|
+
|
198
|
+
context 'without an account number' do
|
199
|
+
let(:account_number) { nil }
|
200
|
+
it { is_expected.to eq(local_details) }
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
context 'Finland' do
|
205
|
+
let(:country_code) { 'FI' }
|
206
|
+
let(:bank_code) { '123456' }
|
207
|
+
let(:account_number) { '00000785' }
|
208
|
+
|
209
|
+
it { is_expected.to eq(local_details) }
|
210
|
+
|
211
|
+
context 'with a shorter account number' do
|
212
|
+
let(:account_number) { '785' }
|
213
|
+
its([:account_number]) { is_expected.to eq('00000785') }
|
214
|
+
end
|
215
|
+
|
216
|
+
context 'with a savings bank account_number in traditional format' do
|
217
|
+
let(:account_number) { '78510' }
|
218
|
+
let(:bank_code) { '423456' }
|
219
|
+
|
220
|
+
its([:bank_code]) { is_expected.to eq(bank_code) }
|
221
|
+
its([:account_number]) { is_expected.to eq('70008510') }
|
222
|
+
end
|
223
|
+
|
224
|
+
context 'without an account number' do
|
225
|
+
let(:account_number) { nil }
|
226
|
+
it { is_expected.to eq(local_details) }
|
227
|
+
end
|
228
|
+
|
229
|
+
context 'without a bank code' do
|
230
|
+
let(:bank_code) { nil }
|
231
|
+
it { is_expected.to eq(local_details) }
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
context 'France' do
|
236
|
+
let(:country_code) { 'FR' }
|
237
|
+
let(:bank_code) { '20041' }
|
238
|
+
let(:branch_code) { '01005' }
|
239
|
+
let(:account_number) { '0500013M02606' }
|
240
|
+
|
241
|
+
it { is_expected.to eq(local_details) }
|
242
|
+
|
243
|
+
context 'with the RIB key spaced in the account number' do
|
244
|
+
let(:account_number) { '0500013M026 06' }
|
245
|
+
its([:account_number]) { is_expected.to eq('0500013M02606') }
|
246
|
+
end
|
247
|
+
|
248
|
+
context 'with the RIB key hyphenated in the account number' do
|
249
|
+
let(:account_number) { '0500013M026-06' }
|
250
|
+
its([:account_number]) { is_expected.to eq('0500013M02606') }
|
251
|
+
end
|
252
|
+
|
253
|
+
context 'with the RIB key missing' do
|
254
|
+
let(:account_number) { '0500013M026' }
|
255
|
+
it { is_expected.to eq(local_details) }
|
256
|
+
end
|
257
|
+
|
258
|
+
context 'without a bank code' do
|
259
|
+
let(:bank_code) { nil }
|
260
|
+
it { is_expected.to eq(local_details) }
|
261
|
+
end
|
262
|
+
|
263
|
+
context 'without a branch code' do
|
264
|
+
let(:branch_code) { nil }
|
265
|
+
it { is_expected.to eq(local_details) }
|
266
|
+
end
|
267
|
+
|
268
|
+
context 'without an account number' do
|
269
|
+
let(:account_number) { nil }
|
270
|
+
it { is_expected.to eq(local_details) }
|
271
|
+
end
|
272
|
+
end
|
273
|
+
|
274
|
+
context 'United Kingdom' do
|
275
|
+
let(:country_code) { 'GB' }
|
276
|
+
let(:bank_code) { 'BARC' }
|
277
|
+
let(:branch_code) { '200000' }
|
278
|
+
let(:account_number) { '55779911' }
|
279
|
+
|
280
|
+
it { is_expected.to eq(local_details) }
|
281
|
+
|
282
|
+
context 'with the sort code is hyphenated' do
|
283
|
+
let(:branch_code) { '20-00-00' }
|
284
|
+
its([:branch_code]) { is_expected.to eq('200000') }
|
285
|
+
end
|
286
|
+
|
287
|
+
context 'with the sort code spaced' do
|
288
|
+
let(:branch_code) { '20 00 00' }
|
289
|
+
its([:branch_code]) { is_expected.to eq('200000') }
|
290
|
+
end
|
291
|
+
|
292
|
+
context 'with a short account number' do
|
293
|
+
let(:account_number) { '579135' }
|
294
|
+
its([:account_number]) { is_expected.to eq('00579135') }
|
295
|
+
end
|
296
|
+
|
297
|
+
context 'with a too-short account number' do
|
298
|
+
let(:account_number) { '5678' }
|
299
|
+
its([:account_number]) { is_expected.to eq(account_number) }
|
300
|
+
end
|
301
|
+
|
302
|
+
context 'with the account number spaced' do
|
303
|
+
let(:account_number) { '5577 9911' }
|
304
|
+
its([:account_number]) { is_expected.to eq('55779911') }
|
305
|
+
end
|
306
|
+
|
307
|
+
context 'with the account number hyphenated' do
|
308
|
+
let(:account_number) { '5577-9911' }
|
309
|
+
its([:account_number]) { is_expected.to eq('55779911') }
|
310
|
+
end
|
311
|
+
|
312
|
+
context 'without a branch code' do
|
313
|
+
let(:branch_code) { nil }
|
314
|
+
it { is_expected.to eq(local_details) }
|
315
|
+
end
|
316
|
+
|
317
|
+
context 'without a bank code' do
|
318
|
+
let(:bank_code) { nil }
|
319
|
+
it { is_expected.to eq(local_details) }
|
320
|
+
|
321
|
+
context 'with a BIC finder set' do
|
322
|
+
let(:bic_finder) { double }
|
323
|
+
before do
|
324
|
+
allow(bic_finder).to receive(:call).with('GB', '200000').
|
325
|
+
and_return('BARCGB22XXX')
|
326
|
+
Ibandit.bic_finder = bic_finder
|
327
|
+
end
|
328
|
+
after { Ibandit.bic_finder = nil }
|
329
|
+
|
330
|
+
its([:bank_code]) { is_expected.to eq('BARC') }
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
context 'with a bank code and BIC finder set' do
|
335
|
+
let(:bank_code) { 'OVERRIDE' }
|
336
|
+
let(:bic_finder) { double }
|
337
|
+
before do
|
338
|
+
allow(bic_finder).to receive(:call).with('GB', '200000').
|
339
|
+
and_return('BARCGB22XXX')
|
340
|
+
Ibandit.bic_finder = bic_finder
|
341
|
+
end
|
342
|
+
after { Ibandit.bic_finder = nil }
|
343
|
+
|
344
|
+
its([:bank_code]) { is_expected.to eq('OVERRIDE') }
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
context 'Ireland' do
|
349
|
+
let(:country_code) { 'IE' }
|
350
|
+
let(:bank_code) { 'AIBK' }
|
351
|
+
let(:branch_code) { '931152' }
|
352
|
+
let(:account_number) { '12345678' }
|
353
|
+
|
354
|
+
it { is_expected.to eq(local_details) }
|
355
|
+
|
356
|
+
context 'with the sort code is hyphenated' do
|
357
|
+
let(:branch_code) { '93-11-52' }
|
358
|
+
its([:branch_code]) { is_expected.to eq('931152') }
|
359
|
+
end
|
360
|
+
|
361
|
+
context 'with the sort code spaced' do
|
362
|
+
let(:branch_code) { '93 11 52' }
|
363
|
+
its([:branch_code]) { is_expected.to eq('931152') }
|
364
|
+
end
|
365
|
+
|
366
|
+
context 'with a short account number' do
|
367
|
+
let(:account_number) { '579135' }
|
368
|
+
its([:account_number]) { is_expected.to eq('00579135') }
|
369
|
+
end
|
370
|
+
|
371
|
+
context 'with a too-short account number' do
|
372
|
+
let(:account_number) { '5678' }
|
373
|
+
its([:account_number]) { is_expected.to eq(account_number) }
|
374
|
+
end
|
375
|
+
|
376
|
+
context 'with the account number spaced' do
|
377
|
+
let(:account_number) { '5577 9911' }
|
378
|
+
its([:account_number]) { is_expected.to eq('55779911') }
|
379
|
+
end
|
380
|
+
|
381
|
+
context 'with the account number hyphenated' do
|
382
|
+
let(:account_number) { '5577-9911' }
|
383
|
+
its([:account_number]) { is_expected.to eq('55779911') }
|
384
|
+
end
|
385
|
+
|
386
|
+
context 'without a branch code' do
|
387
|
+
let(:branch_code) { nil }
|
388
|
+
it { is_expected.to eq(local_details) }
|
389
|
+
end
|
390
|
+
|
391
|
+
context 'without a bank code' do
|
392
|
+
let(:bank_code) { nil }
|
393
|
+
it { is_expected.to eq(local_details) }
|
394
|
+
|
395
|
+
context 'with a BIC finder set' do
|
396
|
+
let(:bic_finder) { double }
|
397
|
+
before do
|
398
|
+
allow(bic_finder).to receive(:call).with('IE', '931152').
|
399
|
+
and_return('AIBKIE22XXX')
|
400
|
+
Ibandit.bic_finder = bic_finder
|
401
|
+
end
|
402
|
+
after { Ibandit.bic_finder = nil }
|
403
|
+
|
404
|
+
its([:bank_code]) { is_expected.to eq('AIBK') }
|
405
|
+
end
|
406
|
+
end
|
407
|
+
|
408
|
+
context 'with a bank code and BIC finder set' do
|
409
|
+
let(:bank_code) { 'OVERRIDE' }
|
410
|
+
let(:bic_finder) { double }
|
411
|
+
before do
|
412
|
+
allow(bic_finder).to receive(:call).with('IE', '931152').
|
413
|
+
and_return('AIBKIE22XXX')
|
414
|
+
Ibandit.bic_finder = bic_finder
|
415
|
+
end
|
416
|
+
after { Ibandit.bic_finder = nil }
|
417
|
+
|
418
|
+
its([:bank_code]) { is_expected.to eq('OVERRIDE') }
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
context 'Italy' do
|
423
|
+
let(:country_code) { 'IT' }
|
424
|
+
let(:bank_code) { '05428' }
|
425
|
+
let(:branch_code) { '11101' }
|
426
|
+
let(:account_number) { '000000123456' }
|
427
|
+
|
428
|
+
it { is_expected.to eq(local_details) }
|
429
|
+
|
430
|
+
context 'with an explicit check digit' do
|
431
|
+
before { local_details.merge!(check_digit: 'Y') }
|
432
|
+
it { is_expected.to eq(local_details) }
|
433
|
+
end
|
434
|
+
|
435
|
+
context 'with the account number not zero-padded' do
|
436
|
+
let(:account_number) { '123456' }
|
437
|
+
its([:account_number]) { is_expected.to eq('000000123456') }
|
438
|
+
end
|
439
|
+
|
440
|
+
context 'without a bank code' do
|
441
|
+
let(:bank_code) { nil }
|
442
|
+
it { is_expected.to eq(local_details) }
|
443
|
+
end
|
444
|
+
|
445
|
+
context 'without a branch code' do
|
446
|
+
let(:branch_code) { nil }
|
447
|
+
it { is_expected.to eq(local_details) }
|
448
|
+
end
|
449
|
+
|
450
|
+
context 'without an account number' do
|
451
|
+
let(:account_number) { nil }
|
452
|
+
it { is_expected.to eq(local_details) }
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
456
|
+
context 'Lithuania' do
|
457
|
+
let(:country_code) { 'LT' }
|
458
|
+
let(:bank_code) { '10000' }
|
459
|
+
let(:account_number) { '11101001000' }
|
460
|
+
|
461
|
+
it { is_expected.to eq(local_details) }
|
462
|
+
|
463
|
+
context 'without an account number' do
|
464
|
+
let(:account_number) { nil }
|
465
|
+
it { is_expected.to eq(local_details) }
|
466
|
+
end
|
467
|
+
|
468
|
+
context 'without a bank code' do
|
469
|
+
let(:bank_code) { nil }
|
470
|
+
it { is_expected.to eq(local_details) }
|
471
|
+
end
|
472
|
+
end
|
473
|
+
|
474
|
+
context 'Luxembourg' do
|
475
|
+
let(:country_code) { 'LU' }
|
476
|
+
let(:bank_code) { '001' }
|
477
|
+
let(:account_number) { '9400644750000' }
|
478
|
+
|
479
|
+
it { is_expected.to eq(local_details) }
|
480
|
+
|
481
|
+
context 'without an account number' do
|
482
|
+
let(:account_number) { nil }
|
483
|
+
it { is_expected.to eq(local_details) }
|
484
|
+
end
|
485
|
+
|
486
|
+
context 'without a bank code' do
|
487
|
+
let(:bank_code) { nil }
|
488
|
+
it { is_expected.to eq(local_details) }
|
489
|
+
end
|
490
|
+
end
|
491
|
+
|
492
|
+
context 'Latvia' do
|
493
|
+
let(:country_code) { 'LV' }
|
494
|
+
let(:bank_code) { 'BANK' }
|
495
|
+
let(:account_number) { '1234567890123' }
|
496
|
+
|
497
|
+
it { is_expected.to eq(local_details) }
|
498
|
+
|
499
|
+
context 'without an account number' do
|
500
|
+
let(:account_number) { nil }
|
501
|
+
it { is_expected.to eq(local_details) }
|
502
|
+
end
|
503
|
+
|
504
|
+
context 'without a bank code' do
|
505
|
+
let(:bank_code) { nil }
|
506
|
+
it { is_expected.to eq(local_details) }
|
507
|
+
end
|
508
|
+
end
|
509
|
+
|
510
|
+
context 'Monaco' do
|
511
|
+
let(:country_code) { 'MC' }
|
512
|
+
let(:bank_code) { '20041' }
|
513
|
+
let(:branch_code) { '01005' }
|
514
|
+
let(:account_number) { '0500013M02606' }
|
515
|
+
|
516
|
+
it { is_expected.to eq(local_details) }
|
517
|
+
|
518
|
+
context 'with the RIB key spaced in the account number' do
|
519
|
+
let(:account_number) { '0500013M026 06' }
|
520
|
+
its([:account_number]) { is_expected.to eq('0500013M02606') }
|
521
|
+
end
|
522
|
+
|
523
|
+
context 'with the RIB key hyphenated in the account number' do
|
524
|
+
let(:account_number) { '0500013M026-06' }
|
525
|
+
its([:account_number]) { is_expected.to eq('0500013M02606') }
|
526
|
+
end
|
527
|
+
|
528
|
+
context 'with the RIB key missing' do
|
529
|
+
let(:account_number) { '0500013M026' }
|
530
|
+
it { is_expected.to eq(local_details) }
|
531
|
+
end
|
532
|
+
|
533
|
+
context 'without a bank code' do
|
534
|
+
let(:bank_code) { nil }
|
535
|
+
it { is_expected.to eq(local_details) }
|
536
|
+
end
|
537
|
+
|
538
|
+
context 'without a branch code' do
|
539
|
+
let(:branch_code) { nil }
|
540
|
+
it { is_expected.to eq(local_details) }
|
541
|
+
end
|
542
|
+
|
543
|
+
context 'without an account number' do
|
544
|
+
let(:account_number) { nil }
|
545
|
+
it { is_expected.to eq(local_details) }
|
546
|
+
end
|
547
|
+
end
|
548
|
+
|
549
|
+
context 'Netherlands' do
|
550
|
+
let(:country_code) { 'NL' }
|
551
|
+
let(:bank_code) { 'ABNA' }
|
552
|
+
let(:account_number) { '0417164300' }
|
553
|
+
|
554
|
+
it { is_expected.to eq(local_details) }
|
555
|
+
|
556
|
+
context 'without a bank code' do
|
557
|
+
let(:bank_code) { nil }
|
558
|
+
it { is_expected.to eq(local_details) }
|
559
|
+
end
|
560
|
+
|
561
|
+
context 'without a branch code' do
|
562
|
+
let(:branch_code) { nil }
|
563
|
+
it { is_expected.to eq(local_details) }
|
564
|
+
end
|
565
|
+
|
566
|
+
context 'without an account number' do
|
567
|
+
let(:account_number) { nil }
|
568
|
+
it { is_expected.to eq(local_details) }
|
569
|
+
end
|
570
|
+
|
571
|
+
context 'with an account number that needs zero-padding' do
|
572
|
+
let(:account_number) { '417164300' }
|
573
|
+
its([:account_number]) { is_expected.to eq('0417164300') }
|
574
|
+
end
|
575
|
+
end
|
576
|
+
|
577
|
+
context 'Portugal' do
|
578
|
+
let(:country_code) { 'PT' }
|
579
|
+
let(:bank_code) { '0002' }
|
580
|
+
let(:branch_code) { '0023' }
|
581
|
+
let(:account_number) { '0023843000578' }
|
582
|
+
|
583
|
+
it { is_expected.to eq(local_details) }
|
584
|
+
|
585
|
+
context 'without a bank code' do
|
586
|
+
let(:bank_code) { nil }
|
587
|
+
it { is_expected.to eq(local_details) }
|
588
|
+
end
|
589
|
+
|
590
|
+
context 'without a branch code' do
|
591
|
+
let(:branch_code) { nil }
|
592
|
+
it { is_expected.to eq(local_details) }
|
593
|
+
end
|
594
|
+
|
595
|
+
context 'without an account number' do
|
596
|
+
let(:account_number) { nil }
|
597
|
+
it { is_expected.to eq(local_details) }
|
598
|
+
end
|
599
|
+
end
|
600
|
+
|
601
|
+
context 'Slovenia' do
|
602
|
+
let(:country_code) { 'SI' }
|
603
|
+
let(:bank_code) { '19100' }
|
604
|
+
let(:account_number) { '0000123438' }
|
605
|
+
|
606
|
+
it { is_expected.to eq(local_details) }
|
607
|
+
|
608
|
+
context 'with an account number which needs zero-padding' do
|
609
|
+
let(:account_number) { '123438' }
|
610
|
+
its([:account_number]) { is_expected.to eq('0000123438') }
|
611
|
+
end
|
612
|
+
|
613
|
+
context 'without a bank code' do
|
614
|
+
let(:bank_code) { nil }
|
615
|
+
it { is_expected.to eq(local_details) }
|
616
|
+
end
|
617
|
+
|
618
|
+
context 'without an account number' do
|
619
|
+
let(:account_number) { nil }
|
620
|
+
it { is_expected.to eq(local_details) }
|
621
|
+
end
|
622
|
+
end
|
623
|
+
|
624
|
+
context 'Slovak Republic' do
|
625
|
+
let(:country_code) { 'SK' }
|
626
|
+
let(:bank_code) { '1200' }
|
627
|
+
let(:account_number) { '0000198742637541' }
|
628
|
+
|
629
|
+
it { is_expected.to eq(local_details) }
|
630
|
+
|
631
|
+
context 'with an account number prefix' do
|
632
|
+
let(:prefix) { '000019' }
|
633
|
+
let(:account_number) { '8742637541' }
|
634
|
+
before { local_details.merge!(account_number_prefix: prefix) }
|
635
|
+
|
636
|
+
its([:account_number]) { is_expected.to eq('0000198742637541') }
|
637
|
+
|
638
|
+
context 'which needs zero-padding' do
|
639
|
+
let(:prefix) { '19' }
|
640
|
+
its([:account_number]) { is_expected.to eq('0000198742637541') }
|
641
|
+
end
|
642
|
+
end
|
643
|
+
|
644
|
+
context 'without a bank code' do
|
645
|
+
let(:bank_code) { nil }
|
646
|
+
it { is_expected.to eq(local_details) }
|
647
|
+
end
|
648
|
+
|
649
|
+
context 'without an account number' do
|
650
|
+
let(:account_number) { nil }
|
651
|
+
it { is_expected.to eq(local_details) }
|
652
|
+
end
|
653
|
+
end
|
654
|
+
|
655
|
+
context 'San Marino' do
|
656
|
+
let(:country_code) { 'SM' }
|
657
|
+
let(:bank_code) { '05428' }
|
658
|
+
let(:branch_code) { '11101' }
|
659
|
+
let(:account_number) { '000000123456' }
|
660
|
+
|
661
|
+
it { is_expected.to eq(local_details) }
|
662
|
+
|
663
|
+
context 'with an explicit check digit' do
|
664
|
+
before { local_details.merge!(check_digit: 'Y') }
|
665
|
+
it { is_expected.to eq(local_details) }
|
666
|
+
end
|
667
|
+
|
668
|
+
context 'with the account number not zero-padded' do
|
669
|
+
let(:account_number) { '123456' }
|
670
|
+
its([:account_number]) { is_expected.to eq('000000123456') }
|
671
|
+
end
|
672
|
+
|
673
|
+
context 'without a bank code' do
|
674
|
+
let(:bank_code) { nil }
|
675
|
+
it { is_expected.to eq(local_details) }
|
676
|
+
end
|
677
|
+
|
678
|
+
context 'without a branch code' do
|
679
|
+
let(:branch_code) { nil }
|
680
|
+
it { is_expected.to eq(local_details) }
|
681
|
+
end
|
682
|
+
|
683
|
+
context 'without an account number' do
|
684
|
+
let(:account_number) { nil }
|
685
|
+
it { is_expected.to eq(local_details) }
|
686
|
+
end
|
687
|
+
end
|
688
|
+
end
|