diff --git a/src/api/pieceJustificative.js b/src/api/pieceJustificative.js index 2824762..20416dc 100644 --- a/src/api/pieceJustificative.js +++ b/src/api/pieceJustificative.js @@ -4,6 +4,7 @@ const { ErreurCodePaysIntrouvable, ErreurDestinataireInexistant, ErreurReponseRequete, + ErreurRequeteurInexistant, ErreurTypeJustificatifIntrouvable, } = require('../erreurs'); @@ -11,15 +12,21 @@ const estErreurAbsenceReponse = (e) => e instanceof ErreurAbsenceReponseDestinat const estErreurReponseRequete = (e) => e instanceof ErreurReponseRequete; const estErreurMetier = (e) => estErreurAbsenceReponse(e) || estErreurReponseRequete(e); -const paramsRequete = (config, codeDemarche, codePays) => { - const { depotPointsAcces, depotServicesCommuns } = config; +const paramsRequete = (config, codeDemarche, codePays, idRequeteur) => { + const { depotPointsAcces, depotRequeteurs, depotServicesCommuns } = config; return depotServicesCommuns.trouveTypesJustificatifsPourDemarche(codeDemarche) .then((tjs) => tjs[0]) .then((tj) => depotServicesCommuns.trouveFournisseurs(tj.id, codePays) .then((fs) => fs[0]) .then((f) => depotPointsAcces.trouvePointAcces(f.idPointAcces()) - .then((pa) => ({ destinataire: pa, fournisseur: f, typeJustificatif: tj })))); + .then((pa) => depotRequeteurs.trouveRequeteur(idRequeteur) + .then((r) => ({ + destinataire: pa, + fournisseur: f, + requeteur: r, + typeJustificatif: tj, + }))))); }; const pieceJustificativeRecue = (idConversation, adaptateurDomibus) => adaptateurDomibus @@ -36,15 +43,26 @@ const pieceJustificative = (config, requete, reponse) => { adaptateurUUID, } = config; const idConversation = adaptateurUUID.genereUUID(); - const { codeDemarche, codePays, previsualisationRequise } = requete.query; + const { + codeDemarche, + codePays, + idRequeteur, + previsualisationRequise, + } = requete.query; - return paramsRequete(config, codeDemarche, codePays) - .then(({ destinataire, fournisseur, typeJustificatif }) => { + return paramsRequete(config, codeDemarche, codePays, idRequeteur) + .then(({ + destinataire, + fournisseur, + requeteur, + typeJustificatif, + }) => { adaptateurDomibus.envoieMessageRequete({ codeDemarche, destinataire, fournisseur, idConversation, + requeteur, typeJustificatif, previsualisationRequise: (previsualisationRequise === 'true' || previsualisationRequise === ''), }); @@ -66,6 +84,7 @@ const pieceJustificative = (config, requete, reponse) => { e instanceof ErreurCodeDemarcheIntrouvable || e instanceof ErreurCodePaysIntrouvable || e instanceof ErreurDestinataireInexistant + || e instanceof ErreurRequeteurInexistant || e instanceof ErreurTypeJustificatifIntrouvable ) { reponse.status(422).json({ erreur: e.message }); diff --git a/src/ootsFrance.js b/src/ootsFrance.js index 6d96648..2b130ce 100644 --- a/src/ootsFrance.js +++ b/src/ootsFrance.js @@ -11,6 +11,7 @@ const creeServeur = (config) => { adaptateurEnvironnement, adaptateurUUID, depotPointsAcces, + depotRequeteurs, depotServicesCommuns, ecouteurDomibus, horodateur, @@ -29,6 +30,7 @@ const creeServeur = (config) => { adaptateurEnvironnement, adaptateurUUID, depotPointsAcces, + depotRequeteurs, depotServicesCommuns, })); diff --git a/src/routes/routesRequete.js b/src/routes/routesRequete.js index 7944a16..77bbed4 100644 --- a/src/routes/routesRequete.js +++ b/src/routes/routesRequete.js @@ -8,6 +8,7 @@ const routesRequete = (config) => { adaptateurEnvironnement, adaptateurUUID, depotPointsAcces, + depotRequeteurs, depotServicesCommuns, } = config; @@ -20,6 +21,7 @@ const routesRequete = (config) => { adaptateurDomibus, adaptateurUUID, depotPointsAcces, + depotRequeteurs, depotServicesCommuns, }, requete, diff --git a/test/api/pieceJustificative.spec.js b/test/api/pieceJustificative.spec.js index 9689205..a2a8646 100644 --- a/test/api/pieceJustificative.spec.js +++ b/test/api/pieceJustificative.spec.js @@ -1,12 +1,14 @@ const pieceJustificative = require('../../src/api/pieceJustificative'); const PointAcces = require('../../src/ebms/pointAcces'); const Fournisseur = require('../../src/ebms/fournisseur'); +const Requeteur = require('../../src/ebms/requeteur'); const TypeJustificatif = require('../../src/ebms/typeJustificatif'); const { ErreurAbsenceReponseDestinataire, - ErreurReponseRequete, ErreurDestinataireInexistant, + ErreurRequeteurInexistant, + ErreurReponseRequete, } = require('../../src/erreurs'); describe('Le requêteur de pièce justificative', () => { @@ -14,6 +16,7 @@ describe('Le requêteur de pièce justificative', () => { const adaptateurEnvironnement = {}; const adaptateurUUID = {}; const depotPointsAcces = {}; + const depotRequeteurs = {}; const depotServicesCommuns = {}; const config = { @@ -21,6 +24,7 @@ describe('Le requêteur de pièce justificative', () => { adaptateurEnvironnement, adaptateurUUID, depotPointsAcces, + depotRequeteurs, depotServicesCommuns, }; const requete = {}; @@ -32,6 +36,7 @@ describe('Le requêteur de pièce justificative', () => { adaptateurDomibus.urlRedirectionDepuisReponse = () => Promise.resolve(); adaptateurUUID.genereUUID = () => ''; depotPointsAcces.trouvePointAcces = () => Promise.resolve({}); + depotRequeteurs.trouveRequeteur = () => Promise.resolve(new Requeteur()); depotServicesCommuns.trouveFournisseurs = () => Promise.resolve([new Fournisseur()]); depotServicesCommuns.trouveTypesJustificatifsPourDemarche = () => Promise.resolve( [new TypeJustificatif()], @@ -124,7 +129,7 @@ describe('Le requêteur de pièce justificative', () => { return pieceJustificative(config, requete, reponse); }); - it('transmets fournisseur à requête', () => { + it('transmet fournisseur à requête', () => { expect.assertions(1); depotServicesCommuns.trouveFournisseurs = () => ( @@ -143,6 +148,45 @@ describe('Le requêteur de pièce justificative', () => { return pieceJustificative(config, requete, reponse); }); + it('interroge le dépôt de requêteurs', () => { + expect.assertions(1); + requete.query.idRequeteur = '123456'; + + depotRequeteurs.trouveRequeteur = (id) => { + expect(id).toBe('123456'); + return Promise.resolve(new Requeteur()); + }; + + return pieceJustificative(config, requete, reponse); + }); + + it('transmet requêteur à requête', () => { + expect.assertions(1); + depotRequeteurs.trouveRequeteur = () => Promise.resolve(new Requeteur({ nom: 'Un requêteur' })); + + adaptateurDomibus.envoieMessageRequete = ({ requeteur }) => { + expect(requeteur.nom).toBe('Un requêteur'); + return Promise.resolve(); + }; + + return pieceJustificative(config, requete, reponse); + }); + + it("génère une erreur 422 lorsque le requêteur n'existe pas", () => { + requete.query.idRequeteur = 'requeteurInexistant'; + depotRequeteurs.trouveRequeteur = () => Promise.reject(new ErreurRequeteurInexistant('Oups')); + + reponse.status = (codeStatus) => { + expect(codeStatus).toEqual(422); + return reponse; + }; + reponse.json = (contenu) => { + expect(contenu).toEqual({ erreur: 'Oups' }); + }; + + return pieceJustificative(config, requete, reponse); + }); + it('utilise un identifiant de conversation', () => { adaptateurUUID.genereUUID = () => '11111111-1111-1111-1111-111111111111'; diff --git a/test/routes/serveurTest.js b/test/routes/serveurTest.js index 117cd57..3eda918 100644 --- a/test/routes/serveurTest.js +++ b/test/routes/serveurTest.js @@ -1,6 +1,7 @@ const { ErreurAbsenceReponseDestinataire } = require('../../src/erreurs'); const OOTS_FRANCE = require('../../src/ootsFrance'); const Fournisseur = require('../../src/ebms/fournisseur'); +const Requeteur = require('../../src/ebms/requeteur'); const TypeJustificatif = require('../../src/ebms/typeJustificatif'); const serveurTest = () => { @@ -8,6 +9,7 @@ const serveurTest = () => { let adaptateurEnvironnement; let adaptateurUUID; let depotPointsAcces; + let depotRequeteurs; let depotServicesCommuns; let ecouteurDomibus; let horodateur; @@ -37,6 +39,10 @@ const serveurTest = () => { trouvePointAcces: () => Promise.resolve({}), }; + depotRequeteurs = { + trouveRequeteur: () => Promise.resolve(new Requeteur()), + }; + depotServicesCommuns = { trouveFournisseurs: () => Promise.resolve([new Fournisseur()]), trouveTypeJustificatif: () => Promise.resolve({}), @@ -58,6 +64,7 @@ const serveurTest = () => { adaptateurEnvironnement, adaptateurUUID, depotPointsAcces, + depotRequeteurs, depotServicesCommuns, ecouteurDomibus, horodateur, @@ -74,6 +81,7 @@ const serveurTest = () => { adaptateurUUID: () => adaptateurUUID, arrete, depotPointsAcces: () => depotPointsAcces, + depotRequeteurs: () => depotRequeteurs, depotServicesCommuns: () => depotServicesCommuns, ecouteurDomibus: () => ecouteurDomibus, horodateur: () => horodateur,