diff --git a/src/depotDonnees.js b/src/depotDonnees.js index cb16337..d7f8d75 100644 --- a/src/depotDonnees.js +++ b/src/depotDonnees.js @@ -14,6 +14,11 @@ class DepotDonnees { statutRecuperationDocument() { return Promise.resolve(new StatutRecuperationDocument(this.donnees.statutRecuperationDocument)); } + + termineRecuperationDocument() { + this.donnees.statutRecuperationDocument = StatutRecuperationDocument.TERMINE; + return Promise.resolve(); + } } module.exports = DepotDonnees; diff --git a/src/modeles/statutRecuperationDocument.js b/src/modeles/statutRecuperationDocument.js index 47aeb8e..773dde7 100644 --- a/src/modeles/statutRecuperationDocument.js +++ b/src/modeles/statutRecuperationDocument.js @@ -1,6 +1,7 @@ const STATUTS = { EN_COURS: 'enCours', INITIAL: 'initial', + TERMINE: 'termine', }; class StatutRecuperationDocument { @@ -8,10 +9,6 @@ class StatutRecuperationDocument { this.statut = statut || STATUTS.INITIAL; } - deviensEnCours() { - this.statut = STATUTS.EN_COURS; - } - estEnCours() { return this.statut === STATUTS.EN_COURS; } @@ -19,9 +16,14 @@ class StatutRecuperationDocument { estInitial() { return this.statut === STATUTS.INITIAL; } + + estTermine() { + return this.statut === STATUTS.TERMINE; + } } Object.assign(StatutRecuperationDocument, STATUTS); StatutRecuperationDocument.enCours = () => new StatutRecuperationDocument(STATUTS.EN_COURS); +StatutRecuperationDocument.termine = () => new StatutRecuperationDocument(STATUTS.TERMINE); module.exports = StatutRecuperationDocument; diff --git a/src/routes/routesOOTS.js b/src/routes/routesOOTS.js index 6cd9a34..4fd7004 100644 --- a/src/routes/routesOOTS.js +++ b/src/routes/routesOOTS.js @@ -15,6 +15,15 @@ const routesOOTS = (config) => { } }); + routes.post('/document', (requete, reponse) => { + if (adaptateurEnvironnement.avecOOTS()) { + depotDonnees.termineRecuperationDocument() + .then(() => reponse.send()); + } else { + reponse.status(501).send('Not Implemented Yet!'); + } + }); + return routes; }; diff --git a/src/vues/accueil.pug b/src/vues/accueil.pug index c645127..193ea53 100644 --- a/src/vues/accueil.pug +++ b/src/vues/accueil.pug @@ -20,6 +20,8 @@ block page a(href = '/oots/document') Récupérer un document par OOTS if statut.estEnCours() p Document en cours de récupération + if statut.estTermine() + p Document récupéré ! br a(href = '/auth/fcplus/destructionSession') Déconnexion diff --git a/test/depotDonnees.spec.js b/test/depotDonnees.spec.js index ca6ca5d..9f8adef 100644 --- a/test/depotDonnees.spec.js +++ b/test/depotDonnees.spec.js @@ -1,4 +1,5 @@ const DepotDonnees = require('../src/depotDonnees'); +const StatutRecuperationDocument = require('../src/modeles/statutRecuperationDocument'); describe('Le dépôt de données', () => { it('initialise le dépot de données avec un statut de récupération de document initial', () => { @@ -13,4 +14,14 @@ describe('Le dépôt de données', () => { .then(() => depot.statutRecuperationDocument()) .then((statut) => expect(statut.estEnCours()).toBe(true)); }); + + it('passe le statut de récupération de document à « terminé »', () => { + const depot = new DepotDonnees({ + statutRecuperationDocument: StatutRecuperationDocument.EN_COURS, + }); + + return depot.termineRecuperationDocument() + .then(() => depot.statutRecuperationDocument()) + .then((statut) => expect(statut.estTermine()).toBe(true)); + }); }); diff --git a/test/routes/routesBase.spec.js b/test/routes/routesBase.spec.js index 6a5daa5..fd025fb 100644 --- a/test/routes/routesBase.spec.js +++ b/test/routes/routesBase.spec.js @@ -63,6 +63,18 @@ describe('Le serveur des routes `/`', () => { }) .catch(leveErreur); }); + + it('affiche lorsque le document a été récupéré', () => { + serveur.depotDonnees().statutRecuperationDocument = () => ( + Promise.resolve(StatutRecuperationDocument.termine()) + ); + + return axios.get(`http://localhost:${port}/`) + .then((reponse) => { + expect(reponse.data).toContain('Document récupéré !'); + }) + .catch(leveErreur); + }); }); }); }); diff --git a/test/routes/routesOOTS.spec.js b/test/routes/routesOOTS.spec.js index 019b0d6..3a8ea3b 100644 --- a/test/routes/routesOOTS.spec.js +++ b/test/routes/routesOOTS.spec.js @@ -49,4 +49,29 @@ describe('le serveur des routes `/oots/document`', () => { }); }); }); + + describe('sur POST /oots/document', () => { + it('lève une erreur (501) not implemented si la fonctionnalité est désactivée', () => { + expect.assertions(2); + serveur.adaptateurEnvironnement().avecOOTS = () => false; + + return axios.post(`http://localhost:${port}/oots/document`) + .catch(({ response }) => { + expect(response.status).toEqual(501); + expect(response.data).toEqual('Not Implemented Yet!'); + }); + }); + + it('met à jour le statut de récupération du document', () => { + let depotDonneesAppele = false; + serveur.depotDonnees().termineRecuperationDocument = () => { + depotDonneesAppele = true; + return Promise.resolve(); + }; + + return axios.post(`http://localhost:${port}/oots/document`) + .then(() => expect(depotDonneesAppele).toBe(true)) + .catch(leveErreur); + }); + }); }); diff --git a/test/routes/serveurTest.js b/test/routes/serveurTest.js index cb8891a..0eaa886 100644 --- a/test/routes/serveurTest.js +++ b/test/routes/serveurTest.js @@ -46,6 +46,7 @@ const serveurTest = () => { depotDonnees = { demarreRecuperationDocument: () => Promise.resolve(), statutRecuperationDocument: () => Promise.resolve(new StatutRecuperationDocument()), + termineRecuperationDocument: () => Promise.resolve(), }; fabriqueSessionFCPlus = {