ifsc 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,113 @@
1
+ require 'ifsc'
2
+
3
+ describe Razorpay::IFSC::IFSC do
4
+ let(:mocked_response) do
5
+ {
6
+ 'BANK' => 'Kotak Mahindra Bank',
7
+ 'IFSC' => 'KKBK0000261',
8
+ 'BRANCH' => 'GURGAON',
9
+ 'ADDRESS' => 'JMD REGENT SQUARE,MEHRAULI GURGAON ROAD,OPPOSITE BRISTOL HOTEL,',
10
+ 'CONTACT' => '4131000',
11
+ 'CITY' => 'GURGAON',
12
+ 'DISTRICT' => 'GURGAON',
13
+ 'STATE' => 'HARYAN'
14
+ }
15
+ end
16
+ let(:dummy_code) { 'foo' }
17
+ let(:code_double) { double('code double') }
18
+ let(:code) { described_class.new(mocked_response['IFSC']) }
19
+
20
+ describe '.get' do
21
+ before do
22
+ allow(code).to receive(:api_data).and_return(mocked_response)
23
+ end
24
+
25
+ it 'should parse the IFSC details correctly from the server' do
26
+ fetched_code = code.get
27
+
28
+ expect(fetched_code.bank).to eq mocked_response['BANK']
29
+ expect(fetched_code.ifsc).to eq mocked_response['IFSC']
30
+ expect(fetched_code.branch).to eq mocked_response['BRANCH']
31
+ expect(fetched_code.address).to eq mocked_response['ADDRESS']
32
+ expect(fetched_code.contact).to eq mocked_response['CONTACT']
33
+ expect(fetched_code.city).to eq mocked_response['CITY']
34
+ expect(fetched_code.district).to eq mocked_response['DISTRICT']
35
+ expect(fetched_code.state).to eq mocked_response['STATE']
36
+ end
37
+
38
+ it 'should set @valid to true and skip local validation' do
39
+ fetched_code = code.get
40
+
41
+ expect(fetched_code.instance_variable_get(:@valid)).to eq true
42
+ expect(fetched_code.valid?).to eq true
43
+ end
44
+ end
45
+
46
+ describe '.get_bank_name' do
47
+ before do
48
+ allow(code).to receive(:api_data).and_return(mocked_response)
49
+ end
50
+
51
+ it 'should load the bank name into the object' do
52
+ expect(code.bank).to be_nil
53
+ code.get
54
+ expect(code.bank).to eq mocked_response['BANK']
55
+ end
56
+ end
57
+
58
+ describe '.class' do
59
+ describe '.find' do
60
+ it 'should validate and return the fetched object' do
61
+ expect(described_class).to receive(:new).with(dummy_code).and_return(code_double)
62
+ expect(code_double).to receive(:get)
63
+ described_class.find(dummy_code)
64
+ end
65
+ end
66
+
67
+ describe '#bank_name_for(code)' do
68
+ it 'should return the correct bank name' do
69
+ expect(described_class.bank_name_for(mocked_response['IFSC'])).to eq mocked_response['BANK']
70
+ end
71
+
72
+ it 'should return the correct sublet bank name' do
73
+ expect(described_class.bank_name_for('ALLA0AU1002')).to eq 'Allahabad Up Gramin Bank'
74
+ end
75
+ end
76
+
77
+ describe '#valid?' do
78
+ it 'should validate regular numeric branch codes' do
79
+ expect(described_class.valid?('KKBK0000261')).to eq true
80
+ expect(described_class.valid?('HDFC0002854')).to eq true
81
+ expect(described_class.valid?('KARB0000001')).to eq true
82
+ end
83
+
84
+ it 'should validate range branch codes' do
85
+ expect(described_class.valid?('DLXB0000097')).to eq true
86
+ end
87
+
88
+ it 'should validate string branch codes' do
89
+ expect(described_class.valid?('BOTM0NEEMRA')).to eq true
90
+ expect(described_class.valid?('BARB0ZOOTIN')).to eq true
91
+ end
92
+
93
+ it 'should not validate invalid codes' do
94
+ expect(described_class.valid?('BOTM0XEEMRA')).to eq false
95
+ expect(described_class.valid?('BOTX0000000')).to eq false
96
+ expect(described_class.valid?('BOTX0000500')).to eq false
97
+ expect(described_class.valid?('BOTM0000500')).to eq false
98
+ expect(described_class.valid?('DLXB0000500')).to eq false
99
+ end
100
+ end
101
+
102
+ describe '#validate!' do
103
+ context 'when valid? returns false' do
104
+ before do
105
+ allow(described_class).to receive(:valid?).with(dummy_code).and_return(false)
106
+ end
107
+ it 'should raise an error when validations fail' do
108
+ expect { described_class.validate!(dummy_code) }.to raise_error(Razorpay::IFSC::InvalidCodeError)
109
+ end
110
+ end
111
+ end
112
+ end
113
+ end
@@ -0,0 +1,13 @@
1
+ require 'ifsc'
2
+
3
+ describe Razorpay::IFSC::IFSC do
4
+ tests = JSON.parse File.read 'tests/validator_asserts.json'
5
+
6
+ tests.each do |test_name, test_cases|
7
+ it "should #{test_name}" do
8
+ test_cases.each do |ifsc, expected_value|
9
+ expect(Razorpay::IFSC::IFSC.valid? ifsc).to eq expected_value
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ {
2
+ "testBasicValidator": {
3
+ "KKBK0000261": true,
4
+ "HDFC0002854": true,
5
+ "KARB0000001": true
6
+ },
7
+ "testValidateInsideRange": {
8
+ "DLXB0000097": true
9
+ },
10
+ "testValidateStringLookup": {
11
+ "BOTM0NEEMRA": true,
12
+ "BARB0ZOOTIN": true
13
+ },
14
+ "testValidateInvalidCode": {
15
+ "BOTM0XEEMRA": false,
16
+ "BOTX0XEEMRA": false,
17
+ "BOTX0000000": false,
18
+ "BOTX0000500": false,
19
+ "BOTM0000500": false,
20
+ "DLXB0000500": false
21
+ },
22
+ "testHPSC": {
23
+ "HPSC0000406": true,
24
+ "HPSC0000300": false
25
+ }
26
+ }
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ifsc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Abhay Rana
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-08-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.15'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.5'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.5'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.6'
55
+ description: A simple gem by @razorpay to help you validate your IFSC codes. IFSC
56
+ codes are bank codes within India
57
+ email:
58
+ - nemo@razorpay.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - CONTRIBUTING.md
64
+ - Gemfile
65
+ - README.md
66
+ - ifsc.gemspec
67
+ - src/IFSC.json
68
+ - src/banknames.json
69
+ - src/ruby/ifsc.rb
70
+ - src/sublet.json
71
+ - tests/ruby/ifsc_spec.rb
72
+ - tests/ruby/validate_spec.rb
73
+ - tests/validator_asserts.json
74
+ homepage: https://ifsc.razorpay.com
75
+ licenses:
76
+ - MIT
77
+ metadata: {}
78
+ post_install_message:
79
+ rdoc_options: []
80
+ require_paths:
81
+ - src/ruby
82
+ required_ruby_version: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - ">="
85
+ - !ruby/object:Gem::Version
86
+ version: '0'
87
+ required_rubygems_version: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: '0'
92
+ requirements: []
93
+ rubyforge_project:
94
+ rubygems_version: 2.6.12
95
+ signing_key:
96
+ specification_version: 4
97
+ summary: IFSC code database to help you validate IFSC codes
98
+ test_files:
99
+ - tests/ruby/ifsc_spec.rb
100
+ - tests/ruby/validate_spec.rb
101
+ - tests/validator_asserts.json