ibandit 0.1.1 → 0.2.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/.rubocop.yml +1 -1
- data/CHANGELOG.md +5 -0
- data/README.md +3 -2
- data/bin/build_german_iban_rules.rb +42 -0
- data/bin/build_structure_file.rb +9 -11
- data/data/german_iban_rules.yml +11350 -0
- data/data/raw/BLZ2.txt +18677 -0
- data/data/{IBANSTRUCTURE.xml → raw/IBANSTRUCTURE.xml} +0 -0
- data/data/{IBAN_Registry.txt → raw/IBAN_Registry.txt} +0 -0
- data/data/{structure_additions.yml → raw/structure_additions.yml} +0 -0
- data/{lib/ibandit → data}/structures.yml +0 -0
- data/lib/ibandit.rb +1 -0
- data/lib/ibandit/errors.rb +1 -0
- data/lib/ibandit/german_details_converter.rb +1277 -0
- data/lib/ibandit/iban.rb +4 -1
- data/lib/ibandit/iban_builder.rb +5 -3
- data/lib/ibandit/version.rb +1 -1
- data/spec/fixtures/germany_integration_test_cases.json +170 -0
- data/spec/fixtures/germany_unit_test_cases.json +425 -0
- data/spec/ibandit/german_details_converter_spec.rb +101 -0
- data/spec/ibandit/iban_builder_spec.rb +7 -0
- data/spec/spec_helper.rb +5 -0
- metadata +13 -6
@@ -0,0 +1,101 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ibandit::GermanDetailsConverter do
|
4
|
+
shared_examples 'json based fixture' do |json_fixture_file|
|
5
|
+
json_fixture(json_fixture_file).each do |convertor|
|
6
|
+
context "Rule #{convertor['convertor']}" do
|
7
|
+
let(:klass) do
|
8
|
+
described_class.const_get("Rule#{convertor['convertor']}")
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { test_subject }
|
12
|
+
|
13
|
+
before do
|
14
|
+
expect_any_instance_of(klass).to receive(:converted_details).
|
15
|
+
and_call_original
|
16
|
+
end
|
17
|
+
|
18
|
+
convertor.fetch('valid', []).each do |tuple|
|
19
|
+
context "bank code: #{tuple['bank_code']} account number " \
|
20
|
+
"#{tuple['account_number']}" do
|
21
|
+
let(:bank_code) do
|
22
|
+
tuple['bank_code']
|
23
|
+
end
|
24
|
+
let(:account_number) do
|
25
|
+
tuple['account_number']
|
26
|
+
end
|
27
|
+
let(:converted_bank_code) do
|
28
|
+
tuple['converted_bank_code'] || bank_code
|
29
|
+
end
|
30
|
+
let(:converted_account_number) do
|
31
|
+
tuple['converted_account_number'] || account_number
|
32
|
+
end
|
33
|
+
it do
|
34
|
+
is_expected.to eq(
|
35
|
+
bank_code: converted_bank_code,
|
36
|
+
account_number: converted_account_number)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
convertor.fetch('invalid', []).each do |tuple|
|
42
|
+
context "bank code: #{tuple['bank_code']} account number " \
|
43
|
+
"#{tuple['account_number']}" do
|
44
|
+
let(:bank_code) { tuple['bank_code'] || '00000000' }
|
45
|
+
let(:account_number) { tuple['account_number'] }
|
46
|
+
it 'raises UnsupportedAccountDetails' do
|
47
|
+
expect { subject }.
|
48
|
+
to raise_error(Ibandit::UnsupportedAccountDetails)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'integration tests' do
|
57
|
+
include_examples 'json based fixture', 'germany_integration_test_cases' do
|
58
|
+
let(:test_subject) do
|
59
|
+
described_class.
|
60
|
+
convert(bank_code: bank_code, account_number: account_number)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
describe 'unit tests' do
|
66
|
+
include_examples 'json based fixture', 'germany_unit_test_cases' do
|
67
|
+
let(:test_subject) do
|
68
|
+
klass.new(bank_code, account_number).converted_details
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe Ibandit::GermanDetailsConverter::Rule002002::Check63 do
|
74
|
+
subject { described_class.new(account_number) }
|
75
|
+
|
76
|
+
# Test cases taken from the IBAN Rules definitions document
|
77
|
+
valid_account_numbers = %w(
|
78
|
+
38150900 600103660 39101181 5600200 75269100 3700246 6723143
|
79
|
+
5719083 571908300 8007759 800775900 350002200 900004300
|
80
|
+
)
|
81
|
+
|
82
|
+
invalid_account_numbers = %w(
|
83
|
+
370024600 672314300 3500022 9000043 123456700 94012341 94012341
|
84
|
+
5073321010 1234517892 987614325
|
85
|
+
)
|
86
|
+
|
87
|
+
valid_account_numbers.each do |number|
|
88
|
+
context "#{number}" do
|
89
|
+
let(:account_number) { number }
|
90
|
+
it { is_expected.to be_valid }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
invalid_account_numbers.each do |number|
|
95
|
+
context "#{number}" do
|
96
|
+
let(:account_number) { number }
|
97
|
+
it { is_expected.to_not be_valid }
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -167,6 +167,13 @@ describe Ibandit::IBANBuilder do
|
|
167
167
|
to raise_error(ArgumentError, /account_number is a required field/)
|
168
168
|
end
|
169
169
|
end
|
170
|
+
|
171
|
+
context 'with a pseudo account number' do
|
172
|
+
before { args[:bank_code] = '37080040' }
|
173
|
+
before { args[:account_number] = '111' }
|
174
|
+
|
175
|
+
its(:iban) { is_expected.to eq('DE69370800400215022000') }
|
176
|
+
end
|
170
177
|
end
|
171
178
|
|
172
179
|
context 'with EE as the country_code' do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
require 'ibandit'
|
2
2
|
require 'rspec/its'
|
3
|
+
require 'json'
|
3
4
|
|
4
5
|
RSpec.configure do |config|
|
5
6
|
config.mock_with(:rspec) { |mocks| mocks.verify_partial_doubles = true }
|
6
7
|
config.raise_errors_for_deprecations!
|
7
8
|
end
|
9
|
+
|
10
|
+
def json_fixture(filename)
|
11
|
+
JSON.parse(File.read("spec/fixtures/#{filename}.json"))
|
12
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ibandit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Grey Baker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -98,19 +98,26 @@ files:
|
|
98
98
|
- LICENSE
|
99
99
|
- README.md
|
100
100
|
- TODO.md
|
101
|
+
- bin/build_german_iban_rules.rb
|
101
102
|
- bin/build_structure_file.rb
|
102
|
-
- data/
|
103
|
-
- data/
|
104
|
-
- data/
|
103
|
+
- data/german_iban_rules.yml
|
104
|
+
- data/raw/BLZ2.txt
|
105
|
+
- data/raw/IBANSTRUCTURE.xml
|
106
|
+
- data/raw/IBAN_Registry.txt
|
107
|
+
- data/raw/structure_additions.yml
|
108
|
+
- data/structures.yml
|
105
109
|
- ibandit.gemspec
|
106
110
|
- lib/ibandit.rb
|
107
111
|
- lib/ibandit/check_digit.rb
|
108
112
|
- lib/ibandit/errors.rb
|
113
|
+
- lib/ibandit/german_details_converter.rb
|
109
114
|
- lib/ibandit/iban.rb
|
110
115
|
- lib/ibandit/iban_builder.rb
|
111
|
-
- lib/ibandit/structures.yml
|
112
116
|
- lib/ibandit/version.rb
|
117
|
+
- spec/fixtures/germany_integration_test_cases.json
|
118
|
+
- spec/fixtures/germany_unit_test_cases.json
|
113
119
|
- spec/ibandit/check_digit_spec.rb
|
120
|
+
- spec/ibandit/german_details_converter_spec.rb
|
114
121
|
- spec/ibandit/iban_builder_spec.rb
|
115
122
|
- spec/ibandit/iban_spec.rb
|
116
123
|
- spec/spec_helper.rb
|