From 240c787ce0c3c1013740591b64290522713f25b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?BITARD=20Micha=C3=ABl?= <michael.bitard@beta.gouv.fr> Date: Wed, 4 Dec 2024 14:11:04 +0000 Subject: [PATCH] chore(typescript): utilise des options plus strictes (pub/pnm-public/camino!1586) --- packages/api/tsconfig.json | 4 ++ packages/common/src/etape.ts | 2 +- .../common/src/permissions/etape-form.test.ts | 46 +++++++++++++++++++ packages/common/src/permissions/etape-form.ts | 2 +- packages/common/tsconfig.json | 5 +- packages/ui/tsconfig.json | 4 ++ 6 files changed, 60 insertions(+), 3 deletions(-) diff --git a/packages/api/tsconfig.json b/packages/api/tsconfig.json index 2d007a8e0..c6696bd97 100644 --- a/packages/api/tsconfig.json +++ b/packages/api/tsconfig.json @@ -26,6 +26,10 @@ "resolveJsonModule": true, "noUnusedLocals": true, "noUnusedParameters": true, + // TODO 2024-12-04 mettre les deux options suivantes à true génère beaucoup d'erreurs + "noPropertyAccessFromIndexSignature": false, + "noUncheckedIndexedAccess": false, + "noUncheckedSideEffectImports": true, "noEmit": true, "paths": { "graphql-fields": ["./src/@types/graphql-fields"], diff --git a/packages/common/src/etape.ts b/packages/common/src/etape.ts index 4459ed007..245c939f4 100644 --- a/packages/common/src/etape.ts +++ b/packages/common/src/etape.ts @@ -134,7 +134,7 @@ export const getStatutId = (etape: Pick<FlattenEtape, 'date' | 'contenu' | 'type return etape.statutId } - const duree = etape.contenu[sectionDureeIds[etape.typeId]]?.duree?.value ?? 0 + const duree = etape.contenu[sectionDureeIds[etape.typeId]]?.['duree']?.value ?? 0 if (isBefore(currentDate, etape.date)) { return ETAPES_STATUTS.PROGRAMME diff --git a/packages/common/src/permissions/etape-form.test.ts b/packages/common/src/permissions/etape-form.test.ts index 4e107edad..250ffff63 100644 --- a/packages/common/src/permissions/etape-form.test.ts +++ b/packages/common/src/permissions/etape-form.test.ts @@ -552,6 +552,52 @@ const axmDocumentsComplete: Pick<EtapeDocument | TempEtapeDocument, 'etape_docum ] const entreprise1Id = entrepriseIdValidator.parse('id1') +test('etapeDocumentsStepIsComplete avec mecanisation', () => { + expect( + etapeDocumentsStepIsComplete( + { typeId: ETAPES_TYPES.demande, contenu: { arm: { mecanise: { value: true, etapeHeritee: null, heritee: false } } }, isBrouillon: ETAPE_IS_NOT_BROUILLON }, + DEMARCHES_TYPES_IDS.Octroi, + TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX, + demarcheIdValidator.parse('demarcheId'), + [{ etape_document_type_id: 'dec' }], + [], + firstEtapeDateValidator.parse('2022-01-01') + ) + ).toMatchInlineSnapshot(` + { + "errors": [ + "le document "Documents cartographiques" (car) est obligatoire", + "le document "Décision cas par cas" (dep) est obligatoire", + "le document "Dossier "Loi sur l'eau"" (doe) est obligatoire", + "le document "Dossier de demande" (dom) est obligatoire", + "le document "Formulaire de demande" (for) est obligatoire", + ], + "valid": false, + } + `) + + expect( + etapeDocumentsStepIsComplete( + { typeId: ETAPES_TYPES.demande, contenu: { arm: { mecanise: { value: false, etapeHeritee: null, heritee: false } } }, isBrouillon: ETAPE_IS_NOT_BROUILLON }, + DEMARCHES_TYPES_IDS.Octroi, + TITRES_TYPES_IDS.AUTORISATION_DE_RECHERCHE_METAUX, + demarcheIdValidator.parse('demarcheId'), + [{ etape_document_type_id: 'dec' }], + [], + firstEtapeDateValidator.parse('2022-01-01') + ) + ).toMatchInlineSnapshot(` + { + "errors": [ + "le document "Documents cartographiques" (car) est obligatoire", + "le document "Dossier de demande" (dom) est obligatoire", + "le document "Formulaire de demande" (for) est obligatoire", + ], + "valid": false, + } + `) +}) + test('etapeDocumentsStepIsComplete', () => { expect( etapeDocumentsStepIsComplete( diff --git a/packages/common/src/permissions/etape-form.ts b/packages/common/src/permissions/etape-form.ts index 1842ded65..8909255e0 100644 --- a/packages/common/src/permissions/etape-form.ts +++ b/packages/common/src/permissions/etape-form.ts @@ -254,7 +254,7 @@ export const etapeDocumentsStepIsComplete = ( firstEtapeDate: FirstEtapeDate ): ValidReturn => { const errors: string[] = [] - const documentTypes = getDocumentsTypes({ typeId: etape.typeId }, demarcheTypeId, titreTypeId, demarcheId, sdomZoneIds, etape.contenu.arm?.mecanise?.value === true, firstEtapeDate) + const documentTypes = getDocumentsTypes({ typeId: etape.typeId }, demarcheTypeId, titreTypeId, demarcheId, sdomZoneIds, etape.contenu['arm']?.['mecanise']?.value === true, firstEtapeDate) errors.push( ...documentTypes diff --git a/packages/common/tsconfig.json b/packages/common/tsconfig.json index 33ad6d6e5..9a700bc80 100644 --- a/packages/common/tsconfig.json +++ b/packages/common/tsconfig.json @@ -22,7 +22,10 @@ "resolveJsonModule": true, "noUnusedLocals": true, "noUnusedParameters": true, - "noEmit": true + "noEmit": true, + "noPropertyAccessFromIndexSignature": true, + "noUncheckedIndexedAccess": true, + "noUncheckedSideEffectImports": true, }, "exclude": ["vitest.config.ts"] } diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 09ff23dcf..3f4bd78f4 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -14,6 +14,10 @@ "noUnusedLocals": true, "noUnusedParameters": true, "noErrorTruncation": false, + // TODO 2024-12-04 mettre les deux options suivantes à true génère beaucoup d'erreurs + "noPropertyAccessFromIndexSignature": false, + "noUncheckedIndexedAccess": false, + "noUncheckedSideEffectImports": true, "lib": [ "esnext", "dom", -- GitLab