Skip to content

Commit

Permalink
Merge pull request #38 from paulo-santana/master
Browse files Browse the repository at this point in the history
feat: adiciona código de erro semântico em casos de ceps mal formatados
  • Loading branch information
filipedeschamps committed Jun 10, 2020
2 parents 0cc0f40 + 4e991f0 commit 4c342b7
Show file tree
Hide file tree
Showing 2 changed files with 51 additions and 21 deletions.
10 changes: 9 additions & 1 deletion pages/api/cep/v1/[cep].js
Expand Up @@ -33,7 +33,15 @@ async function Cep(request, response) {

} catch (error) {
if (error.name === 'CepPromiseError') {
response.status(404);
switch(error.type) {
case 'validation_error':
response.status(400);
break;
case 'service_error':
response.status(404);
break;
}

response.json(error);
return;
}
Expand Down
62 changes: 42 additions & 20 deletions tests/cep-v1.test.js
@@ -1,15 +1,15 @@
const axios = require('axios');

const createServer = require('./helpers/server.js')
const createServer = require('./helpers/server.js');
const server = createServer();

beforeAll(async () => {
await server.start();
})
});

afterAll(async () => {
await server.stop();
})
});

describe('/cep/v1 (E2E)', () => {
test('Utilizando um CEP válido: 05010000', async () => {
Expand All @@ -25,24 +25,46 @@ describe('/cep/v1 (E2E)', () => {
});
});

test.skip('Utilizando um CEP inexistente: 00000000', async () => {
// O endpoint /cep/v1 está retornando 404 independente
// do CEP não existir ou ele não ser válido. Podemos melhorar
// esse comportamento fazendo uma diferenciação no Status do
// response para quando for um type "validation_error" ou "service_error"

// Nesse caso aqui seria um "service_error":
// "Todos os serviços de CEP retornaram erro."
test('Utilizando um CEP inexistente: 00000000', async () => {
expect.assertions(2);
const requestUrl = `${server.getUrl()}/api/cep/v1/00000000`;

try {
await axios.get(requestUrl);

} catch (error) {
const { response } = error;

expect(response.status).toBe(404);
expect(response.data).toMatchObject({
name: 'CepPromiseError',
message: 'Todos os serviços de CEP retornaram erro.',
type: 'service_error'
});
}
});

test.skip('Utilizando um CEP inválido: 999999999999999', async () => {
// O endpoint /cep/v1 está retornando 404 independente
// do CEP não existir ou ele não ser válido. Podemos melhorar
// esse comportamento fazendo uma diferenciação no Status do
// response para quando for um type "validation_error" ou "service_error"

// Nesse caso aqui seria um "validation_error":
// "CEP deve conter exatamente 8 caracteres."
test('Utilizando um CEP inválido: 999999999999999', async () => {
expect.assertions(2);
const requestUrl = `${server.getUrl()}/api/cep/v1/999999999999999`;

try {
await axios.get(requestUrl);

} catch (error) {
const { response } = error;

expect(response.status).toBe(400);
expect(response.data).toEqual({
name: 'CepPromiseError',
message: 'CEP deve conter exatamente 8 caracteres.',
type: 'validation_error',
errors: [{
message: 'CEP informado possui mais do que 8 caracteres.',
service: 'cep_validation'
}]
});
}
});

});
});

0 comments on commit 4c342b7

Please sign in to comment.