frete
Version:
Modulo para consumo da API de frete dos correios brasileiros, com apenas node-soap como dependencia e consultando *apenas* a api dos correios, promises support.
466 lines (370 loc) • 14.1 kB
JavaScript
;
const assert = require('assert');
const frete = require('./frete');
describe("Frete", function () {
it('Test validation errors', function (done) {
const f = frete();
f.preco(function (err) {
const msg = err.message;
assert((/Validation error:/).test(msg));
assert((/Required option: nVlPeso has invalid value: undefined/).test(msg));
assert((/Required option: nCdFormato has invalid value: undefined/).test(msg));
assert((/Required option: nVlComprimento has invalid value: undefined/).test(msg));
assert((/Required option: nVlAltura has invalid value: undefined/).test(msg));
assert((/Required option: nVlLargura has invalid value: undefined/).test(msg));
assert((/Required option: nVlDiametro has invalid value: undefined/).test(msg));
assert((/Required option: nVlValorDeclarado has invalid value: undefined/).test(msg));
assert((/Required option: nCdServico has invalid value:/).test(msg));
assert((/Required option: sCepOrigem has invalid value:/).test(msg));
assert((/Required option: sCepDestino has invalid value: undefined/).test(msg));
done();
});
});
it('Set default options', function () {
const defaultOptions = frete.defaultOptions;
const expected = {
sCepOrigem: '',
sCdMaoPropria: 'N',
sCdAvisoRecebimento: 'N',
sDsSenha: '',
nCdEmpresa: '',
nCdServico: ''
};
assert.deepEqual(defaultOptions, expected);
frete.cepOrigem('13467460').servico([
frete.servicos.sedex
]);
assert.notDeepEqual(defaultOptions, expected);
expected.sCepOrigem = '13467460';
expected.nCdServico = [ '04014' ];
assert.deepEqual(defaultOptions, expected);
});
it('Request .prazo() ok', function (done) {
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460');
f.prazo('13466321', function (err, results) {
if (err) return done(err);
const services = f.options.nCdServico;
let hasAllServices = true;
services.forEach(function (service) {
let hasService = false;
for (let i = 0; i < results.length; ++i) {
if (results[i].codigo == service) {
hasService = true;
break;
}
}
if (!hasService) {
hasAllServices = false;
}
});
assert.equal(hasAllServices, true);
done();
});
});
it('Requests .prazo() validation errors', function (done) {
const f = frete().servico('');
f.prazo('13466321', function (err) {
assert.equal((/Validation error/).test(err.message), true);
assert.equal((/Required option: nCdServico has invalid value/).test(err.message), true);
assert.equal((/Expected a valid: string/).test(err.message), true);
f.servico(frete.codigos.sedex);
f.cepOrigem('');
f.prazo('13466321', function (err) {
assert.equal(
(/Required option: sCepOrigem has invalid value/).test(err.message),
true);
done();
});
});
});
it('Requests .prazo() correios error', function (done) {
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460');
f.prazo('555555', function (err) {
assert((/CEP de destino inexistente, consulte o Busca CEP./).test(err.message));
done();
});
});
it('Request .preco()', function (done) {
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460');
f
.peso(1)
.formato(1)
.comprimento(16)
.altura(2)
.largura(11)
.diametro(1)
.maoPropria('N')
.valorDeclarado(50)
.avisoRecebimento('S');
f.preco('13466321', function (err, results) {
if (err) return done(err);
const services = f.options.nCdServico;
let hasAllServices = true;
services.forEach(function (service) {
let hasService = false;
for (let i = 0; i < results.length; ++i) {
if (results[i].codigo == service) {
hasService = true;
break;
}
}
if (!hasService) {
hasAllServices = false;
}
});
assert.equal(hasAllServices, true);
done();
});
});
it('Request .precoPrazo()', function (done) {
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460');
f
.peso(1)
.formato(1)
.comprimento(16)
.altura(2)
.largura(11)
.diametro(1)
.maoPropria('N')
.valorDeclarado(50)
.avisoRecebimento('S');
f.precoPrazo('13466321', function (err, results) {
if (err) return done(err);
const services = f.options.nCdServico;
let hasAllServices = true;
services.forEach(function (service) {
let hasService = false;
for (let i = 0; i < results.length; ++i) {
if (results[i].codigo == service) {
hasService = true;
break;
}
}
if (!hasService) {
hasAllServices = false;
}
});
assert.equal(hasAllServices, true);
done();
});
});
it('Request .preco() config object', function (done) {
frete.cepOrigem('13467460').servico([ frete.codigos.pac ]);
const f = frete({
cepDestino: '13466321',
peso: 1,
formato: 1,
comprimento: 16,
altura: 2,
largura: 11,
diametro: 1,
maoPropria: 'N',
valorDeclarado: 50,
avisoRecebimento: 'S'
});
f.preco(function(err, results) {
if (err) { return done(err); }
const services = f.options.nCdServico;
let hasAllServices = true;
services.forEach(function (service) {
let hasService = false;
for (let i = 0; i < results.length; ++i) {
if (results[i].codigo == service) {
hasService = true;
break;
}
}
if (!hasService) {
hasAllServices = false;
}
});
assert.equal(hasAllServices, true);
done();
});
});
it('[promises] support .preco()', async() => {
frete.cepOrigem('13467460').servico([ frete.codigos.pac ]);
const f = frete({
cepDestino: '13466321',
peso: 1,
formato: 1,
comprimento: 16,
altura: 2,
largura: 11,
diametro: 1,
maoPropria: 'N',
valorDeclarado: 50,
avisoRecebimento: 'S'
});
const results = await f.preco({});
const services = f.options.nCdServico;
let hasAllServices = true;
services.forEach(function (service) {
let hasService = false;
for (let i = 0; i < results.length; ++i) {
if (results[i].codigo == service) {
hasService = true;
break;
}
}
if (!hasService) {
hasAllServices = false;
}
});
assert.equal(hasAllServices, true);
});
it('[promises] Request .prazo() ok', async() => {
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460');
const results = await f.prazo('13466321');
const services = f.options.nCdServico;
let hasAllServices = true;
services.forEach(function (service) {
let hasService = false;
for (let i = 0; i < results.length; ++i) {
if (results[i].codigo == service) {
hasService = true;
break;
}
}
if (!hasService) {
hasAllServices = false;
}
});
assert.equal(hasAllServices, true);
});
it('[promises] requests .prazo() validation errors', async() => {
let f = frete().servico('');
try {
const results = await f.prazo('13466321');
assert(!results);
} catch(err) {
assert.equal((/Validation error/).test(err.message), true);
assert.equal((/Required option: nCdServico has invalid value/).test(err.message), true);
assert.equal((/Expected a valid: string/).test(err.message), true);
f.servico(frete.codigos.sedex);
f.cepOrigem('');
}
try {
const results = await f.prazo('13466321');
assert(!results);
} catch (err) {
assert.equal((/Required option: sCepOrigem has invalid value/).test(err.message), true);
}
});
it('[promises] request .precoPrazo()', async() => {
const f = frete().servico([ frete.servicos.sedex ]).cepOrigem('13467460');
f
.peso(1)
.formato(1)
.comprimento(16)
.altura(2)
.largura(11)
.diametro(1)
.maoPropria('N')
.valorDeclarado(50)
.avisoRecebimento('S');
const results = await f.precoPrazo('13466321');
const services = f.options.nCdServico;
let hasAllServices = true;
services.forEach(function (service) {
let hasService = false;
for (let i = 0; i < results.length; ++i) {
if (results[i].codigo == service) {
hasService = true;
break;
}
}
if (!hasService) {
hasAllServices = false;
}
});
assert.equal(hasAllServices, true);
});
it('[promises] request .preco() config object', async() => {
frete.cepOrigem('13467460').servico([ frete.codigos.pac ]);
const f = frete({
cepDestino: '13466321',
peso: 1,
formato: 1,
comprimento: 16,
altura: 2,
largura: 11,
diametro: 1,
maoPropria: 'N',
valorDeclarado: 50,
avisoRecebimento: 'S'
});
const results = await f.preco();
const services = f.options.nCdServico;
let hasAllServices = true;
services.forEach(function (service) {
let hasService = false;
for (let i = 0; i < results.length; ++i) {
if (results[i].codigo == service) {
hasService = true;
break;
}
}
if (!hasService) {
hasAllServices = false;
}
});
assert.equal(hasAllServices, true);
});
it('listaServicos', async () => {
const results = await frete().listaServicos();
assert(results);
assert(results.length > 10);
const basicServices = [
'04014',
'04065',
'04510',
'04707',
'40215',
'40169',
'40290'
];
for (const service of basicServices) {
assert(results.some((r) => r.codigo == service));
}
});
it('listaServicosStar', async () => {
const results = await frete().listaServicosStar();
// just some sanity check
assert(results);
assert(results.length > 10);
});
it('verificaModal', async () => {
const results = await frete({
cepOrigem: '13467460',
cepDestino: '13466321',
}).servico([ frete.servicos.sedex ]).verificaModal();
assert(results);
assert(results.length, 1);
assert(results[0].codigo, '04014');
});
it('searches a service by text', () => {
assert(frete.servicos.search('sedex').length > 90);
assert(frete.servicos.search('carta registrada').length > 10);
// accepts any case
assert(frete.servicos.search('CARTA registrAdA A VISTA').length === 1);
});
it('sanity check services', () => {
assert.strictEqual(frete.servicos.list.length, 338);
assert(frete.servicos.search('SEDEX a vista')[0].codigo === '04014');
assert(frete.servicos.search('SEDEX a vista pgto na entrega')[0].codigo === '04065');
assert(frete.servicos.search('PAC a vista')[0].codigo === '04510');
assert(frete.servicos.search('PAC a vista pagto na entrega')[0].codigo === '04707');
assert(frete.servicos.search('SEDEX 10 A FATURAR')[0].codigo === '40215');
assert(frete.servicos.search('SEDEX 12 A FATURAR')[0].codigo === '40169');
assert(frete.servicos.search('SEDEX HOJE A FATURAR')[0].codigo === '40290');
});
it('Request .prazo with a string service', async () => {
const f = frete().servico('82414').cepOrigem('13467460');
const results = await f.prazo('13466321');
assert.strictEqual(results.length, 1);
assert.strictEqual(results[0].codigo, 82414);
assert.strictEqual(results[0].name, 'FAC MONITORADO LOCAL');
assert.strictEqual(results[0].name, frete.servicos.byCode[82414].descricao);
});
});