refs #6143 refactor: ibanValidation with countryCode param #1713

Merged
jgallego merged 3 commits from 6143-refactor-iban-con-country into dev 2023-08-25 07:56:07 +00:00
4 changed files with 51 additions and 25 deletions

View File

@ -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();
});
}); });

View File

@ -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);

View File

@ -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();
} }

View File

@ -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();
} }