UNPKG

node-red-contrib-br-validations

Version:

Validates some Brazilian documents such as CPF, CNPJ and PIS - based on the br-validations library

425 lines (326 loc) 10.5 kB
/* eslint-env mocha */ /* eslint strict: [2, "global"], no-unused-expressions: [0]*/ import sinon from 'sinon'; import helper from '../helpers'; import node from '../../../br/validations'; describe('BrValidations node', () => { beforeEach((done) => { helper.startServer(done); }); afterEach((done) => { helper.unload().then(() => { helper.stopServer(done); }); }); const brValidationsNode = { id: 'br-validations-node', type: 'BrValidations', name: 'My Br Validations', cpf: false, cnpj: false, pis: false, wires: [], }; const flow = [ brValidationsNode, ]; it('loads defaults currectly', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); expect(brValidations.name).to.equal('My Br Validations'); expect(brValidations.cpf).to.be.false; expect(brValidations.cnpj).to.be.false; expect(brValidations.pis).to.be.false; done(); }); }); describe('CPF Validation', () => { before((done) => { brValidationsNode.cpf = true; done(); }); context('when a valid formatted CPF is given', () => { const message = { document: '218.570.058-80', payload: { ninja: 'Jiraya', }, }; it('sends the message to the first output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([message, null]); done(); }); }); }); context('when a valid unformatted CPF is given', () => { const message = { document: '21857005880', payload: { ninja: 'Jiraya', }, }; it('sends the message to the first output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([message, null]); done(); }); }); }); context('when an invalid CPF is given', () => { const message = { document: '218.570.058-88', payload: { ninja: 'Jiraya', }, }; it('sends the message to the second output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([null, message]); done(); }); }); }); }); describe('CNPJ Validation', () => { before((done) => { brValidationsNode.cpf = false; brValidationsNode.cnpj = true; done(); }); context('when a valid formatted CNPJ is given', () => { const message = { document: '45.277.057/0001-70', payload: { ninja: 'Jiraya', }, }; it('sends the message to the first output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([message, null]); done(); }); }); }); context('when a valid unformatted CNPJ is given', () => { const message = { document: '37258183000150', payload: { ninja: 'Jiraya', }, }; it('sends the message to the first output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([message, null]); done(); }); }); }); context('when an invalid CNPJ is given', () => { const message = { document: '45.277.057/0002-80', payload: { ninja: 'Jiraya', }, }; it('sends the message to the second output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([null, message]); done(); }); }); }); }); describe('PIS/PASEP Validation', () => { before((done) => { brValidationsNode.cpf = false; brValidationsNode.cnpj = false; brValidationsNode.pis = true; done(); }); context('when a valid formatted PIS/PASEP is given', () => { const message = { document: '120.5825.883-7', payload: { ninja: 'Kakashi', }, }; it('sends the message to the first output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([message, null]); done(); }); }); }); context('when a valid unformatted PIS/PASEP is given', () => { const message = { document: '12058258837', payload: { ninja: 'Kakashi', }, }; it('sends the message to the first output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([message, null]); done(); }); }); }); context('when an invalid PIS/PASEP is given', () => { const message = { document: '120.5825.883-77', payload: { ninja: 'Kakashi', }, }; it('sends the message to the second output wire', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const send = sinon.spy(brValidations, 'send'); brValidations.emit('input', message); expect(send).to.have.been.calledWith([null, message]); done(); }); }); }); }); context('when no Document Type has been checked', () => { before((done) => { brValidationsNode.cpf = false; brValidationsNode.cnpj = false; brValidationsNode.pis = false; done(); }); const message = { document: '120.5825.883-7', payload: { ninja: 'Kakashi', }, }; it('displays an error', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const error = sinon.spy(brValidations, 'error'); brValidations.emit('input', message); expect(error).to.have.been.calledWith('BrValidations Config Error: at least one Document Type must be checked!', message); done(); }); }); }); context('when message.document is null', () => { before((done) => { brValidationsNode.cpf = false; brValidationsNode.cnpj = false; brValidationsNode.pis = true; done(); }); const message = { document: null, payload: { ninja: 'Kakashi', }, }; it('displays an error', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const error = sinon.spy(brValidations, 'error'); brValidations.emit('input', message); expect(error).to.have.been.calledWith('BrValidations Error: message.document must be sent!', message); done(); }); }); }); context('when message.document is undefined', () => { before((done) => { brValidationsNode.cpf = false; brValidationsNode.cnpj = false; brValidationsNode.pis = true; done(); }); const message = { document: undefined, payload: { ninja: 'Kakashi', }, }; it('displays an error', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const error = sinon.spy(brValidations, 'error'); brValidations.emit('input', message); expect(error).to.have.been.calledWith('BrValidations Error: message.document must be sent!', message); done(); }); }); }); context('when message.document is blank', () => { before((done) => { brValidationsNode.cpf = false; brValidationsNode.cnpj = false; brValidationsNode.pis = true; done(); }); const message = { document: '', payload: { ninja: 'Kakashi', }, }; it('displays an error', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const error = sinon.spy(brValidations, 'error'); brValidations.emit('input', message); expect(error).to.have.been.calledWith('BrValidations Error: message.document must be sent!', message); done(); }); }); }); context('when message.document is an spaced blank', () => { before((done) => { brValidationsNode.cpf = false; brValidationsNode.cnpj = false; brValidationsNode.pis = true; done(); }); const message = { document: ' ', payload: { ninja: 'Kakashi', }, }; it('displays an error', (done) => { helper.load(node, flow, () => { const brValidations = helper.getNode('br-validations-node'); const error = sinon.spy(brValidations, 'error'); brValidations.emit('input', message); expect(error).to.have.been.calledWith('BrValidations Error: message.document must be sent!', message); done(); }); }); }); });