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.
@@ -1,7 +1,8 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Ibandit::IBAN do
4
- subject(:iban) { described_class.new(iban_code) }
4
+ subject(:iban) { described_class.new(arg) }
5
+ let(:arg) { iban_code }
5
6
  let(:iban_code) { 'GB82WEST12345698765432' }
6
7
 
7
8
  its(:iban) { is_expected.to eq(iban_code) }
@@ -12,8 +13,34 @@ describe Ibandit::IBAN do
12
13
  end
13
14
 
14
15
  context 'with nil' do
15
- let(:iban_code) { nil }
16
- its(:iban) { is_expected.to eq('') }
16
+ let(:arg) { nil }
17
+ specify { expect { iban }.to raise_error(TypeError) }
18
+ end
19
+
20
+ context 'with local details' do
21
+ let(:arg) do
22
+ {
23
+ country_code: 'GB',
24
+ bank_code: 'WEST',
25
+ branch_code: '123456',
26
+ account_number: '98765432'
27
+ }
28
+ end
29
+
30
+ its(:iban) { is_expected.to eq('GB82WEST12345698765432') }
31
+ end
32
+
33
+ context 'with nil local details' do
34
+ let(:arg) do
35
+ {
36
+ country_code: nil,
37
+ bank_code: nil,
38
+ branch_code: nil,
39
+ account_number: nil
40
+ }
41
+ end
42
+
43
+ it { is_expected.to_not be_valid }
17
44
  end
18
45
 
19
46
  describe 'it decomposes the IBAN' do
@@ -23,19 +50,35 @@ describe Ibandit::IBAN do
23
50
  its(:branch_code) { is_expected.to eq('123456') }
24
51
  its(:account_number) { is_expected.to eq('98765432') }
25
52
  its(:iban_national_id) { is_expected.to eq('WEST123456') }
26
- its(:local_check_digits) { is_expected.to eq('') }
53
+ its(:local_check_digits) { is_expected.to be_nil }
27
54
 
28
55
  context 'when the IBAN is blank' do
29
56
  let(:iban_code) { '' }
30
57
 
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('') }
58
+ its(:country_code) { is_expected.to be_nil }
59
+ its(:check_digits) { is_expected.to be_nil }
60
+ its(:bank_code) { is_expected.to be_nil }
61
+ its(:branch_code) { is_expected.to be_nil }
62
+ its(:account_number) { is_expected.to be_nil }
63
+ its(:iban_national_id) { is_expected.to be_nil }
64
+ its(:bban) { is_expected.to be_nil }
65
+ its(:local_check_digits) { is_expected.to be_nil }
66
+ end
67
+
68
+ context 'when the IBAN was created with local details' do
69
+ let(:arg) do
70
+ {
71
+ country_code: 'GB',
72
+ bank_code: 'WES',
73
+ branch_code: '1234',
74
+ account_number: '5678'
75
+ }
76
+ end
77
+
78
+ its(:country_code) { is_expected.to eq(arg[:country_code]) }
79
+ its(:bank_code) { is_expected.to eq(arg[:bank_code]) }
80
+ its(:branch_code) { is_expected.to eq(arg[:branch_code]) }
81
+ its(:account_number) { is_expected.to eq(arg[:account_number]) }
39
82
  end
40
83
  end
41
84
 
@@ -48,6 +91,12 @@ describe Ibandit::IBAN do
48
91
  end
49
92
 
50
93
  specify { expect { iban.to_s(:russian) }.to raise_error ArgumentError }
94
+
95
+ context 'with the IBAN is nil' do
96
+ let(:arg) { { country_code: 'GB' } }
97
+ its(:to_s) { is_expected.to_not be_nil }
98
+ specify { expect(iban.to_s(:formatted)).to be_empty }
99
+ end
51
100
  end
52
101
 
53
102
  ###############
@@ -120,7 +169,6 @@ describe Ibandit::IBAN do
120
169
  subject { iban.valid_length? }
121
170
 
122
171
  context 'with valid details' do
123
- let(:iban_code) { 'GB82WEST12345698765432' }
124
172
  it { is_expected.to eq(true) }
125
173
  end
126
174
 
@@ -145,6 +193,100 @@ describe Ibandit::IBAN do
145
193
  end
146
194
  end
147
195
 
