refs #6143 refactor: ibanValidation with countryCode param #1713
|
@ -1,21 +1,45 @@
|
||||||
const validateIban = require('../validateIban');
|
const validateIban = require('../validateIban');
|
||||||
|
|
||||||
describe('IBAN validation', () => {
|
describe('IBAN validation', () => {
|
||||||
it('should return false for non-IBAN input', () => {
|
it('should return false for invalid Spanish IBAN format', () => {
|
||||||
let isValid = validateIban('Pepinillos');
|
let isValid = validateIban('ES00 9999 0000 9999 0000 9999', 'ES');
|
||||||
|
|
||||||
expect(isValid).toBeFalsy();
|
expect(isValid).toBeFalsy();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should return false for invalid spanish IBAN input', () => {
|
it('should return true for valid Spanish IBAN', () => {
|
||||||
let isValid = validateIban('ES00 9999 0000 9999 0000 9999');
|
let isValid = validateIban('ES91 2100 0418 4502 0005 1332', 'ES');
|
||||||
|
|
||||||
expect(isValid).toBeFalsy();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should return true for valid spanish IBAN', () => {
|
|
||||||
let isValid = validateIban('ES91 2100 0418 4502 0005 1332');
|
|
||||||
|
|
||||||
expect(isValid).toBeTruthy();
|
expect(isValid).toBeTruthy();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should return false for invalid Spanish IBAN with incorrect length', () => {
|
||||||
|
let isValid = validateIban('ES91210004184502000513', 'ES');
|
||||||
|
|
||||||
|
expect(isValid).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false for invalid Spanish IBAN with incorrect module97 result', () => {
|
||||||
|
let isValid = validateIban('ES9121000418450200051331', 'ES');
|
||||||
|
|
||||||
|
expect(isValid).toBeFalsy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return true for a non-Spanish countryCode', () => {
|
||||||
|
let isValid = validateIban('DE89370400440532013000', 'AT');
|
||||||
|
|
||||||
|
expect(isValid).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return true for null IBAN', () => {
|
||||||
|
let isValid = validateIban(null, 'ES');
|
||||||
|
|
||||||
|
expect(isValid).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should return false for non-string IBAN', () => {
|
||||||
|
let isValid = validateIban(12345, 'ES');
|
||||||
|
|
||||||
|
expect(isValid).toBeFalsy();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
module.exports = function(iban) {
|
module.exports = function(iban, countryCode) {
|
||||||
if (iban == null) return true;
|
if (iban == null) return true;
|
||||||
if (typeof iban != 'string') return false;
|
if (typeof iban != 'string') return false;
|
||||||
|
if (countryCode?.toLowerCase() != 'es') return true;
|
||||||
|
|
||||||
iban = iban.toUpperCase();
|
iban = iban.toUpperCase();
|
||||||
iban = trim(iban);
|
iban = trim(iban);
|
||||||
|
|
|
@ -90,16 +90,17 @@ module.exports = Self => {
|
||||||
});
|
});
|
||||||
|
|
||||||
async function ibanNeedsValidation(err, done) {
|
async function ibanNeedsValidation(err, done) {
|
||||||
const filter = {
|
if (!this.bankEntityFk)
|
||||||
fields: ['code'],
|
|
||||||
where: {id: this.countryFk}
|
|
||||||
};
|
|
||||||
const country = await Self.app.models.Country.findOne(filter);
|
|
||||||
const code = country ? country.code.toLowerCase() : null;
|
|
||||||
if (code != 'es')
|
|
||||||
return done();
|
return done();
|
||||||
|
|
||||||
if (!validateIban(this.iban))
|
const bankEntity = await Self.app.models.BankEntity.findById(this.bankEntityFk);
|
||||||
|
const filter = {
|
||||||
|
fields: ['code'],
|
||||||
|
where: {id: bankEntity.countryFk}
|
||||||
|
};
|
||||||
|
const country = await Self.app.models.Country.findOne(filter);
|
||||||
|
|
||||||
|
if (!validateIban(this.iban, country?.code))
|
||||||
err();
|
err();
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,18 +7,18 @@ module.exports = Self => {
|
||||||
});
|
});
|
||||||
|
|
||||||
async function ibanValidation(err, done) {
|
async function ibanValidation(err, done) {
|
||||||
const supplier = await Self.app.models.Supplier.findById(this.supplierFk);
|
if (!this.bankEntityFk)
|
||||||
|
return done();
|
||||||
|
|
||||||
|
const bankEntity = await Self.app.models.BankEntity.findById(this.bankEntityFk);
|
||||||
const filter = {
|
const filter = {
|
||||||
fields: ['code'],
|
fields: ['code'],
|
||||||
where: {id: supplier.countryFk}
|
where: {id: bankEntity.countryFk}
|
||||||
};
|
};
|
||||||
|
|
||||||
const country = await Self.app.models.Country.findOne(filter);
|
const country = await Self.app.models.Country.findOne(filter);
|
||||||
const code = country ? country.code.toLowerCase() : null;
|
|
||||||
if (code != 'es')
|
|
||||||
return done();
|
|
||||||
|
|
||||||
if (!validateIban(this.iban))
|
if (!validateIban(this.iban, country?.code))
|
||||||
err();
|
err();
|
||||||
done();
|
done();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue