Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Correction du statut de saisie des mesures générales #251

Merged
merged 1 commit into from
May 9, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/modeles/homologation.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ class Homologation {

const idMesures = Object.keys(moteurRegles.mesures(this.descriptionService));
mesuresGenerales = mesuresGenerales.filter((m) => idMesures.includes(m.id));
this.mesures = new Mesures({ mesuresGenerales, mesuresSpecifiques }, referentiel);
this.mesures = new Mesures({ mesuresGenerales, mesuresSpecifiques }, referentiel, idMesures);

this.rolesResponsabilites = new RolesResponsabilites(rolesResponsabilites);
this.risques = new Risques(
Expand Down
13 changes: 12 additions & 1 deletion src/modeles/mesures.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ const MesuresSpecifiques = require('./mesuresSpecifiques');
const Referentiel = require('../referentiel');

class Mesures extends InformationsHomologation {
constructor(donnees = {}, referentiel = Referentiel.creeReferentielVide()) {
constructor(donnees = {}, referentiel = Referentiel.creeReferentielVide(), identifiantsMesures) {
super({
listesAgregats: {
mesuresGenerales: MesuresGenerales,
Expand All @@ -13,6 +13,7 @@ class Mesures extends InformationsHomologation {
});
this.renseigneProprietes(donnees, referentiel);
this.referentiel = referentiel;
this.identifiantsMesures = identifiantsMesures || this.referentiel.identifiantsMesures();
}

nonSaisies() {
Expand All @@ -26,6 +27,16 @@ class Mesures extends InformationsHomologation {
statistiques() {
return this.mesuresGenerales.statistiques();
}

statutSaisie() {
const statutSaisieMesures = super.statutSaisie();
if (statutSaisieMesures === Mesures.COMPLETES
&& this.identifiantsMesures.length !== this.mesuresGenerales.nombre()) {
return Mesures.A_COMPLETER;
}

return statutSaisieMesures;
}
}

module.exports = Mesures;
2 changes: 1 addition & 1 deletion src/modeles/mesuresGenerales.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ class MesuresGenerales extends ElementsConstructibles {

statutSaisie() {
if (this.nonSaisies()) return MesuresGenerales.A_SAISIR;
if (this.items.length === this.referentiel.identifiantsMesures().length) {
if (this.items.every((item) => item.statutSaisie() === MesuresGenerales.COMPLETES)) {
return MesuresGenerales.COMPLETES;
}
return MesuresGenerales.A_COMPLETER;
Expand Down
17 changes: 15 additions & 2 deletions test/modeles/mesures.spec.js
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
const expect = require('expect.js');

const InformationsHomologation = require('../../src/modeles/informationsHomologation');
const { A_COMPLETER } = require('../../src/modeles/informationsHomologation');
const Mesures = require('../../src/modeles/mesures');
const MesuresSpecifiques = require('../../src/modeles/mesuresSpecifiques');
const Referentiel = require('../../src/referentiel');

const elles = it;

Expand All @@ -21,6 +22,18 @@ describe('Les mesures liées à une homologation', () => {
mesuresSpecifiques: [{ description: 'Une mesure spécifique' }],
});

expect(mesures.statutSaisie()).to.equal(InformationsHomologation.A_COMPLETER);
expect(mesures.statutSaisie()).to.equal(A_COMPLETER);
});

elles('sont à completer si toutes les mesures nécessaires ne sont pas complétées', () => {
const referentiel = Referentiel.creeReferentielVide();
referentiel.identifiantsMesures = () => ['mesure 1', 'mesure 2'];

const mesures = new Mesures({
mesuresGenerales: [{ id: 'mesure 1', statut: 'fait' }],
mesuresSpecifiques: [],
}, referentiel);

expect(mesures.statutSaisie()).to.equal(A_COMPLETER);
});
});
30 changes: 30 additions & 0 deletions test/modeles/mesuresGenerales.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
const expect = require('expect.js');

const MesuresGenerales = require('../../src/modeles/mesuresGenerales');

const { A_SAISIR, COMPLETES, A_COMPLETER } = MesuresGenerales;

describe('La liste des mesures générales', () => {
const referentiel = { identifiantsMesures: () => ['mesure'] };

it("est à saisir quand rien n'est saisi", () => {
const donnees = { mesuresGenerales: [] };
const mesuresGenerales = new MesuresGenerales(donnees);

expect(mesuresGenerales.statutSaisie()).to.equal(A_SAISIR);
});

it('est complete quand les mesures sont completes', () => {
const donnees = { mesuresGenerales: [{ id: 'mesure', statut: 'fait' }] };
const mesuresGenerales = new MesuresGenerales(donnees, referentiel);

expect(mesuresGenerales.statutSaisie()).to.equal(COMPLETES);
});

it('est à completer quand toutes les mesures ne sont pas completes', () => {
const donnees = { mesuresGenerales: [{ id: 'mesure' }] };
const mesuresGenerales = new MesuresGenerales(donnees, referentiel);

expect(mesuresGenerales.statutSaisie()).to.equal(A_COMPLETER);
});
});