196
+ describe '#valid_bank_code_length?' do
197
+ subject { iban.valid_bank_code_length? }
198
+
199
+ context 'with valid details' do
200
+ it { is_expected.to eq(true) }
201
+ end
202
+
203
+ context 'with invalid details' do
204
+ before { allow(iban).to receive(:bank_code).and_return('WES') }
205
+ it { is_expected.to eq(false) }
206
+
207
+ it 'sets errors on the IBAN' do
208
+ iban.valid_bank_code_length?
209
+ expect(iban.errors).to include(:bank_code)
210
+ end
211
+ end
212
+
213
+ context 'with an invalid country_code' do
214
+ before { allow(iban).to receive(:country_code).and_return('AA') }
215
+ it { is_expected.to be_nil }
216
+
217
+ it 'does not set errors on the IBAN' do
218
+ iban.valid_bank_code_length?
219
+ expect(iban.errors).to_not include(:bank_code)
220
+ end
221
+ end
222
+ end
223
+
224
+ describe '#valid_branch_code_length?' do
225
+ subject { iban.valid_branch_code_length? }
226
+
227
+ context 'with valid details' do
228
+ it { is_expected.to eq(true) }
229
+ end
230
+
231
+ context 'with invalid details' do
232
+ before { allow(iban).to receive(:branch_code).and_return('12345') }
233
+ it { is_expected.to eq(false) }
234
+
235
+ it 'sets errors on the IBAN' do
236
+ iban.valid_branch_code_length?
237
+ expect(iban.errors).to include(:branch_code)
238
+ end
239
+ end
240
+
241
+ context 'without a branch code' do
242
+ before { allow(iban).to receive(:branch_code).and_return(nil) }
243
+ it { is_expected.to eq(false) }
244
+
245
+ it 'sets errors on the IBAN' do
246
+ iban.valid_branch_code_length?
247
+ expect(iban.errors).to include(:branch_code)
248
+ end
249
+ end
250
+
251
+ context 'with an invalid country_code' do
252
+ before { allow(iban).to receive(:country_code).and_return('AA') }
253
+ it { is_expected.to be_nil }
254
+
255
+ it 'does not set errors on the IBAN' do
256
+ iban.valid_branch_code_length?
257
+ expect(iban.errors).to_not include(:branch_code)
258
+ end
259
+ end
260
+ end
261
+
262
+ describe '#valid_account_number_length?' do
263
+ subject { iban.valid_account_number_length? }
264
+
265
+ context 'with valid details' do
266
+ it { is_expected.to eq(true) }
267
+ end
268
+
269
+ context 'with an invalid account_number' do
270
+ before { allow(iban).to receive(:account_number).and_return('1234567') }
271
+ it { is_expected.to eq(false) }
272
+
273
+ it 'sets errors on the IBAN' do
274
+ iban.valid_account_number_length?
275
+ expect(iban.errors).to include(:account_number)
276
+ end
277
+ end
278
+
279
+ context 'with an invalid country_code' do
280
+ before { allow(iban).to receive(:country_code).and_return('AA') }
281
+ it { is_expected.to be_nil }
282
+
283
+ it 'does not set errors on the IBAN' do
284
+ iban.valid_account_number_length?
285
+ expect(iban.errors).to_not include(:account_number)
286
+ end
287
+ end
288
+ end
289
+
148
290
  describe '#valid_characters?' do
149
291
  subject { iban.valid_characters? }
150
292
 
@@ -193,6 +335,127 @@ describe Ibandit::IBAN do
193
335
  end
194
336
  end
195
337
 
338
+ describe '#valid_bank_code_format?' do
339
+ subject { iban.valid_bank_code_format? }
340
+
341
+ context 'GB numeric bank code' do
342
+ let(:arg) do
343
+ {
344
+ country_code: 'GB',
345
+ bank_code: '1234',
346
+ branch_code: '200000',
347
+ account_number: '55779911'
348
+ }
349
+ end
350
+
351
+ it { is_expected.to eq(false) }
352
+
353
+ it 'sets errors on the IBAN' do
354
+ iban.valid_bank_code_format?
355
+ expect(iban.errors).to include(:bank_code)
356
+ end
357
+ end
358
+
359
+ context 'with an invalid country code' do
360
+ let(:iban_code) { 'AA821234BANK121234567B' }
361
+
362
+ it { is_expected.to be_nil }
363
+ end
364
+
365
+ context 'with a wrong-length bank code' do
366
+ let(:arg) do
367
+ {
368
+ country_code: 'FR',
369
+ bank_code: '1234',
370
+ branch_code: '12345',
371
+ account_number: '123456789123'
372
+ }
373
+ end
374
+
375
+ it { is_expected.to be_nil }
376
+ end
377
+ end
378
+
379
+ describe '#valid_branch_code_format?' do
380
+ subject { iban.valid_branch_code_format? }
381
+
382
+ context 'IT non-numeric branch code' do
383
+ let(:arg) do
384
+ {
385
+ country_code: 'IT',
386
+ bank_code: '12345',
387
+ branch_code: 'ABCDE',
388
+ account_number: '123456789012'
389
+ }
390
+ end
391
+
392
+ it { is_expected.to eq(false) }
393
+
394
+ it 'sets errors on the IBAN' do
395
+ iban.valid_branch_code_format?
396
+ expect(iban.errors).to include(:branch_code)
397
+ end
398
+ end
399
+
400
+ context 'with an invalid country code' do
401
+ let(:iban_code) { 'AA821234BANK121234567B' }
402
+
403
+ it { is_expected.to be_nil }
404
+ end
405
+
406
+ context 'with a wrong-length branch code' do
407
+ let(:arg) do
408
+ {
409
+ country_code: 'PT',
410
+ bank_code: '1234',
411
+ branch_code: 'ABC',
412
+ account_number: '123456789123'
413
+ }
414
+ end
415
+
416
+ it { is_expected.to be_nil }
417
+ end
418
+ end
419
+
420
+ describe '#valid_account_number_format?' do
421
+ subject { iban.valid_account_number_format? }
422
+
423
+ context 'DE non-numeric account number' do
424
+ let(:arg) do
425
+ {
426
+ country_code: 'DE',
427
+ bank_code: '12345678',
428
+ account_number: '55779911AA'
429
+ }
430
+ end
431
+
432
+ it { is_expected.to eq(false) }
433
+
434
+ it 'sets errors on the IBAN' do
435
+ iban.valid_account_number_format?
436
+ expect(iban.errors).to include(:account_number)
437
+ end
438
+ end
439
+
440
+ context 'with an invalid country code' do
441
+ let(:iban_code) { 'AA821234BANK121234567B' }
442
+
443
+ it { is_expected.to be_nil }
444
+ end
445
+
446
+ context 'with a wrong-length account number' do
447
+ let(:arg) do
448
+ {
449
+ country_code: 'NL',
450
+ bank_code: 'ABCD',
451
+ account_number: nil
452
+ }
453
+ end
454
+
455
+ it { is_expected.to be_nil }
456
+ end
457
+ end
458
+
196
459
  describe '#valid?' do
