Skip to content

Commit 3f005dc

Browse files
committed
Add ABA account number assert
1 parent b37a5d9 commit 3f005dc

File tree

5 files changed

+108
-2
lines changed

5 files changed

+108
-2
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
'use strict';
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
const { Validator, Violation } = require('validator.js');
8+
9+
/**
10+
* Account number regex.
11+
*/
12+
13+
const accountNumberRegex = /^\d{8,17}$/;
14+
15+
/**
16+
* Export `AbaAccountNumberAssert`.
17+
*/
18+
19+
module.exports = function abaAccountNumberAssert() {
20+
/**
21+
* Class name.
22+
*/
23+
24+
this.__class__ = 'AbaAccountNumber';
25+
26+
/**
27+
* Validation algorithm.
28+
*/
29+
30+
this.validate = value => {
31+
if (typeof value !== 'string') {
32+
throw new Violation(this, value, { value: Validator.errorCode.must_be_a_string });
33+
}
34+
35+
if (!accountNumberRegex.test(value)) {
36+
throw new Violation(this, value);
37+
}
38+
39+
return true;
40+
};
41+
42+
return this;
43+
};

src/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
* Module dependencies.
55
*/
66

7+
const AbaAccountNumber = require('./asserts/aba-account-number-assert');
78
const AbaRoutingNumber = require('./asserts/aba-routing-number-assert.js');
89
const BankIdentifierCode = require('./asserts/bank-identifier-code-assert.js');
910
const BigNumber = require('./asserts/big-number-assert.js');
@@ -48,6 +49,7 @@ const Uuid = require('./asserts/uuid-assert.js');
4849
*/
4950

5051
module.exports = {
52+
AbaAccountNumber,
5153
AbaRoutingNumber,
5254
BankIdentifierCode,
5355
BigNumber,
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
'use strict';
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
const { Assert: BaseAssert, Violation } = require('validator.js');
8+
const AbaAccountNumberAssert = require('../../src/asserts/aba-account-number-assert');
9+
10+
/**
11+
* Extend `Assert` with `AbaAccountNumberAssert`.
12+
*/
13+
14+
const Assert = BaseAssert.extend({
15+
AbaAccountNumber: AbaAccountNumberAssert
16+
});
17+
18+
/**
19+
* Test `AbaAccountNumberAssert`.
20+
*/
21+
22+
describe('AbaAccountNumberAssert', () => {
23+
it('should throw an error if the input value is not a string', () => {
24+
[{}, []].forEach(choice => {
25+
try {
26+
Assert.abaAccountNumber().validate(choice);
27+
28+
fail();
29+
} catch (e) {
30+
expect(e).toBeInstanceOf(Violation);
31+
expect(e.violation.value).toBe('must_be_a_string');
32+
}
33+
});
34+
});
35+
36+
it('should throw an error if the input value is not a valid ABA account number', () => {
37+
try {
38+
Assert.abaAccountNumber().validate('foobar');
39+
40+
fail();
41+
} catch (e) {
42+
expect(e).toBeInstanceOf(Violation);
43+
expect(e.show().value).toBe('foobar');
44+
}
45+
});
46+
47+
it('should expose `assert` equal to `AbaAccountNumber`', () => {
48+
try {
49+
Assert.abaAccountNumber().validate(123);
50+
51+
fail();
52+
} catch (e) {
53+
expect(e.show().assert).toBe('AbaAccountNumber');
54+
}
55+
});
56+
57+
it('should accept a valid ABA account number', () => {
58+
Assert.abaAccountNumber().validate('76175925');
59+
});
60+
});

test/asserts/aba-routing-number-assert.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ const Assert = BaseAssert.extend({
1616
});
1717

1818
/**
19-
* Test `RoutingNumberAssert`.
19+
* Test `AbaRoutingNumberAssert`.
2020
*/
2121

2222
describe('AbaRoutingNumberAssert', () => {

test/index.test.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ describe('validator.js-asserts', () => {
1414
it('should export all asserts', () => {
1515
const assertNames = Object.keys(asserts);
1616

17-
expect(assertNames).toHaveLength(38);
17+
expect(assertNames).toHaveLength(39);
1818
expect(assertNames).toEqual(
1919
expect.arrayContaining([
20+
'AbaAccountNumber',
2021
'AbaRoutingNumber',
2122
'BankIdentifierCode',
2223
'BigNumber',

0 commit comments

Comments
 (0)