Skip to content

Commit

Permalink
Retourne une erreur si type justificatif non trouvé
Browse files Browse the repository at this point in the history
  • Loading branch information
egaillot committed Jun 14, 2024
1 parent 4820f5a commit a5cb943
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 13 deletions.
11 changes: 9 additions & 2 deletions src/api/pieceJustificative.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
const { ErreurAbsenceReponseDestinataire, ErreurReponseRequete, ErreurDestinataireInexistant } = require('../erreurs');
const {
ErreurAbsenceReponseDestinataire,
ErreurDestinataireInexistant,
ErreurReponseRequete,
ErreurTypeJustificatifIntrouvable,
} = require('../erreurs');

const urlRedirection = (idConversation, adaptateurDomibus) => adaptateurDomibus
.urlRedirectionDepuisReponse(idConversation)
Expand Down Expand Up @@ -54,7 +59,9 @@ const pieceJustificative = (
}
})
.catch((e) => {
if (e instanceof ErreurDestinataireInexistant) {
if (
e instanceof ErreurDestinataireInexistant || e instanceof ErreurTypeJustificatifIntrouvable
) {
reponse.status(422).json({ erreur: e.message });
} else if (e instanceof AggregateError) {
let codeStatus = 500;
Expand Down
7 changes: 6 additions & 1 deletion src/depots/depotServicesCommunsLocal.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const { ErreurTypeJustificatifIntrouvable } = require('../erreurs');
const TypeJustificatif = require('../ebms/typeJustificatif');

const DONNEES_DEPOT = {
Expand All @@ -14,7 +15,11 @@ class DepotServicesCommunsLocal {
}

trouveTypeJustificatif(id) {
const donneesTypeJustificatif = this.donnees.typesJustificatif.find((tj) => tj.id === id);
const donneesTypeJustificatif = this.donnees?.typesJustificatif?.find((tj) => tj.id === id);
if (typeof donneesTypeJustificatif === 'undefined') {
return Promise.reject(new ErreurTypeJustificatifIntrouvable(`Type justificatif avec identifiant "${id}" introuvable`));
}

const typeJustificatif = new TypeJustificatif(donneesTypeJustificatif);
return Promise.resolve(typeJustificatif);
}
Expand Down
2 changes: 2 additions & 0 deletions src/erreurs.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ class ErreurEchecAuthentification extends Error {}
class ErreurInstructionSOAPInconnue extends Error {}
class ErreurJetonInvalide extends Error {}
class ErreurReponseRequete extends Error {}
class ErreurTypeJustificatifIntrouvable extends Error {}

module.exports = {
ErreurAbsenceReponseDestinataire,
Expand All @@ -14,4 +15,5 @@ module.exports = {
ErreurInstructionSOAPInconnue,
ErreurJetonInvalide,
ErreurReponseRequete,
ErreurTypeJustificatifIntrouvable,
};
13 changes: 13 additions & 0 deletions test/depots/depotServicesCommunsLocal.spec.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
const { ErreurTypeJustificatifIntrouvable } = require('../../src/erreurs');
const DepotServicesCommuns = require('../../src/depots/depotServicesCommunsLocal');

describe('Le Dépôt (local, bouchonné) de données des services communs', () => {
Expand All @@ -17,4 +18,16 @@ describe('Le Dépôt (local, bouchonné) de données des services communs', () =
expect(typeJustificatif.formatDistribution).toBe('application/pdf');
});
});

it('retourne une erreur si type justificatif introuvable', () => {
expect.assertions(2);

const depot = new DepotServicesCommuns({});

return depot.trouveTypeJustificatif('12345')
.catch((e) => {
expect(e).toBeInstanceOf(ErreurTypeJustificatifIntrouvable);
expect(e.message).toBe('Type justificatif avec identifiant "12345" introuvable');
});
});
});
32 changes: 22 additions & 10 deletions test/routes/routesRequete.spec.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const axios = require('axios');

const serveurTest = require('./serveurTest');
const { ErreurAbsenceReponseDestinataire } = require('../../src/erreurs');
const { ErreurAbsenceReponseDestinataire, ErreurTypeJustificatifIntrouvable } = require('../../src/erreurs');

describe('Le serveur des routes `/requete`', () => {
const serveur = serveurTest();
Expand Down Expand Up @@ -30,17 +30,29 @@ describe('Le serveur des routes `/requete`', () => {
});
});
});
});

it('retourne une erreur 501 quand le feature flip est désactivé', () => {
expect.assertions(2);
it('retourne une erreur HTTP 422 (Unprocessable Content) si le type de justificatif est introuvable', () => {
serveur.depotServicesCommuns().trouveTypeJustificatif = () => (
Promise.reject(new ErreurTypeJustificatifIntrouvable('oups'))
);

serveur.adaptateurEnvironnement().avecRequetePieceJustificative = () => false;
return axios.get(`http://localhost:${port}/requete/pieceJustificative`)
.catch(({ response }) => {
expect(response.status).toEqual(422);
expect(response.data).toEqual({ erreur: 'oups' });
});
});

return axios.get(`http://localhost:${port}/requete/pieceJustificative?destinataire=AP_FR_01`)
.catch(({ response }) => {
expect(response.status).toEqual(501);
expect(response.data).toEqual('Not Implemented Yet!');
});
});
it('retourne une erreur 501 quand le feature flip est désactivé', () => {
expect.assertions(2);

serveur.adaptateurEnvironnement().avecRequetePieceJustificative = () => false;

return axios.get(`http://localhost:${port}/requete/pieceJustificative?destinataire=AP_FR_01`)
.catch(({ response }) => {
expect(response.status).toEqual(501);
expect(response.data).toEqual('Not Implemented Yet!');
});
});
});

0 comments on commit a5cb943

Please sign in to comment.