197
460
  describe 'validations called' do
198
461
  after { iban.valid? }
@@ -201,7 +464,25 @@ describe Ibandit::IBAN do
201
464
  specify { expect(iban).to receive(:valid_characters?).at_least(1) }
202
465
  specify { expect(iban).to receive(:valid_check_digits?).at_least(1) }
203
466
  specify { expect(iban).to receive(:valid_length?).at_least(1) }
467
+ specify { expect(iban).to receive(:valid_bank_code_length?).at_least(1) }
204
468
  specify { expect(iban).to receive(:valid_format?).at_least(1) }
469
+ specify { expect(iban).to receive(:valid_bank_code_format?).at_least(1) }
470
+
471
+ it 'validates the branch code length' do
472
+ expect(iban).to receive(:valid_branch_code_length?).at_least(1)
473
+ end
474
+
475
+ it 'validates the account number length' do
476
+ expect(iban).to receive(:valid_account_number_length?).at_least(1)
477
+ end
478
+
479
+ it 'validates the branch code format' do
480
+ expect(iban).to receive(:valid_branch_code_format?).at_least(1)
481
+ end
482
+
483
+ it 'validates the account number format' do
484
+ expect(iban).to receive(:valid_account_number_format?).at_least(1)
485
+ end
205
486
  end
206
487
 
207
488
  context 'for a valid Albanian IBAN' do
@@ -0,0 +1,41 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ibandit::IBANSplitter do
4
+ subject(:split) { described_class.split(iban_code) }
5
+
6
+ context 'with a valid IBAN' do
7
+ let(:iban_code) { 'GB82WEST12345698765432' }
8
+ its([:country_code]) { is_expected.to eq('GB') }
9
+ its([:check_digits]) { is_expected.to eq('82') }
10
+ its([:bank_code]) { is_expected.to eq('WEST') }
11
+ its([:branch_code]) { is_expected.to eq('123456') }
12
+ its([:account_number]) { is_expected.to eq('98765432') }
13
+ end
14
+
15
+ context 'with nil' do
16
+ let(:iban_code) { nil }
17
+ its([:country_code]) { is_expected.to eq(nil) }
18
+ its([:check_digits]) { is_expected.to eq(nil) }
19
+ its([:bank_code]) { is_expected.to eq(nil) }
20
+ its([:branch_code]) { is_expected.to eq(nil) }
21
+ its([:account_number]) { is_expected.to eq(nil) }
22
+ end
23
+
24
+ context 'with an empty string' do
25
+ let(:iban_code) { '' }
26
+ its([:country_code]) { is_expected.to eq(nil) }
27
+ its([:check_digits]) { is_expected.to eq(nil) }
28
+ its([:bank_code]) { is_expected.to eq(nil) }
29
+ its([:branch_code]) { is_expected.to eq(nil) }
30
+ its([:account_number]) { is_expected.to eq(nil) }
31
+ end
32
+
33
+ context 'with an invalid length IBAN' do
34
+ let(:iban_code) { 'MC9320052222100112233M445' }
35
+ its([:country_code]) { is_expected.to eq('MC') }
36
+ its([:check_digits]) { is_expected.to eq(nil) }
37
+ its([:bank_code]) { is_expected.to eq(nil) }
38
+ its([:branch_code]) { is_expected.to eq(nil) }
39
+ its([:account_number]) { is_expected.to eq(nil) }
40
+ end
41
+ end