Skip to content

Commit

Permalink
feat!: split labels nationaux and rename autres labels
Browse files Browse the repository at this point in the history
  • Loading branch information
marc-gavanier committed Jun 6, 2024
1 parent fe540b2 commit 9b5ff4d
Show file tree
Hide file tree
Showing 28 changed files with 469 additions and 184 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { DispositifProgrammeNational, DispositifProgrammesNationaux } from './dispositif-programme-national';
import { DispositifProgrammeNationalError } from './errors';

describe('dispositif programme national model', (): void => {
it('should create valid dispositif programmes nationaux', (): void => {
const dispositifProgrammesNationaux: DispositifProgrammesNationaux = DispositifProgrammesNationaux([
DispositifProgrammeNational.ConseillersNumeriques
]);

expect(dispositifProgrammesNationaux).toStrictEqual([DispositifProgrammeNational.ConseillersNumeriques]);
});

it('should not create invalid dispositif programmes nationaux', (): void => {
expect((): void => {
DispositifProgrammesNationaux(['France Emploi' as DispositifProgrammeNational]);
}).toThrow(new DispositifProgrammeNationalError('France Emploi' as DispositifProgrammeNational));
});

it('should not create invalid dispositif programmes nationaux containing a valid and an invalid value', (): void => {
expect((): void => {
DispositifProgrammesNationaux([
DispositifProgrammeNational.ConseillersNumeriques,
'France Emploi' as DispositifProgrammeNational
]);
}).toThrow(new DispositifProgrammeNationalError('France Emploi' as DispositifProgrammeNational));
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { Model } from '../model';
import { DispositifProgrammeNationalError } from './errors';

export enum DispositifProgrammeNational {
AidantsConnect = 'Aidants Connect',
BibliothequesNumeriqueDeReference = 'Bibliothèques numérique de référence',
CertificationPIX = 'Certification PIX',
ConseillersNumeriques = 'Conseillers numériques',
EmmausConnect = 'Emmaüs Connect',
FranceServices = 'France Services',
GrandeEcoleDuNumerique = 'Grande école du numérique',
LaCroixRouge = 'La Croix Rouge',
PointNumeriqueCAF = "Point d'accès numérique CAF",
PromeneursDuNet = 'Promeneurs du net',
RelaisNumeriqueEmmausConnect = 'Relais numérique (Emmaüs Connect)'
}

export type DispositifProgrammesNationaux = Model<'DispositifProgrammesNationaux', DispositifProgrammeNational[]>;

export type DispositifProgrammeNationalIndefini = 'dispositif ou programme national indéfini';

const firstInvalidDispositifProgrammeNational = (dispositifProgrammeNational: DispositifProgrammeNational): boolean =>
!Object.values(DispositifProgrammeNational).includes(dispositifProgrammeNational);

const throwDispositifProgrammesNationauxError = (
dispositifProgrammesNationaux: DispositifProgrammeNational[]
): DispositifProgrammesNationaux => {
throw new DispositifProgrammeNationalError(
dispositifProgrammesNationaux.find(firstInvalidDispositifProgrammeNational) ?? 'dispositif ou programme national indéfini'
);
};

const isDispositifProgrammesNationaux = (
dispositifProgrammesNationaux: DispositifProgrammeNational[]
): dispositifProgrammesNationaux is DispositifProgrammesNationaux =>
dispositifProgrammesNationaux.find(firstInvalidDispositifProgrammeNational) == null;

/* eslint-disable-next-line @typescript-eslint/naming-convention */
export const DispositifProgrammesNationaux = (
dispositifProgrammesNationaux: DispositifProgrammeNational[]
): DispositifProgrammesNationaux =>
isDispositifProgrammesNationaux(dispositifProgrammesNationaux)
? dispositifProgrammesNationaux
: throwDispositifProgrammesNationauxError(dispositifProgrammesNationaux);
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { ModelError } from '../../../errors';
import { DispositifProgrammeNational, DispositifProgrammeNationalIndefini } from '../dispositif-programme-national';
import { LieuMediationNumerique } from '../../lieu-mediation-numerique';

export class DispositifProgrammeNationalError extends ModelError<LieuMediationNumerique> {
constructor(dispositifProgrammeNational: DispositifProgrammeNational | DispositifProgrammeNationalIndefini) {
super(
'dispositif_programmes_nationaux',
`Le dispositif programmes national '${dispositifProgrammeNational}' n'est pas une valeur admise`
);
}
}
1 change: 1 addition & 0 deletions src/models/dispositif-programme-national/errors/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './dispositif-programme-national.error';
2 changes: 2 additions & 0 deletions src/models/dispositif-programme-national/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './errors';
export * from './dispositif-programme-national';
9 changes: 9 additions & 0 deletions src/models/formation-label/errors/formation-label.error.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ModelError } from '../../../errors';
import { FormationLabel, FormationLabelIndefini } from '../formation-label';
import { LieuMediationNumerique } from '../../lieu-mediation-numerique';

export class FormationLabelError extends ModelError<LieuMediationNumerique> {
constructor(formationLabel: FormationLabel | FormationLabelIndefini) {
super('formations_labels', `Le label de formation '${formationLabel}' n'est pas une valeur admise`);
}
}
1 change: 1 addition & 0 deletions src/models/formation-label/errors/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './formation-label.error';
22 changes: 22 additions & 0 deletions src/models/formation-label/formation-label.spec.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { FormationLabel, FormationsLabels } from './formation-label';
import { FormationLabelError } from './errors';

describe('formations labels model', (): void => {
it('should create valid formations labels', (): void => {
const formationsLabels: FormationsLabels = FormationsLabels([FormationLabel.SudLabs]);

expect(formationsLabels).toStrictEqual([FormationLabel.SudLabs]);
});

it('should not create invalid formation label', (): void => {
expect((): void => {
FormationsLabels(['France Emploi' as FormationLabel]);
}).toThrow(new FormationLabelError('France Emploi' as FormationLabel));
});

it('should not create invalid formation label containing a valid and an invalid value', (): void => {
expect((): void => {
FormationsLabels([FormationLabel.SudLabs, 'Nièvre formation' as FormationLabel]);
}).toThrow(new FormationLabelError('Nièvre formation' as FormationLabel));
});
});
32 changes: 32 additions & 0 deletions src/models/formation-label/formation-label.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { Model } from '../model';
import { FormationLabelError } from './errors';

export enum FormationLabel {
FormeAMonEspaceSante = 'Formé à « Mon Espace Santé »',
FormeADuplex = 'Formé à « DUPLEX » (illettrisme)',
ArniaMednum = 'Arnia/MedNum BFC (Bourgogne-Franche-Comté)',
CollectifRessourcesEtActeursReemploi = 'Collectif ressources et acteurs réemploi (Normandie)',
FabriquesDeTerritoire = 'Fabriques de Territoire',
LesEclaireurs = 'Les Éclaireurs du numérique (Drôme)',
MesPapiers = 'Mes Papiers (Métropole de Lyon)',
Ordi3 = 'ORDI 3.0',
SudLabs = 'SUD LABS (PACA)'
}

export type FormationsLabels = Model<'FormationsLabels', FormationLabel[]>;

export type FormationLabelIndefini = 'Label de formation indéfini';

const firstInvalidFormationLabel = (formationLabel: FormationLabel): boolean =>
!Object.values(FormationLabel).includes(formationLabel);

const throwFormationsLabelsError = (formationsLabels: FormationLabel[]): FormationsLabels => {
throw new FormationLabelError(formationsLabels.find(firstInvalidFormationLabel) ?? 'Label de formation indéfini');
};

const isFormationsLabels = (formationsLabels: FormationLabel[]): formationsLabels is FormationsLabels =>
formationsLabels.find(firstInvalidFormationLabel) == null;

/* eslint-disable-next-line @typescript-eslint/naming-convention */
export const FormationsLabels = (formationsLabels: FormationLabel[]): FormationsLabels =>
isFormationsLabels(formationsLabels) ? formationsLabels : throwFormationsLabelsError(formationsLabels);
2 changes: 2 additions & 0 deletions src/models/formation-label/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export * from './errors';
export * from './formation-label';
10 changes: 6 additions & 4 deletions src/models/index.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
export * from './adresse';
export * from './frais-a-charge';
export * from './contact';
export * from './courriel';
export * from './dispositif-programme-national';
export * from './formation-label';
export * from './frais-a-charge';
export * from './id';
export * from './itinerance';
export * from './label-national';
export * from './localisation';
export * from './modalite-acces';
export * from './modalite-accompagnement';
export * from './nom';
export * from './pivot';
export * from './prise-en-charge-specifique';
export * from './publics-specifiquement-adresses';
export * from './ridet';
export * from './rna';
export * from './service';
export * from './siret';
Expand All @@ -18,5 +22,3 @@ export * from './url';
export * from './lieu-mediation-numerique';
export * from './model';
export * from './presentation';
export * from './modalite-acces';
export * from './courriel';
1 change: 0 additions & 1 deletion src/models/label-national/errors/index.ts

This file was deleted.

9 changes: 0 additions & 9 deletions src/models/label-national/errors/labels-nationaux.error.ts

This file was deleted.

2 changes: 0 additions & 2 deletions src/models/label-national/index.ts

This file was deleted.

22 changes: 0 additions & 22 deletions src/models/label-national/label-national.spec.ts

This file was deleted.

34 changes: 0 additions & 34 deletions src/models/label-national/label-national.ts

This file was deleted.

8 changes: 5 additions & 3 deletions src/models/lieu-mediation-numerique.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
/* eslint-disable @typescript-eslint/naming-convention */

import { Adresse } from './adresse';
import { FormationsLabels } from './formation-label';
import { PrisesEnChargeSpecifiques } from './prise-en-charge-specifique';
import { PublicsSpecifiquementAdresses } from './publics-specifiquement-adresses';
import { Typologies } from './typologie';
Expand All @@ -15,7 +16,7 @@ import { ModalitesAccompagnement } from './modalite-accompagnement';
import { ModalitesAcces } from './modalite-acces';
import { Url } from './url';
import { Pivot } from './pivot';
import { LabelsNationaux } from './label-national';
import { DispositifProgrammesNationaux } from './dispositif-programme-national';
import { Id } from './id';
import { Nom } from './nom';

Expand All @@ -38,8 +39,9 @@ export type LieuMediationNumerique = {
modalites_acces?: ModalitesAcces;
frais_a_charge?: FraisACharge;
itinerance?: Itinerances;
labels_nationaux?: LabelsNationaux;
labels_autres?: string[];
dispositif_programmes_nationaux?: DispositifProgrammesNationaux;
formations_labels?: FormationsLabels;
autres_formations_labels?: string[];
modalites_accompagnement?: ModalitesAccompagnement;
accessibilite?: Url;
prise_rdv?: Url;
Expand Down
Loading

0 comments on commit 9b5ff4d

Please sign in to comment.