From 94a5be264fc30e4b6a9bda28d5165207f9a98692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Burkard?= Date: Mon, 13 Jan 2025 15:04:57 +0100 Subject: [PATCH 1/5] rename PoleEmploiGateway to FranceTravailGateway --- back/src/config/bootstrap/createGateways.ts | 12 +- .../helpers/createAxiosSharedClients.ts | 4 +- .../helpers/createFetchSharedClients.ts | 4 +- .../HttpPeAgenciesReferential.manual.test.ts | 4 +- .../HttpPeAgenciesReferential.ts | 4 +- .../HttpRome3Gateway.manual.test.ts | 4 +- .../HttpRome3Gateway.ts | 6 +- .../HttpRome4Gateway.manual.test.ts | 4 +- .../HttpRome4Gateway.ts | 6 +- .../FrancetTravailRoutes.ts | 31 +++++ ...> HttpFranceTravailGateway.manual.test.ts} | 31 ++--- ...Gateway.ts => HttpFranceTravailGateway.ts} | 110 +++++++++--------- ...way.ts => InMemoryFranceTravailGateway.ts} | 22 ++-- .../pole-emploi-gateway/PoleEmploiRoutes.ts | 30 ----- ...ploiGateway.ts => FranceTravailGateway.ts} | 34 +++--- .../use-cases/ResyncOldConventionsToPe.ts | 4 +- .../ResyncOldConventionsToPe.unit.test.ts | 16 +-- ...dcastToFranceTravailOnConventionUpdates.ts | 14 +-- ...nceTravailOnConventionUpdates.unit.test.ts | 8 +- .../HttpPeConnectGateway.ts | 6 +- .../ConventionPoleEmploiAdvisorEntity.ts | 2 +- .../HttpLaBonneBoiteGateway.manual.test.ts | 4 +- .../la-bonne-boite/HttpLaBonneBoiteGateway.ts | 4 +- .../triggerResyncOldConventionsToPe.ts | 4 +- back/src/scripts/triggerUpdateLegacyRomeV3.ts | 4 +- back/src/scripts/triggerUpdateRomeData.ts | 4 +- back/src/utils/buildTestApp.ts | 4 +- back/src/utils/logger.ts | 8 +- 28 files changed, 196 insertions(+), 192 deletions(-) create mode 100644 back/src/domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes.ts rename back/src/domains/convention/adapters/pole-emploi-gateway/{HttpPoleEmploiGateway.manual.test.ts => HttpFranceTravailGateway.manual.test.ts} (91%) rename back/src/domains/convention/adapters/pole-emploi-gateway/{HttpPoleEmploiGateway.ts => HttpFranceTravailGateway.ts} (70%) rename back/src/domains/convention/adapters/pole-emploi-gateway/{InMemoryPoleEmploiGateway.ts => InMemoryFranceTravailGateway.ts} (53%) delete mode 100644 back/src/domains/convention/adapters/pole-emploi-gateway/PoleEmploiRoutes.ts rename back/src/domains/convention/ports/{PoleEmploiGateway.ts => FranceTravailGateway.ts} (75%) diff --git a/back/src/config/bootstrap/createGateways.ts b/back/src/config/bootstrap/createGateways.ts index fe5537c59c..ee0f9d73ca 100644 --- a/back/src/config/bootstrap/createGateways.ts +++ b/back/src/config/bootstrap/createGateways.ts @@ -4,9 +4,9 @@ import { exhaustiveCheck, immersionFacileNoReplyEmailSender } from "shared"; import type { UnknownSharedRoute } from "shared-routes"; import { createAxiosSharedClient } from "shared-routes/axios"; import { createFetchSharedClient } from "shared-routes/fetch"; -import { HttpPoleEmploiGateway } from "../../domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway"; -import { InMemoryPoleEmploiGateway } from "../../domains/convention/adapters/pole-emploi-gateway/InMemoryPoleEmploiGateway"; -import { createPoleEmploiRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/PoleEmploiRoutes"; +import { createFranceTravailRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes"; +import { HttpFranceTravailGateway } from "../../domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; +import { InMemoryFranceTravailGateway } from "../../domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway"; import { HttpAddressGateway } from "../../domains/core/address/adapters/HttpAddressGateway"; import { addressesExternalRoutes } from "../../domains/core/address/adapters/HttpAddressGateway.routes"; import { InMemoryAddressGateway } from "../../domains/core/address/adapters/InMemoryAddressGateway"; @@ -170,10 +170,10 @@ export const createGateways = async ( const poleEmploiGateway = config.poleEmploiGateway === "HTTPS" - ? new HttpPoleEmploiGateway( + ? new HttpFranceTravailGateway( createLegacyAxiosHttpClientForExternalAPIs({ partnerName: partnerNames.franceTravailApi, - routes: createPoleEmploiRoutes(config.peApiUrl), + routes: createFranceTravailRoutes(config.peApiUrl), }), new InMemoryCachingGateway( timeGateway, @@ -184,7 +184,7 @@ export const createGateways = async ( noRetries, config.envType === "dev", ) - : new InMemoryPoleEmploiGateway(); + : new InMemoryFranceTravailGateway(); const { withCache, disconnectCache } = await getWithCache(config); diff --git a/back/src/config/helpers/createAxiosSharedClients.ts b/back/src/config/helpers/createAxiosSharedClients.ts index 014a3b567d..2cc613d116 100644 --- a/back/src/config/helpers/createAxiosSharedClients.ts +++ b/back/src/config/helpers/createAxiosSharedClients.ts @@ -1,12 +1,12 @@ import axios from "axios"; import { createAxiosSharedClient } from "shared-routes/axios"; -import { createPoleEmploiRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/PoleEmploiRoutes"; +import { createFranceTravailRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes"; import { AppConfig } from "../bootstrap/appConfig"; export const createPeAxiosSharedClient = ( config: AppConfig, axiosInstance = axios.create({ timeout: config.externalAxiosTimeout }), ) => { - const poleEmploiRoutes = createPoleEmploiRoutes(config.peApiUrl); + const poleEmploiRoutes = createFranceTravailRoutes(config.peApiUrl); return createAxiosSharedClient(poleEmploiRoutes, axiosInstance); }; diff --git a/back/src/config/helpers/createFetchSharedClients.ts b/back/src/config/helpers/createFetchSharedClients.ts index e1347fddfc..4fd51c8b38 100644 --- a/back/src/config/helpers/createFetchSharedClients.ts +++ b/back/src/config/helpers/createFetchSharedClients.ts @@ -1,8 +1,8 @@ import { createFetchSharedClient } from "shared-routes/fetch"; -import { createPoleEmploiRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/PoleEmploiRoutes"; +import { createFranceTravailRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes"; import { AppConfig } from "../bootstrap/appConfig"; export const createPeFetchSharedClient = (config: AppConfig) => { - const poleEmploiRoutes = createPoleEmploiRoutes(config.peApiUrl); + const poleEmploiRoutes = createFranceTravailRoutes(config.peApiUrl); return createFetchSharedClient(poleEmploiRoutes, fetch); }; diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts index c03013a20b..f4f216a809 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts @@ -3,7 +3,7 @@ import { AppConfig, } from "../../../../config/bootstrap/appConfig"; import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; -import { HttpPoleEmploiGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway"; +import { HttpFranceTravailGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; @@ -14,7 +14,7 @@ const axiosHttpClient = createPeAxiosSharedClient(config); const referencielAgencesPE = new HttpPeAgenciesReferential( config.peApiUrl, - new HttpPoleEmploiGateway( + new HttpFranceTravailGateway( axiosHttpClient, new InMemoryCachingGateway( new RealTimeGateway(), diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts index aa2bbff19a..446777f1d0 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts @@ -2,7 +2,7 @@ import type { AxiosInstance } from "axios"; import { AbsoluteUrl } from "shared"; import { createAxiosInstance } from "../../../../utils/axiosUtils"; import { createLogger } from "../../../../utils/logger"; -import { PoleEmploiGateway } from "../../../convention/ports/PoleEmploiGateway"; +import { FranceTravailGateway } from "../../../convention/ports/FranceTravailGateway"; import { PeAgenciesReferential, PeAgencyFromReferenciel, @@ -17,7 +17,7 @@ export class HttpPeAgenciesReferential implements PeAgenciesReferential { constructor( peApiUrl: AbsoluteUrl, - private readonly poleEmploiGateway: PoleEmploiGateway, + private readonly poleEmploiGateway: FranceTravailGateway, private readonly poleEmploiClientId: string, ) { this.#axios = createAxiosInstance(logger); diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts index 5fced98cd7..0c2da19348 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts @@ -6,7 +6,7 @@ import { AppConfig, } from "../../../../config/bootstrap/appConfig"; import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; -import { HttpPoleEmploiGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway"; +import { HttpFranceTravailGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; @@ -20,7 +20,7 @@ describe("HttpRome3Gateway", () => { "expires_in", ); - const franceTravailGateway = new HttpPoleEmploiGateway( + const franceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, config.peApiUrl, diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts index 2ea30749aa..b19a2a3eec 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts @@ -2,7 +2,7 @@ import { AbsoluteUrl, withAuthorizationHeaders } from "shared"; import { HttpClient, defineRoute, defineRoutes } from "shared-routes"; import { z } from "zod"; import { createLogger } from "../../../../utils/logger"; -import { PoleEmploiGateway } from "../../../convention/ports/PoleEmploiGateway"; +import { FranceTravailGateway } from "../../../convention/ports/FranceTravailGateway"; import type { AppellationWithShortLabel } from "./HttpRome4Gateway"; const logger = createLogger(__filename); @@ -35,12 +35,12 @@ export const makeRome3Routes = (peApiUrl: AbsoluteUrl) => export class HttpRome3Gateway implements Rome3Gateway { #httpClient: HttpClient; - #poleEmploiGateway: PoleEmploiGateway; + #poleEmploiGateway: FranceTravailGateway; #poleEmploiClientId: string; constructor( httpClient: HttpClient, - poleEmploiGateway: PoleEmploiGateway, + poleEmploiGateway: FranceTravailGateway, poleEmploiClientId: string, ) { this.#httpClient = httpClient; diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts index 54ceb037c1..8f0c1ad030 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts @@ -6,7 +6,7 @@ import { AppConfig, } from "../../../../config/bootstrap/appConfig"; import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; -import { HttpPoleEmploiGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway"; +import { HttpFranceTravailGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; @@ -20,7 +20,7 @@ describe("HttpRome4Gateway", () => { "expires_in", ); - const franceTravailGateway = new HttpPoleEmploiGateway( + const franceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, config.peApiUrl, diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts index 4627cf24e3..3540d0be1c 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts @@ -6,7 +6,7 @@ import { } from "shared"; import { HttpClient, defineRoute, defineRoutes } from "shared-routes"; import { z } from "zod"; -import { PoleEmploiGateway } from "../../../convention/ports/PoleEmploiGateway"; +import { FranceTravailGateway } from "../../../convention/ports/FranceTravailGateway"; export type AppellationWithShortLabel = AppellationDto & { romeCode: string; @@ -50,12 +50,12 @@ export const makeRome4Routes = (peApiUrl: AbsoluteUrl) => export class HttpRome4Gateway implements Rome4Gateway { #httpClient: HttpClient; - #poleEmploiGateway: PoleEmploiGateway; + #poleEmploiGateway: FranceTravailGateway; #poleEmploiClientId: string; constructor( httpClient: HttpClient, - poleEmploiGateway: PoleEmploiGateway, + poleEmploiGateway: FranceTravailGateway, poleEmploiClientId: string, ) { this.#httpClient = httpClient; diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes.ts b/back/src/domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes.ts new file mode 100644 index 0000000000..1997b18303 --- /dev/null +++ b/back/src/domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes.ts @@ -0,0 +1,31 @@ +import { AbsoluteUrl, withAuthorizationHeaders } from "shared"; +import { defineRoute, defineRoutes } from "shared-routes"; +import { z } from "zod"; +import { FranceTravailConvention } from "../../ports/FranceTravailGateway"; + +export const getFtTestPrefix = (peApiUrl: AbsoluteUrl) => + ["https://api.peio.pe-qvr.fr", "https://api-r.es-qvr.fr"].includes(peApiUrl) + ? "test" + : ""; + +export type FrancetTravailRoutes = ReturnType; + +const franceTravailConventionSchema: z.Schema = + z.any(); +export const createFranceTravailRoutes = (peApiUrl: AbsoluteUrl) => { + const ftTestPrefix = getFtTestPrefix(peApiUrl); + + return defineRoutes({ + broadcastConvention: defineRoute({ + method: "post", + url: `${peApiUrl}/partenaire/${ftTestPrefix}immersion-pro/v2/demandes-immersion`, + requestBodySchema: franceTravailConventionSchema, + ...withAuthorizationHeaders, + responses: { + 200: z.any(), + 201: z.any(), + 204: z.any(), + }, + }), + }); +}; diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway.manual.test.ts b/back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.manual.test.ts similarity index 91% rename from back/src/domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway.manual.test.ts rename to back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.manual.test.ts index a74930fb08..8b5c9d8c39 100644 --- a/back/src/domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway.manual.test.ts +++ b/back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.manual.test.ts @@ -12,12 +12,12 @@ import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/I import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; import { - PoleEmploiBroadcastResponse, - PoleEmploiConvention, + FranceTravailBroadcastResponse, + FranceTravailConvention, isBroadcastResponseOk, -} from "../../ports/PoleEmploiGateway"; -import { HttpPoleEmploiGateway } from "./HttpPoleEmploiGateway"; -import { createPoleEmploiRoutes } from "./PoleEmploiRoutes"; +} from "../../ports/FranceTravailGateway"; +import { createFranceTravailRoutes } from "./FrancetTravailRoutes"; +import { HttpFranceTravailGateway } from "./HttpFranceTravailGateway"; describe("HttpPoleEmploiGateway", () => { it.each([ @@ -57,7 +57,7 @@ describe("HttpPoleEmploiGateway", () => { ] satisfies TestCase[])( "Should have status $expected.status when $testMessage", async ({ fields, expected }) => { - const httpPoleEmploiGateway = new HttpPoleEmploiGateway( + const httpPoleEmploiGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, config.peApiUrl, @@ -110,7 +110,7 @@ describe("HttpPoleEmploiGateway", () => { ] satisfies TestCase[])( "Should have status $expected.status when $testMessage", async ({ fields, expected }) => { - const httpPoleEmploiGateway = new HttpPoleEmploiGateway( + const httpPoleEmploiGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, config.peApiUrl, @@ -132,7 +132,7 @@ describe("HttpPoleEmploiGateway", () => { it("error feedback axios timeout", async () => { const peApiUrl = "https://fake-pe.fr"; const peEnterpriseUrl = "https://fake-pe-enterprise.fr"; - const routes = createPoleEmploiRoutes(peApiUrl); + const routes = createFranceTravailRoutes(peApiUrl); const httpClient = createAxiosSharedClient(routes, axios, { skipResponseValidation: true, @@ -152,7 +152,7 @@ describe("HttpPoleEmploiGateway", () => { clientSecret: "", }; - const poleEmploiGateway = new HttpPoleEmploiGateway( + const poleEmploiGateway = new HttpFranceTravailGateway( httpClient, cachingGateway, peApiUrl, @@ -185,7 +185,7 @@ describe("HttpPoleEmploiGateway", () => { it("error feedback on bad response code", async () => { const peApiUrl = "https://fake-pe.fr"; const peEnterpriseUrl = "https://fake-pe-enterprise.fr"; - const routes = createPoleEmploiRoutes(peApiUrl); + const routes = createFranceTravailRoutes(peApiUrl); const httpClient = createAxiosSharedClient(routes, axios, { skipResponseValidation: true, @@ -205,7 +205,7 @@ describe("HttpPoleEmploiGateway", () => { clientSecret: "", }; - const poleEmploiGateway = new HttpPoleEmploiGateway( + const poleEmploiGateway = new HttpFranceTravailGateway( httpClient, cachingGateway, peApiUrl, @@ -245,7 +245,7 @@ const cachingGateway = new InMemoryCachingGateway( "expires_in", ); -const peConvention: PoleEmploiConvention = { +const peConvention: FranceTravailConvention = { activitesObservees: "Tenir une conversation client", originalId: "31bd445d-54fa-4b53-8875-0ada1673fe3c", adresseImmersion: "5 avenue du Général", @@ -288,8 +288,11 @@ const peConvention: PoleEmploiConvention = { type TestCase = { fields: Partial< - Pick + Pick< + FranceTravailConvention, + "id" | "email" | "dateNaissance" | "peConnectId" + > >; - expected: PoleEmploiBroadcastResponse; + expected: FranceTravailBroadcastResponse; testMessage?: string; }; diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway.ts b/back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.ts similarity index 70% rename from back/src/domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway.ts rename to back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.ts index c9b7e8ffc0..102bf3ddcf 100644 --- a/back/src/domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway.ts +++ b/back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.ts @@ -26,41 +26,41 @@ import { RetryableError, } from "../../../core/retry-strategy/ports/RetryStrategy"; import { - PoleEmploiBroadcastResponse, - PoleEmploiConvention, - PoleEmploiGateway, -} from "../../ports/PoleEmploiGateway"; -import { PoleEmploiRoutes, getPeTestPrefix } from "./PoleEmploiRoutes"; + FranceTravailBroadcastResponse, + FranceTravailConvention, + FranceTravailGateway, +} from "../../ports/FranceTravailGateway"; +import { FrancetTravailRoutes, getFtTestPrefix } from "./FrancetTravailRoutes"; const logger = createLogger(__filename); -const poleEmploiCommonMaxRequestsPerInterval = 1; -const poleEmploiBroadcastMaxRequestPerInterval = 3; +const franceTravailCommonMaxRequestsPerInterval = 1; +const franceTravailBroadcastMaxRequestPerInterval = 3; const rate_ms = 1250; -export class HttpPoleEmploiGateway implements PoleEmploiGateway { +export class HttpFranceTravailGateway implements FranceTravailGateway { // Common limiter with 1 call every 1.2s #commonlimiter = new Bottleneck({ - reservoir: poleEmploiCommonMaxRequestsPerInterval, + reservoir: franceTravailCommonMaxRequestsPerInterval, reservoirRefreshInterval: rate_ms, - reservoirRefreshAmount: poleEmploiCommonMaxRequestsPerInterval, + reservoirRefreshAmount: franceTravailCommonMaxRequestsPerInterval, maxConcurrent: 1, - minTime: Math.ceil(rate_ms / poleEmploiCommonMaxRequestsPerInterval), + minTime: Math.ceil(rate_ms / franceTravailCommonMaxRequestsPerInterval), }); // convention broacast limiter with 3 calls every 1.2s #broadcastlimiter = new Bottleneck({ - reservoir: poleEmploiBroadcastMaxRequestPerInterval, + reservoir: franceTravailBroadcastMaxRequestPerInterval, reservoirRefreshInterval: rate_ms, - reservoirRefreshAmount: poleEmploiBroadcastMaxRequestPerInterval, + reservoirRefreshAmount: franceTravailBroadcastMaxRequestPerInterval, maxConcurrent: 1, - minTime: Math.ceil(rate_ms / poleEmploiBroadcastMaxRequestPerInterval), + minTime: Math.ceil(rate_ms / franceTravailBroadcastMaxRequestPerInterval), }); - #peTestPrefix: "test" | ""; + #ftTestPrefix: "test" | ""; #isDev: boolean; - readonly #httpClient: HttpClient; + readonly #httpClient: HttpClient; readonly #caching: InMemoryCachingGateway; @@ -69,14 +69,14 @@ export class HttpPoleEmploiGateway implements PoleEmploiGateway { readonly #retryStrategy: RetryStrategy; constructor( - httpClient: HttpClient, + httpClient: HttpClient, caching: InMemoryCachingGateway, - peApiUrl: AbsoluteUrl, + ftApiUrl: AbsoluteUrl, accessTokenConfig: AccessTokenConfig, retryStrategy: RetryStrategy, isDev = false, ) { - this.#peTestPrefix = getPeTestPrefix(peApiUrl); + this.#ftTestPrefix = getFtTestPrefix(ftApiUrl); this.#accessTokenConfig = accessTokenConfig; this.#caching = caching; this.#httpClient = httpClient; @@ -120,14 +120,14 @@ export class HttpPoleEmploiGateway implements PoleEmploiGateway { } public async notifyOnConventionUpdated( - poleEmploiConvention: PoleEmploiConvention, - ): Promise { + ftConvention: FranceTravailConvention, + ): Promise { logger.info({ - message: "PeBroadcast", + message: "FtBroadcast", franceTravailGatewayStatus: "total", - peConnect: { - peId: poleEmploiConvention.id, - originalId: poleEmploiConvention.originalId, + ftConnect: { + ftId: ftConvention.id, + originalId: ftConvention.originalId, }, }); @@ -138,15 +138,15 @@ export class HttpPoleEmploiGateway implements PoleEmploiGateway { }; } - return this.#postPoleEmploiConvention(poleEmploiConvention) - .then((response): PoleEmploiBroadcastResponse => { + return this.#postFranceTravailConvention(ftConvention) + .then((response): FranceTravailBroadcastResponse => { logger.info({ - message: "PeBroadcast", + message: "FtBroadcast", franceTravailGatewayStatus: "success", sharedRouteResponse: response, - peConnect: { - peId: poleEmploiConvention.id, - originalId: poleEmploiConvention.originalId, + ftConnect: { + ftId: ftConvention.id, + originalId: ftConvention.originalId, }, }); @@ -162,22 +162,22 @@ export class HttpPoleEmploiGateway implements PoleEmploiGateway { } with body '${JSON.stringify(response.body)}'`, ); }) - .catch((err): PoleEmploiBroadcastResponse => { + .catch((err): FranceTravailBroadcastResponse => { const error = castError(err); if (!axios.isAxiosError(error)) { logger.error({ - message: "PeBroadcast - notAxiosError", + message: "FtBroadcast - notAxiosError", franceTravailGatewayStatus: "error", error, - peConnect: { - peId: poleEmploiConvention.id, - originalId: poleEmploiConvention.originalId, + ftConnect: { + ftId: ftConvention.id, + originalId: ftConvention.originalId, }, }); notifyDiscord( - `HttpPoleEmploiGateway notAxiosError ${ - poleEmploiConvention.originalId + `HttpFranceTravailGateway notAxiosError ${ + ftConvention.originalId }: ${JSON.stringify(error)}`, ); @@ -193,18 +193,18 @@ export class HttpPoleEmploiGateway implements PoleEmploiGateway { if (!error.response) { logger.error({ - message: "PeBroadcast - noResponseInAxiosError", + message: "FtBroadcast - noResponseInAxiosError", franceTravailGatewayStatus: "error", error, - peConnect: { - peId: poleEmploiConvention.id, - originalId: poleEmploiConvention.originalId, + ftConnect: { + ftId: ftConvention.id, + originalId: ftConvention.originalId, }, }); notifyDiscord( - `HttpPoleEmploiGateway noResponseInAxiosError ${ - poleEmploiConvention.originalId + `HttpFranceTravailGateway noResponseInAxiosError ${ + ftConvention.originalId }: ${JSON.stringify(error)}`, ); @@ -226,12 +226,12 @@ export class HttpPoleEmploiGateway implements PoleEmploiGateway { if (error.response.status === 404) { logger.error({ - message: `PeBroadcast - notFoundOrMismatch - ${message}`, + message: `FtBroadcast - notFoundOrMismatch - ${message}`, franceTravailGatewayStatus: "error", axiosResponse, - peConnect: { - peId: poleEmploiConvention.id, - originalId: poleEmploiConvention.originalId, + ftConnect: { + ftId: ftConvention.id, + originalId: ftConvention.originalId, }, }); return { @@ -245,13 +245,13 @@ export class HttpPoleEmploiGateway implements PoleEmploiGateway { } const errorObject: LoggerParamsWithMessage = { - message: "PeBroadcast", + message: "FtBroadcast", franceTravailGatewayStatus: "error", error, axiosResponse, - peConnect: { - peId: poleEmploiConvention.id, - originalId: poleEmploiConvention.originalId, + ftConnect: { + ftId: ftConvention.id, + originalId: ftConvention.originalId, }, }; logger.error(errorObject); @@ -268,14 +268,14 @@ export class HttpPoleEmploiGateway implements PoleEmploiGateway { }); } - async #postPoleEmploiConvention(poleEmploiConvention: PoleEmploiConvention) { + async #postFranceTravailConvention(ftConvention: FranceTravailConvention) { const accessTokenResponse = await this.getAccessToken( - `echangespmsmp api_${this.#peTestPrefix}immersion-prov2`, + `echangespmsmp api_${this.#ftTestPrefix}immersion-prov2`, ); return this.#broadcastlimiter.schedule(() => this.#httpClient.broadcastConvention({ - body: poleEmploiConvention, + body: ftConvention, headers: { authorization: `Bearer ${accessTokenResponse.access_token}`, }, diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/InMemoryPoleEmploiGateway.ts b/back/src/domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway.ts similarity index 53% rename from back/src/domains/convention/adapters/pole-emploi-gateway/InMemoryPoleEmploiGateway.ts rename to back/src/domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway.ts index 9a795dcd42..7ec3c8aa1e 100644 --- a/back/src/domains/convention/adapters/pole-emploi-gateway/InMemoryPoleEmploiGateway.ts +++ b/back/src/domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway.ts @@ -1,17 +1,17 @@ import { AccessTokenResponse } from "../../../../config/bootstrap/appConfig"; import { - PoleEmploiBroadcastResponse, - PoleEmploiConvention, - PoleEmploiGateway, -} from "../../ports/PoleEmploiGateway"; + FranceTravailBroadcastResponse, + FranceTravailConvention, + FranceTravailGateway, +} from "../../ports/FranceTravailGateway"; -export class InMemoryPoleEmploiGateway implements PoleEmploiGateway { - #nextResponse: PoleEmploiBroadcastResponse = { +export class InMemoryFranceTravailGateway implements FranceTravailGateway { + #nextResponse: FranceTravailBroadcastResponse = { status: 200, - body: { succes: true }, + body: { success: true }, }; - constructor(public notifications: PoleEmploiConvention[] = []) {} + constructor(public notifications: FranceTravailConvention[] = []) {} public async getAccessToken(scope: string): Promise { return { @@ -21,8 +21,8 @@ export class InMemoryPoleEmploiGateway implements PoleEmploiGateway { } public async notifyOnConventionUpdated( - convention: PoleEmploiConvention, - ): Promise { + convention: FranceTravailConvention, + ): Promise { if (convention.statut === "DEMANDE_OBSOLETE") { throw new Error("fake axios error"); } @@ -32,7 +32,7 @@ export class InMemoryPoleEmploiGateway implements PoleEmploiGateway { //For testing purpose - public setNextResponse(response: PoleEmploiBroadcastResponse) { + public setNextResponse(response: FranceTravailBroadcastResponse) { this.#nextResponse = response; } } diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/PoleEmploiRoutes.ts b/back/src/domains/convention/adapters/pole-emploi-gateway/PoleEmploiRoutes.ts deleted file mode 100644 index 6907d877c7..0000000000 --- a/back/src/domains/convention/adapters/pole-emploi-gateway/PoleEmploiRoutes.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { AbsoluteUrl, withAuthorizationHeaders } from "shared"; -import { defineRoute, defineRoutes } from "shared-routes"; -import { z } from "zod"; -import { PoleEmploiConvention } from "../../ports/PoleEmploiGateway"; - -export const getPeTestPrefix = (peApiUrl: AbsoluteUrl) => - ["https://api.peio.pe-qvr.fr", "https://api-r.es-qvr.fr"].includes(peApiUrl) - ? "test" - : ""; - -export type PoleEmploiRoutes = ReturnType; - -const poleEmploiConventionSchema: z.Schema = z.any(); -export const createPoleEmploiRoutes = (peApiUrl: AbsoluteUrl) => { - const peTestPrefix = getPeTestPrefix(peApiUrl); - - return defineRoutes({ - broadcastConvention: defineRoute({ - method: "post", - url: `${peApiUrl}/partenaire/${peTestPrefix}immersion-pro/v2/demandes-immersion`, - requestBodySchema: poleEmploiConventionSchema, - ...withAuthorizationHeaders, - responses: { - 200: z.any(), - 201: z.any(), - 204: z.any(), - }, - }), - }); -}; diff --git a/back/src/domains/convention/ports/PoleEmploiGateway.ts b/back/src/domains/convention/ports/FranceTravailGateway.ts similarity index 75% rename from back/src/domains/convention/ports/PoleEmploiGateway.ts rename to back/src/domains/convention/ports/FranceTravailGateway.ts index 297a9787fb..fb0159ef51 100644 --- a/back/src/domains/convention/ports/PoleEmploiGateway.ts +++ b/back/src/domains/convention/ports/FranceTravailGateway.ts @@ -2,11 +2,11 @@ import { AgencyKind, ConventionStatus, DateString } from "shared"; import { AccessTokenResponse } from "../../../config/bootstrap/appConfig"; import { SubscriberErrorFeedback } from "../../core/api-consumer/ports/SubscribersGateway"; -// This is an interface contract with Pole Emploi (conventions broadcast). +// This is an interface contract with France Travail (conventions broadcast). // ! Beware of NOT breaking contract ! ! // Doc is here : https://pad.incubateur.net/6p38o0mNRfmc8WuJ77Xr0w?view -export const conventionStatusToPoleEmploiStatus: Record< +export const conventionStatusToFranceTravailStatus: Record< ConventionStatus, string > = { @@ -29,19 +29,19 @@ export const conventionStatusToPoleEmploiStatus: Record< // CONVENTION_SENT: "CONVENTION_ENVOYÉE", } as const; -type ConventionStatusToPeStatus = typeof conventionStatusToPoleEmploiStatus; -type PeConventionStatus = - ConventionStatusToPeStatus[keyof ConventionStatusToPeStatus]; +type ConventionStatusToFtStatus = typeof conventionStatusToFranceTravailStatus; +type FtConventionStatus = + ConventionStatusToFtStatus[keyof ConventionStatusToFtStatus]; export type AgencyKindForPe = | Exclude | "france-travail"; -export type PoleEmploiConvention = { +export type FranceTravailConvention = { id: string; // id numérique sur 11 caractères originalId: string; // exemple: 31bd445d-54fa-4b53-8875-0ada1673fe3c peConnectId?: string; // nécessaire pour se connecter avec PE-UX - statut: PeConventionStatus; + statut: FtConventionStatus; email: string; telephone?: string; prenom: string; @@ -77,26 +77,26 @@ export type PoleEmploiConvention = { fonctionTuteur: string; }; -type PeBroadcastSuccessResponse = { status: 200 | 201 | 204; body: unknown }; -type PeBroadcastErrorResponse = { +type FtBroadcastSuccessResponse = { status: 200 | 201 | 204; body: unknown }; +type FtBroadcastErrorResponse = { status: Exclude; subscriberErrorFeedback: SubscriberErrorFeedback; body: unknown; }; -export type PoleEmploiBroadcastResponse = - | PeBroadcastSuccessResponse - | PeBroadcastErrorResponse; +export type FranceTravailBroadcastResponse = + | FtBroadcastSuccessResponse + | FtBroadcastErrorResponse; export const isBroadcastResponseOk = ( - response: PoleEmploiBroadcastResponse, -): response is PeBroadcastSuccessResponse => + response: FranceTravailBroadcastResponse, +): response is FtBroadcastSuccessResponse => [200, 201, 204].includes(response.status); -export interface PoleEmploiGateway { +export interface FranceTravailGateway { notifyOnConventionUpdated: ( - poleEmploiConvention: PoleEmploiConvention, - ) => Promise; + franceTravailConvention: FranceTravailConvention, + ) => Promise; getAccessToken: (scope: string) => Promise; } diff --git a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.ts b/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.ts index 48922f922c..01a76ca1eb 100644 --- a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.ts +++ b/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.ts @@ -5,7 +5,7 @@ import { TransactionalUseCase } from "../../core/UseCase"; import { TimeGateway } from "../../core/time-gateway/ports/TimeGateway"; import { UnitOfWork } from "../../core/unit-of-work/ports/UnitOfWork"; import { UnitOfWorkPerformer } from "../../core/unit-of-work/ports/UnitOfWorkPerformer"; -import { PoleEmploiGateway } from "../ports/PoleEmploiGateway"; +import { FranceTravailGateway } from "../ports/FranceTravailGateway"; import { BroadcastToFranceTravailOnConventionUpdates } from "./broadcast/BroadcastToFranceTravailOnConventionUpdates"; type ResyncOldConventionToPeReport = { @@ -34,7 +34,7 @@ export class ResyncOldConventionsToPe extends TransactionalUseCase< constructor( uowPerform: UnitOfWorkPerformer, - poleEmploiGateway: PoleEmploiGateway, + poleEmploiGateway: FranceTravailGateway, timeGateway: TimeGateway, limit: number, ) { diff --git a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts b/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts index 471f4b1e67..d456a76f6b 100644 --- a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts +++ b/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts @@ -14,11 +14,11 @@ import { InMemoryUnitOfWork, createInMemoryUow, } from "../../core/unit-of-work/adapters/createInMemoryUow"; -import { InMemoryPoleEmploiGateway } from "../adapters/pole-emploi-gateway/InMemoryPoleEmploiGateway"; +import { InMemoryFranceTravailGateway } from "../adapters/pole-emploi-gateway/InMemoryFranceTravailGateway"; import { - PoleEmploiConvention, - conventionStatusToPoleEmploiStatus, -} from "../ports/PoleEmploiGateway"; + FranceTravailConvention, + conventionStatusToFranceTravailStatus, +} from "../ports/FranceTravailGateway"; import { ResyncOldConventionsToPe } from "./ResyncOldConventionsToPe"; describe("ResyncOldConventionsToPe use case", () => { @@ -43,13 +43,13 @@ describe("ResyncOldConventionsToPe use case", () => { let uow: InMemoryUnitOfWork; let useCase: ResyncOldConventionsToPe; let timeGateway: CustomTimeGateway; - let peGateway: InMemoryPoleEmploiGateway; + let peGateway: InMemoryFranceTravailGateway; beforeEach(() => { uow = createInMemoryUow(); timeGateway = new CustomTimeGateway(); - peGateway = new InMemoryPoleEmploiGateway(); + peGateway = new InMemoryFranceTravailGateway(); useCase = new ResyncOldConventionsToPe( new InMemoryUowPerformer(uow), peGateway, @@ -389,12 +389,12 @@ describe("ResyncOldConventionsToPe use case", () => { function conventionToConventionNotification( convention: ConventionDto, agency: AgencyDto, -): PoleEmploiConvention { +): FranceTravailConvention { return { id: "no-external-id", originalId: convention.id, peConnectId: convention.signatories.beneficiary.federatedIdentity?.token, - statut: conventionStatusToPoleEmploiStatus[convention.status], + statut: conventionStatusToFranceTravailStatus[convention.status], email: convention.signatories.beneficiary.email, telephone: convention.signatories.beneficiary.phone, prenom: convention.signatories.beneficiary.firstName, diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts index d96770ff41..9c9e7378a2 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts @@ -15,11 +15,11 @@ import { TimeGateway } from "../../../core/time-gateway/ports/TimeGateway"; import { UnitOfWork } from "../../../core/unit-of-work/ports/UnitOfWork"; import { UnitOfWorkPerformer } from "../../../core/unit-of-work/ports/UnitOfWorkPerformer"; import { - PoleEmploiConvention, - PoleEmploiGateway, - conventionStatusToPoleEmploiStatus, + FranceTravailConvention, + FranceTravailGateway, + conventionStatusToFranceTravailStatus, isBroadcastResponseOk, -} from "../../ports/PoleEmploiGateway"; +} from "../../ports/FranceTravailGateway"; const conventionObjectiveToObjectifDeImmersion: Record< ImmersionObjective, @@ -35,7 +35,7 @@ export class BroadcastToFranceTravailOnConventionUpdates extends TransactionalUs constructor( uowPerformer: UnitOfWorkPerformer, - private poleEmploiGateway: PoleEmploiGateway, + private poleEmploiGateway: FranceTravailGateway, private timeGateway: TimeGateway, private options: { resyncMode: boolean }, ) { @@ -70,11 +70,11 @@ export class BroadcastToFranceTravailOnConventionUpdates extends TransactionalUs const externalId = await uow.conventionExternalIdRepository.getByConventionId(convention.id); - const poleEmploiConvention: PoleEmploiConvention = { + const poleEmploiConvention: FranceTravailConvention = { id: externalId ?? "no-external-id", originalId: convention.id, peConnectId: beneficiary.federatedIdentity?.token, - statut: conventionStatusToPoleEmploiStatus[convention.status], + statut: conventionStatusToFranceTravailStatus[convention.status], email: beneficiary.email, telephone: beneficiary.phone, prenom: beneficiary.firstName, diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts index dfd2d38057..a647f91a2c 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts @@ -17,8 +17,8 @@ import { InMemoryUnitOfWork, createInMemoryUow, } from "../../../core/unit-of-work/adapters/createInMemoryUow"; -import { InMemoryPoleEmploiGateway } from "../../adapters/pole-emploi-gateway/InMemoryPoleEmploiGateway"; -import { AgencyKindForPe } from "../../ports/PoleEmploiGateway"; +import { InMemoryFranceTravailGateway } from "../../adapters/pole-emploi-gateway/InMemoryFranceTravailGateway"; +import { AgencyKindForPe } from "../../ports/FranceTravailGateway"; import { BroadcastToFranceTravailOnConventionUpdates } from "./BroadcastToFranceTravailOnConventionUpdates"; describe("Broadcasts events to France Travail", () => { @@ -27,7 +27,7 @@ describe("Broadcasts events to France Travail", () => { .withKind("pole-emploi") .build(); - let poleEmploiGateWay: InMemoryPoleEmploiGateway; + let poleEmploiGateWay: InMemoryFranceTravailGateway; let uow: InMemoryUnitOfWork; let timeGateway: CustomTimeGateway; let broadcastToFranceTravailOnConventionUpdates: BroadcastToFranceTravailOnConventionUpdates; @@ -53,7 +53,7 @@ describe("Broadcasts events to France Travail", () => { beforeEach(() => { uow = createInMemoryUow(); - poleEmploiGateWay = new InMemoryPoleEmploiGateway(); + poleEmploiGateWay = new InMemoryFranceTravailGateway(); timeGateway = new CustomTimeGateway(); broadcastToFranceTravailOnConventionUpdates = new BroadcastToFranceTravailOnConventionUpdates( diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts index df157f02e9..68b80ede68 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts +++ b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts @@ -185,7 +185,7 @@ export class HttpPeConnectGateway implements PeConnectGateway { ): Promise { const log = getUserStatutInfoLogger; try { - log.total({ peConnect: { peExternalId } }); + log.total({ ftConnect: { peExternalId } }); const response = await this.#limiter.schedule(() => this.httpClient.getUserStatutInfo({ headers, @@ -194,7 +194,7 @@ export class HttpPeConnectGateway implements PeConnectGateway { if (response.status !== 200) { log.error({ sharedRouteResponse: response, - peConnect: { peExternalId }, + ftConnect: { peExternalId }, message: "getUserStatutInfo -Response status is not 200.", }); return false; @@ -207,7 +207,7 @@ export class HttpPeConnectGateway implements PeConnectGateway { const isJobSeeker = isJobSeekerFromStatus( externalPeConnectStatut.codeStatutIndividu, ); - log.success({ peConnect: { peExternalId, isJobSeeker } }); + log.success({ ftConnect: { peExternalId, isJobSeeker } }); return isJobSeeker; } catch (error) { errorChecker( diff --git a/back/src/domains/core/authentication/pe-connect/entities/ConventionPoleEmploiAdvisorEntity.ts b/back/src/domains/core/authentication/pe-connect/entities/ConventionPoleEmploiAdvisorEntity.ts index 973bc401e0..77ff069df8 100644 --- a/back/src/domains/core/authentication/pe-connect/entities/ConventionPoleEmploiAdvisorEntity.ts +++ b/back/src/domains/core/authentication/pe-connect/entities/ConventionPoleEmploiAdvisorEntity.ts @@ -41,7 +41,7 @@ export const chooseValidAdvisor = ( const preferredAdvisor = sortedValidAdvisors.at(0); if (!preferredAdvisor) { logger.error({ - peConnect: { + ftConnect: { peExternalId, }, message: "getAdvisorsInfo - peConnectNoValidAdvisor", diff --git a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts index a36d32776e..e3cf8d37d9 100644 --- a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts +++ b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts @@ -5,7 +5,7 @@ import { AppConfig, } from "../../../../config/bootstrap/appConfig"; import { createPeFetchSharedClient } from "../../../../config/helpers/createFetchSharedClients"; -import { HttpPoleEmploiGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway"; +import { HttpFranceTravailGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; @@ -54,7 +54,7 @@ describe("HttpLaBonneBoiteGateway", () => { const peFetchSharedClient = createPeFetchSharedClient(config); laBonneBoiteGateway = new HttpLaBonneBoiteGateway( createFetchSharedClient(createLbbRoutes(config.peApiUrl), fetch), - new HttpPoleEmploiGateway( + new HttpFranceTravailGateway( peFetchSharedClient, new InMemoryCachingGateway( new RealTimeGateway(), diff --git a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts index 3f9e12196e..6d4ab4487e 100644 --- a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts +++ b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts @@ -2,7 +2,7 @@ import Bottleneck from "bottleneck"; import { RomeDto, SearchResultDto, SiretDto, castError } from "shared"; import { HttpClient } from "shared-routes"; import { createLogger } from "../../../../utils/logger"; -import { PoleEmploiGateway } from "../../../convention/ports/PoleEmploiGateway"; +import { FranceTravailGateway } from "../../../convention/ports/FranceTravailGateway"; import { LaBonneBoiteGateway, LaBonneBoiteRequestParams, @@ -31,7 +31,7 @@ export class HttpLaBonneBoiteGateway implements LaBonneBoiteGateway { constructor( private readonly httpClient: HttpClient, - private readonly poleEmploiGateway: PoleEmploiGateway, + private readonly poleEmploiGateway: FranceTravailGateway, private readonly poleEmploiClientId: string, ) {} diff --git a/back/src/scripts/triggerResyncOldConventionsToPe.ts b/back/src/scripts/triggerResyncOldConventionsToPe.ts index 8ae3e78acf..c8d8054e31 100644 --- a/back/src/scripts/triggerResyncOldConventionsToPe.ts +++ b/back/src/scripts/triggerResyncOldConventionsToPe.ts @@ -1,7 +1,7 @@ import { AccessTokenResponse, AppConfig } from "../config/bootstrap/appConfig"; import { createGetPgPoolFn } from "../config/bootstrap/createGateways"; import { createPeAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; -import { HttpPoleEmploiGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway"; +import { HttpFranceTravailGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; import { ResyncOldConventionsToPe } from "../domains/convention/use-cases/ResyncOldConventionsToPe"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; @@ -18,7 +18,7 @@ const executeUsecase = async () => { const timeGateway = new RealTimeGateway(); const peAxiosHttpClient = createPeAxiosSharedClient(config); - const httpPoleEmploiGateway = new HttpPoleEmploiGateway( + const httpPoleEmploiGateway = new HttpFranceTravailGateway( peAxiosHttpClient, new InMemoryCachingGateway(timeGateway, "expires_in"), config.peApiUrl, diff --git a/back/src/scripts/triggerUpdateLegacyRomeV3.ts b/back/src/scripts/triggerUpdateLegacyRomeV3.ts index 61529b67c1..4ed1f064b0 100644 --- a/back/src/scripts/triggerUpdateLegacyRomeV3.ts +++ b/back/src/scripts/triggerUpdateLegacyRomeV3.ts @@ -15,7 +15,7 @@ import { HttpRome3Gateway, makeRome3Routes, } from "../domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway"; -import { HttpPoleEmploiGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway"; +import { HttpFranceTravailGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../domains/core/time-gateway/adapters/RealTimeGateway"; @@ -37,7 +37,7 @@ const main = async () => { "expires_in", ); - const franceTravailGateway = new HttpPoleEmploiGateway( + const franceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, config.peApiUrl, diff --git a/back/src/scripts/triggerUpdateRomeData.ts b/back/src/scripts/triggerUpdateRomeData.ts index 5cc73410b8..b44abe416b 100644 --- a/back/src/scripts/triggerUpdateRomeData.ts +++ b/back/src/scripts/triggerUpdateRomeData.ts @@ -12,7 +12,7 @@ import { HttpRome4Gateway, makeRome4Routes, } from "../domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway"; -import { HttpPoleEmploiGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpPoleEmploiGateway"; +import { HttpFranceTravailGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../domains/core/time-gateway/adapters/RealTimeGateway"; @@ -37,7 +37,7 @@ const main = async () => { "expires_in", ); - const franceTravailGateway = new HttpPoleEmploiGateway( + const franceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, config.peApiUrl, diff --git a/back/src/utils/buildTestApp.ts b/back/src/utils/buildTestApp.ts index 602e6dfa33..f2b98ba7dc 100644 --- a/back/src/utils/buildTestApp.ts +++ b/back/src/utils/buildTestApp.ts @@ -3,7 +3,7 @@ import supertest from "supertest"; import { AppConfig } from "../config/bootstrap/appConfig"; import { Gateways } from "../config/bootstrap/createGateways"; import { createApp } from "../config/bootstrap/server"; -import { InMemoryPoleEmploiGateway } from "../domains/convention/adapters/pole-emploi-gateway/InMemoryPoleEmploiGateway"; +import { InMemoryFranceTravailGateway } from "../domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway"; import { InMemoryAddressGateway } from "../domains/core/address/adapters/InMemoryAddressGateway"; import { InMemorySubscribersGateway } from "../domains/core/api-consumer/adapters/InMemorySubscribersGateway"; import { InMemoryOAuthGateway } from "../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/InMemoryOAuthGateway"; @@ -40,7 +40,7 @@ export type InMemoryGateways = { pdfGeneratorGateway: InMemoryPdfGeneratorGateway; laBonneBoiteGateway: InMemoryLaBonneBoiteGateway; passEmploiGateway: InMemoryPassEmploiGateway; - poleEmploiGateway: InMemoryPoleEmploiGateway; + poleEmploiGateway: InMemoryFranceTravailGateway; oAuthGateway: InMemoryOAuthGateway; documentGateway: NotImplementedDocumentGateway; dashboardGateway: StubDashboardGateway; diff --git a/back/src/utils/logger.ts b/back/src/utils/logger.ts index de4e967c9a..a5d336f8e2 100644 --- a/back/src/utils/logger.ts +++ b/back/src/utils/logger.ts @@ -113,8 +113,8 @@ type LoggerParams = Partial<{ events: DomainEvent[]; nodeProcessReport: NodeProcessReport; notificationId: string; - peConnect: Partial<{ - peId: ConventionId; + ftConnect: Partial<{ + ftId: ConventionId; originalId: ConventionId; peExternalId: PeExternalId; isJobSeeker: boolean; @@ -187,7 +187,7 @@ export const createLogger = (filename: string): OpacifiedLogger => { message, nodeProcessReport, notificationId, - peConnect, + ftConnect, reportContent, request, requestId, @@ -223,7 +223,7 @@ export const createLogger = (filename: string): OpacifiedLogger => { events: sanitizeEvents(events), nodeProcessReport, notificationId, - peConnect, + ftConnect: ftConnect, reportContent, request, requestId, From fc7531129779d55d62407099b552db8de67e2d9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Burkard?= Date: Mon, 13 Jan 2025 15:15:45 +0100 Subject: [PATCH 2/5] rename PoleEmploiConnect to FranceTravailConnect --- back/src/config/bootstrap/createGateways.ts | 10 +- .../helpers/createAxiosSharedClients.ts | 2 +- .../helpers/createFetchSharedClients.ts | 2 +- .../HttpPeAgenciesReferential.manual.test.ts | 2 +- .../HttpRome3Gateway.manual.test.ts | 2 +- .../HttpRome4Gateway.manual.test.ts | 2 +- ...PgConventionRepository.integration.test.ts | 4 +- .../FrancetTravailRoutes.ts | 0 .../HttpFranceTravailGateway.manual.test.ts | 0 .../HttpFranceTravailGateway.ts | 0 .../InMemoryFranceTravailGateway.ts | 0 .../ResyncOldConventionsToPe.unit.test.ts | 2 +- ...nceTravailOnConventionUpdates.unit.test.ts | 2 +- ...ifyAllActorsOfFinalConventionValidation.ts | 4 +- ...rsOfFinalConventionValidation.unit.test.ts | 10 +- .../NotifyNewConventionNeedsReview.ts | 4 +- ...otifyNewConventionNeedsReview.unit.test.ts | 14 +-- ...fyToAgencyConventionSubmitted.unit.test.ts | 8 +- ...onventionFranceTravailAdvisorRepository.ts | 100 +++++++++++++++++ ...ryConventionPoleEmploiAdvisorRepository.ts | 101 ------------------ ...vailAdvisorRepository.integration.test.ts} | 40 +++---- ...nventionFranceTravailAdvisorRepository.ts} | 52 ++++----- .../HttpPeConnectGateway.ts | 12 +-- .../InMemoryPeConnectGateway.ts | 24 ++--- .../pe-connect-gateway/peConnectApi.dto.ts | 4 +- .../pe-connect-gateway/peConnectApi.routes.ts | 8 +- .../pe-connect-gateway/peConnectApi.schema.ts | 10 +- .../pe-connect/dto/FtConnect.dto.ts | 49 +++++++++ .../pe-connect/dto/FtConnectAdvisor.dto.ts | 33 ++++++ .../pe-connect/dto/FtConnectUserDto.ts | 9 ++ .../pe-connect/dto/PeConnect.dto.ts | 49 --------- .../pe-connect/dto/PeConnectAdvisor.dto.ts | 33 ------ .../pe-connect/dto/PeConnectUser.dto.ts | 9 -- .../ConventionFranceTravailAdvisorEntity.ts | 53 +++++++++ .../ConventionPoleEmploiAdvisorEntity.ts | 53 --------- ...onventionFranceTravailAdvisorRepository.ts | 23 ++++ .../ConventionPoleEmploiAdvisorRepository.ts | 23 ---- ...eConnect.schema.ts => FtConnect.schema.ts} | 8 +- ...eConnectGateway.ts => FtConnectGateway.ts} | 10 +- ...ConventionToFederatedIdentity.unit.test.ts | 18 ++-- ...oleEmploiAdvisorAndRedirectToConvention.ts | 20 ++-- ...dvisorAndRedirectToConvention.unit.test.ts | 28 ++--- ...dvisorOnConventionFullySigned.unit.test.ts | 12 +-- .../adapters/createInMemoryUow.ts | 4 +- .../core/unit-of-work/adapters/createPgUow.ts | 4 +- .../core/unit-of-work/ports/UnitOfWork.ts | 4 +- .../HttpLaBonneBoiteGateway.manual.test.ts | 2 +- .../triggerResyncOldConventionsToPe.ts | 2 +- back/src/scripts/triggerUpdateLegacyRomeV3.ts | 2 +- back/src/scripts/triggerUpdateRomeData.ts | 2 +- back/src/utils/buildTestApp.ts | 2 +- back/src/utils/logger.ts | 4 +- shared/src/errors/errors.ts | 4 +- .../federatedIdentity.dto.ts | 10 +- 54 files changed, 441 insertions(+), 448 deletions(-) rename back/src/domains/convention/adapters/{pole-emploi-gateway => france-travail-gateway}/FrancetTravailRoutes.ts (100%) rename back/src/domains/convention/adapters/{pole-emploi-gateway => france-travail-gateway}/HttpFranceTravailGateway.manual.test.ts (100%) rename back/src/domains/convention/adapters/{pole-emploi-gateway => france-travail-gateway}/HttpFranceTravailGateway.ts (100%) rename back/src/domains/convention/adapters/{pole-emploi-gateway => france-travail-gateway}/InMemoryFranceTravailGateway.ts (100%) create mode 100644 back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts delete mode 100644 back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionPoleEmploiAdvisorRepository.ts rename back/src/domains/core/authentication/pe-connect/adapters/{PgConventionPoleEmploiAdvisorRepository.integration.test.ts => PgConventionFranceTravailAdvisorRepository.integration.test.ts} (87%) rename back/src/domains/core/authentication/pe-connect/adapters/{PgConventionPoleEmploiAdvisorRepository.ts => PgConventionFranceTravailAdvisorRepository.ts} (71%) create mode 100644 back/src/domains/core/authentication/pe-connect/dto/FtConnect.dto.ts create mode 100644 back/src/domains/core/authentication/pe-connect/dto/FtConnectAdvisor.dto.ts create mode 100644 back/src/domains/core/authentication/pe-connect/dto/FtConnectUserDto.ts delete mode 100644 back/src/domains/core/authentication/pe-connect/dto/PeConnect.dto.ts delete mode 100644 back/src/domains/core/authentication/pe-connect/dto/PeConnectAdvisor.dto.ts delete mode 100644 back/src/domains/core/authentication/pe-connect/dto/PeConnectUser.dto.ts create mode 100644 back/src/domains/core/authentication/pe-connect/entities/ConventionFranceTravailAdvisorEntity.ts delete mode 100644 back/src/domains/core/authentication/pe-connect/entities/ConventionPoleEmploiAdvisorEntity.ts create mode 100644 back/src/domains/core/authentication/pe-connect/port/ConventionFranceTravailAdvisorRepository.ts delete mode 100644 back/src/domains/core/authentication/pe-connect/port/ConventionPoleEmploiAdvisorRepository.ts rename back/src/domains/core/authentication/pe-connect/port/{PeConnect.schema.ts => FtConnect.schema.ts} (62%) rename back/src/domains/core/authentication/pe-connect/port/{PeConnectGateway.ts => FtConnectGateway.ts} (51%) diff --git a/back/src/config/bootstrap/createGateways.ts b/back/src/config/bootstrap/createGateways.ts index ee0f9d73ca..cf947b4f4d 100644 --- a/back/src/config/bootstrap/createGateways.ts +++ b/back/src/config/bootstrap/createGateways.ts @@ -4,9 +4,9 @@ import { exhaustiveCheck, immersionFacileNoReplyEmailSender } from "shared"; import type { UnknownSharedRoute } from "shared-routes"; import { createAxiosSharedClient } from "shared-routes/axios"; import { createFetchSharedClient } from "shared-routes/fetch"; -import { createFranceTravailRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes"; -import { HttpFranceTravailGateway } from "../../domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; -import { InMemoryFranceTravailGateway } from "../../domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway"; +import { createFranceTravailRoutes } from "../../domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes"; +import { HttpFranceTravailGateway } from "../../domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; +import { InMemoryFranceTravailGateway } from "../../domains/convention/adapters/france-travail-gateway/InMemoryFranceTravailGateway"; import { HttpAddressGateway } from "../../domains/core/address/adapters/HttpAddressGateway"; import { addressesExternalRoutes } from "../../domains/core/address/adapters/HttpAddressGateway.routes"; import { InMemoryAddressGateway } from "../../domains/core/address/adapters/InMemoryAddressGateway"; @@ -20,7 +20,7 @@ import { OAuthGateway } from "../../domains/core/authentication/inclusion-connec import { HttpPeConnectGateway } from "../../domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway"; import { InMemoryPeConnectGateway } from "../../domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway"; import { makePeConnectExternalRoutes } from "../../domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes"; -import { PeConnectGateway } from "../../domains/core/authentication/pe-connect/port/PeConnectGateway"; +import { FtConnectGateway } from "../../domains/core/authentication/pe-connect/port/FtConnectGateway"; import { InMemoryCachingGateway } from "../../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { MetabaseDashboardGateway } from "../../domains/core/dashboard/adapters/MetabaseDashboardGateway"; import { StubDashboardGateway } from "../../domains/core/dashboard/adapters/StubDashboardGateway"; @@ -188,7 +188,7 @@ export const createGateways = async ( const { withCache, disconnectCache } = await getWithCache(config); - const peConnectGateway: PeConnectGateway = + const peConnectGateway: FtConnectGateway = config.peConnectGateway === "HTTPS" ? new HttpPeConnectGateway( createLegacyAxiosHttpClientForExternalAPIs({ diff --git a/back/src/config/helpers/createAxiosSharedClients.ts b/back/src/config/helpers/createAxiosSharedClients.ts index 2cc613d116..56c5b5b538 100644 --- a/back/src/config/helpers/createAxiosSharedClients.ts +++ b/back/src/config/helpers/createAxiosSharedClients.ts @@ -1,6 +1,6 @@ import axios from "axios"; import { createAxiosSharedClient } from "shared-routes/axios"; -import { createFranceTravailRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes"; +import { createFranceTravailRoutes } from "../../domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes"; import { AppConfig } from "../bootstrap/appConfig"; export const createPeAxiosSharedClient = ( diff --git a/back/src/config/helpers/createFetchSharedClients.ts b/back/src/config/helpers/createFetchSharedClients.ts index 4fd51c8b38..93589e1fd7 100644 --- a/back/src/config/helpers/createFetchSharedClients.ts +++ b/back/src/config/helpers/createFetchSharedClients.ts @@ -1,5 +1,5 @@ import { createFetchSharedClient } from "shared-routes/fetch"; -import { createFranceTravailRoutes } from "../../domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes"; +import { createFranceTravailRoutes } from "../../domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes"; import { AppConfig } from "../bootstrap/appConfig"; export const createPeFetchSharedClient = (config: AppConfig) => { diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts index f4f216a809..05225d3bd0 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts @@ -3,7 +3,7 @@ import { AppConfig, } from "../../../../config/bootstrap/appConfig"; import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; -import { HttpFranceTravailGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; +import { HttpFranceTravailGateway } from "../../../convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts index 0c2da19348..76670fa001 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts @@ -6,7 +6,7 @@ import { AppConfig, } from "../../../../config/bootstrap/appConfig"; import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; -import { HttpFranceTravailGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; +import { HttpFranceTravailGateway } from "../../../convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts index 8f0c1ad030..df38ff33e6 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts @@ -6,7 +6,7 @@ import { AppConfig, } from "../../../../config/bootstrap/appConfig"; import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; -import { HttpFranceTravailGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; +import { HttpFranceTravailGateway } from "../../../convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; diff --git a/back/src/domains/convention/adapters/PgConventionRepository.integration.test.ts b/back/src/domains/convention/adapters/PgConventionRepository.integration.test.ts index 6118b7de2e..e249a17b47 100644 --- a/back/src/domains/convention/adapters/PgConventionRepository.integration.test.ts +++ b/back/src/domains/convention/adapters/PgConventionRepository.integration.test.ts @@ -10,7 +10,7 @@ import { ConventionId, EstablishmentRepresentative, EstablishmentTutor, - PeConnectToken, + FtConnectToken, WithAcquisition, errors, expectPromiseToFailWithError, @@ -428,7 +428,7 @@ describe("PgConventionRepository", () => { }); it("Retrieves federated identity if exists", async () => { - const peConnectId: PeConnectToken = "bbbbac99-9c0b-bbbb-bb6d-6bb9bd38bbbb"; + const peConnectId: FtConnectToken = "bbbbac99-9c0b-bbbb-bb6d-6bb9bd38bbbb"; const convention = conventionStylisteBuilder .withFederatedIdentity({ provider: "peConnect", diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes.ts b/back/src/domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes.ts similarity index 100% rename from back/src/domains/convention/adapters/pole-emploi-gateway/FrancetTravailRoutes.ts rename to back/src/domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes.ts diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.manual.test.ts b/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts similarity index 100% rename from back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.manual.test.ts rename to back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.ts b/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.ts similarity index 100% rename from back/src/domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway.ts rename to back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.ts diff --git a/back/src/domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway.ts b/back/src/domains/convention/adapters/france-travail-gateway/InMemoryFranceTravailGateway.ts similarity index 100% rename from back/src/domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway.ts rename to back/src/domains/convention/adapters/france-travail-gateway/InMemoryFranceTravailGateway.ts diff --git a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts b/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts index d456a76f6b..500a765a9f 100644 --- a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts +++ b/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts @@ -14,7 +14,7 @@ import { InMemoryUnitOfWork, createInMemoryUow, } from "../../core/unit-of-work/adapters/createInMemoryUow"; -import { InMemoryFranceTravailGateway } from "../adapters/pole-emploi-gateway/InMemoryFranceTravailGateway"; +import { InMemoryFranceTravailGateway } from "../adapters/france-travail-gateway/InMemoryFranceTravailGateway"; import { FranceTravailConvention, conventionStatusToFranceTravailStatus, diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts index a647f91a2c..5875005416 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts @@ -17,7 +17,7 @@ import { InMemoryUnitOfWork, createInMemoryUow, } from "../../../core/unit-of-work/adapters/createInMemoryUow"; -import { InMemoryFranceTravailGateway } from "../../adapters/pole-emploi-gateway/InMemoryFranceTravailGateway"; +import { InMemoryFranceTravailGateway } from "../../adapters/france-travail-gateway/InMemoryFranceTravailGateway"; import { AgencyKindForPe } from "../../ports/FranceTravailGateway"; import { BroadcastToFranceTravailOnConventionUpdates } from "./BroadcastToFranceTravailOnConventionUpdates"; diff --git a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts index 1bf51218c1..cb4d6c0233 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts @@ -19,7 +19,7 @@ import { AppConfig } from "../../../../config/bootstrap/appConfig"; import { GenerateConventionMagicLinkUrl } from "../../../../config/bootstrap/magicLinkUrl"; import { agencyWithRightToAgencyDto } from "../../../../utils/agency"; import { TransactionalUseCase } from "../../../core/UseCase"; -import { ConventionPoleEmploiUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/PeConnect.dto"; +import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/FtConnect.dto"; import { SaveNotificationAndRelatedEvent } from "../../../core/notifications/helpers/Notification"; import { prepareMagicShortLinkMaker } from "../../../core/short-link/ShortLink"; import { ShortLinkIdGeneratorGateway } from "../../../core/short-link/ports/ShortLinkIdGeneratorGateway"; @@ -187,7 +187,7 @@ export class NotifyAllActorsOfFinalConventionValidation extends TransactionalUse } const getPeAdvisorEmailAndRoleIfExist = ( - conventionPeUserAdvisor: ConventionPoleEmploiUserAdvisorEntity | undefined, + conventionPeUserAdvisor: ConventionFtUserAdvisorEntity | undefined, ): [{ role: Role; email: Email }] | [] => conventionPeUserAdvisor?.advisor?.email ? [{ role: "validator", email: conventionPeUserAdvisor.advisor.email }] diff --git a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts index c0546865b9..a0b8ac9adb 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts @@ -15,7 +15,7 @@ import { AppConfig } from "../../../../config/bootstrap/appConfig"; import { AppConfigBuilder } from "../../../../utils/AppConfigBuilder"; import { toAgencyWithRights } from "../../../../utils/agency"; import { fakeGenerateMagicLinkUrlFn } from "../../../../utils/jwtTestHelper"; -import { ConventionPoleEmploiUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/PeConnect.dto"; +import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/FtConnect.dto"; import { expectEmailFinalValidationConfirmationMatchingConvention } from "../../../core/notifications/adapters/InMemoryNotificationRepository"; import { WithNotificationIdAndKind, @@ -469,8 +469,8 @@ describe("NotifyAllActorsOfFinalApplicationValidation", () => { }, ]; const userPeExternalId = "i-am-an-external-id"; - const userConventionAdvisor: ConventionPoleEmploiUserAdvisorEntity = { - _entityName: "ConventionPoleEmploiAdvisor", + const userConventionAdvisor: ConventionFtUserAdvisorEntity = { + _entityName: "ConventionFranceTravailAdvisor", advisor: { email: peAdvisorEmail, firstName: "Elsa", @@ -560,8 +560,8 @@ describe("NotifyAllActorsOfFinalApplicationValidation", () => { }, ]; const userPeExternalId = "i-am-an-external-id"; - const userConventionAdvisor: ConventionPoleEmploiUserAdvisorEntity = { - _entityName: "ConventionPoleEmploiAdvisor", + const userConventionAdvisor: ConventionFtUserAdvisorEntity = { + _entityName: "ConventionFranceTravailAdvisor", advisor: undefined, peExternalId: userPeExternalId, conventionId: validConvention.id, diff --git a/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.ts b/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.ts index 429b13f858..6e611d9b78 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.ts @@ -13,7 +13,7 @@ import { GenerateConventionMagicLinkUrl } from "../../../../config/bootstrap/mag import { agencyWithRightToAgencyDto } from "../../../../utils/agency"; import { createLogger } from "../../../../utils/logger"; import { TransactionalUseCase } from "../../../core/UseCase"; -import { PeConnectImmersionAdvisorDto } from "../../../core/authentication/pe-connect/dto/PeConnectAdvisor.dto"; +import { FtConnectImmersionAdvisorDto } from "../../../core/authentication/pe-connect/dto/FtConnectAdvisor.dto"; import { SaveNotificationAndRelatedEvent } from "../../../core/notifications/helpers/Notification"; import { prepareMagicShortLinkMaker } from "../../../core/short-link/ShortLink"; import { ShortLinkIdGeneratorGateway } from "../../../core/short-link/ports/ShortLinkIdGeneratorGateway"; @@ -162,7 +162,7 @@ export type Recipient = { const determineRecipients = ( status: ConventionStatus, agency: AgencyDto, - peAdvisor: PeConnectImmersionAdvisorDto | undefined, + peAdvisor: FtConnectImmersionAdvisorDto | undefined, ): Recipient[] => { const hasCounsellorEmails = agency.counsellorEmails.length > 0; const hasValidatorEmails = agency.validatorEmails.length > 0; diff --git a/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.unit.test.ts b/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.unit.test.ts index 572433bbda..4c47dcd341 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.unit.test.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.unit.test.ts @@ -16,7 +16,7 @@ import { ExpectSavedNotificationsAndEvents, makeExpectSavedNotificationsAndEvents, } from "../../../../utils/makeExpectSavedNotificationAndEvent.helpers"; -import { ConventionPoleEmploiUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/PeConnect.dto"; +import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/FtConnect.dto"; import { makeSaveNotificationAndRelatedEvent } from "../../../core/notifications/helpers/Notification"; import { makeShortLinkUrl } from "../../../core/short-link/ShortLink"; import { DeterministShortLinkIdGeneratorGateway } from "../../../core/short-link/adapters/short-link-generator-gateway/DeterministShortLinkIdGeneratorGateway"; @@ -284,8 +284,8 @@ describe("NotifyConventionNeedsReview", () => { ]; shortLinkIdGeneratorGateway.addMoreShortLinkIds(shortLinkIds); - const userConventionAdvisor: ConventionPoleEmploiUserAdvisorEntity = { - _entityName: "ConventionPoleEmploiAdvisor", + const userConventionAdvisor: ConventionFtUserAdvisorEntity = { + _entityName: "ConventionFranceTravailAdvisor", advisor: { email: peAdvisorEmail, firstName: "Elsa", @@ -351,8 +351,8 @@ describe("NotifyConventionNeedsReview", () => { .withFederatedIdentity(peIdentity) .build(); - const userConventionAdvisor: ConventionPoleEmploiUserAdvisorEntity = { - _entityName: "ConventionPoleEmploiAdvisor", + const userConventionAdvisor: ConventionFtUserAdvisorEntity = { + _entityName: "ConventionFranceTravailAdvisor", advisor: { email: peAdvisorEmail, firstName: "Elsa", @@ -620,8 +620,8 @@ describe("NotifyConventionNeedsReview", () => { .withFederatedIdentity(peIdentity) .build(); - const userConventionAdvisor: ConventionPoleEmploiUserAdvisorEntity = { - _entityName: "ConventionPoleEmploiAdvisor", + const userConventionAdvisor: ConventionFtUserAdvisorEntity = { + _entityName: "ConventionFranceTravailAdvisor", advisor: { email: peAdvisorEmail, firstName: "Elsa", diff --git a/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts b/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts index ecbd6979c2..31d2b1d151 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts @@ -16,7 +16,7 @@ import { ExpectSavedNotificationsAndEvents, makeExpectSavedNotificationsAndEvents, } from "../../../../utils/makeExpectSavedNotificationAndEvent.helpers"; -import { ConventionPoleEmploiUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/PeConnect.dto"; +import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/FtConnect.dto"; import { makeSaveNotificationAndRelatedEvent } from "../../../core/notifications/helpers/Notification"; import { makeShortLinkUrl } from "../../../core/short-link/ShortLink"; import { DeterministShortLinkIdGeneratorGateway } from "../../../core/short-link/adapters/short-link-generator-gateway/DeterministShortLinkIdGeneratorGateway"; @@ -313,7 +313,7 @@ describe("NotifyToAgencyConventionSubmitted", () => { { conventionId: validConvention.id, peExternalId: peIdentity.token, - _entityName: "ConventionPoleEmploiAdvisor", + _entityName: "ConventionFranceTravailAdvisor", advisor: undefined, }, ], @@ -409,8 +409,8 @@ describe("NotifyToAgencyConventionSubmitted", () => { .withFederatedIdentity(peIdentity) .build(); - const userConventionAdvisor: ConventionPoleEmploiUserAdvisorEntity = { - _entityName: "ConventionPoleEmploiAdvisor", + const userConventionAdvisor: ConventionFtUserAdvisorEntity = { + _entityName: "ConventionFranceTravailAdvisor", advisor: { email: peAdvisorEmail, firstName: "Elsa", diff --git a/back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts b/back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts new file mode 100644 index 0000000000..7391fa6a79 --- /dev/null +++ b/back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts @@ -0,0 +1,100 @@ +import { ConventionId, FtExternalId, errors } from "shared"; +import { + ConventionFtUserAdvisorEntity, + FtUserAndAdvisor, +} from "../dto/FtConnect.dto"; +import { + ConventionAndFtExternalIds, + ConventionFranceTravailAdvisorRepository, +} from "../port/ConventionFranceTravailAdvisorRepository"; + +export class InMemoryConventionFranceTravailAdvisorRepository + implements ConventionFranceTravailAdvisorRepository +{ + #conventionFranceTravailUsersAdvisors: ConventionFtUserAdvisorEntity[] = []; + + public async associateConventionAndUserAdvisor( + conventionId: ConventionId, + peExternalId: FtExternalId, + ): Promise { + const entity: ConventionFtUserAdvisorEntity = + await this.#getAlreadyOpenIfExist(peExternalId); + this.#upsertWithClosedConvention(entity, { + ...entity, + conventionId, + }); + + return { + conventionId, + peExternalId, + }; + } + + //test purposes only + public get conventionPoleEmploiUsersAdvisors() { + return this.#conventionFranceTravailUsersAdvisors; + } + + public async getByConventionId( + conventionId: ConventionId, + ): Promise { + return this.#conventionFranceTravailUsersAdvisors.find( + matchConventionId(conventionId), + ); + } + + public async openSlotForNextConvention( + peUserAndAdvisor: FtUserAndAdvisor, + ): Promise { + this.#conventionFranceTravailUsersAdvisors.push({ + advisor: peUserAndAdvisor.advisor, + conventionId: CONVENTION_ID_DEFAULT_UUID, + peExternalId: peUserAndAdvisor.user.peExternalId, + _entityName: "ConventionFranceTravailAdvisor", + }); + } + + //test purposes only + public setConventionPoleEmploiUsersAdvisor( + conventionPoleEmploiUserAdvisorEntities: ConventionFtUserAdvisorEntity[], + ) { + this.#conventionFranceTravailUsersAdvisors = + conventionPoleEmploiUserAdvisorEntities; + } + + async #getAlreadyOpenIfExist( + peExternalId: FtExternalId, + ): Promise { + const entity: ConventionFtUserAdvisorEntity | undefined = + this.#conventionFranceTravailUsersAdvisors + .filter(matchPeExternalId(peExternalId)) + .find(isOpenEntity); + if (entity) return entity; + throw errors.convention.missingFTAdvisor({ ftExternalId: peExternalId }); + } + + #upsertWithClosedConvention = ( + oldEntity: ConventionFtUserAdvisorEntity, + newEntity: ConventionFtUserAdvisorEntity, + ): void => { + this.#conventionFranceTravailUsersAdvisors[ + this.#conventionFranceTravailUsersAdvisors.indexOf(oldEntity) + ] = newEntity; + }; +} + +export const CONVENTION_ID_DEFAULT_UUID = + "00000000-0000-0000-0000-000000000000"; + +const matchPeExternalId = + (peExternalId: string) => + (conventionPoleEmploiUserAdvisor: ConventionFtUserAdvisorEntity) => + conventionPoleEmploiUserAdvisor.peExternalId === peExternalId; + +const matchConventionId = + (conventionId: string) => + (conventionPoleEmploiUserAdvisor: ConventionFtUserAdvisorEntity) => + conventionPoleEmploiUserAdvisor.conventionId === conventionId; + +const isOpenEntity = (entity: ConventionFtUserAdvisorEntity) => + entity.conventionId === CONVENTION_ID_DEFAULT_UUID; diff --git a/back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionPoleEmploiAdvisorRepository.ts b/back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionPoleEmploiAdvisorRepository.ts deleted file mode 100644 index c8729320ad..0000000000 --- a/back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionPoleEmploiAdvisorRepository.ts +++ /dev/null @@ -1,101 +0,0 @@ -import { ConventionId, PeExternalId, errors } from "shared"; -import { - ConventionPoleEmploiUserAdvisorEntity, - PeUserAndAdvisor, -} from "../dto/PeConnect.dto"; -import { - ConventionAndPeExternalIds, - ConventionPoleEmploiAdvisorRepository, -} from "../port/ConventionPoleEmploiAdvisorRepository"; - -export class InMemoryConventionPoleEmploiAdvisorRepository - implements ConventionPoleEmploiAdvisorRepository -{ - #conventionPoleEmploiUsersAdvisors: ConventionPoleEmploiUserAdvisorEntity[] = - []; - - public async associateConventionAndUserAdvisor( - conventionId: ConventionId, - peExternalId: PeExternalId, - ): Promise { - const entity: ConventionPoleEmploiUserAdvisorEntity = - await this.#getAlreadyOpenIfExist(peExternalId); - this.#upsertWithClosedConvention(entity, { - ...entity, - conventionId, - }); - - return { - conventionId, - peExternalId, - }; - } - - //test purposes only - public get conventionPoleEmploiUsersAdvisors() { - return this.#conventionPoleEmploiUsersAdvisors; - } - - public async getByConventionId( - conventionId: ConventionId, - ): Promise { - return this.#conventionPoleEmploiUsersAdvisors.find( - matchConventionId(conventionId), - ); - } - - public async openSlotForNextConvention( - peUserAndAdvisor: PeUserAndAdvisor, - ): Promise { - this.#conventionPoleEmploiUsersAdvisors.push({ - advisor: peUserAndAdvisor.advisor, - conventionId: CONVENTION_ID_DEFAULT_UUID, - peExternalId: peUserAndAdvisor.user.peExternalId, - _entityName: "ConventionPoleEmploiAdvisor", - }); - } - - //test purposes only - public setConventionPoleEmploiUsersAdvisor( - conventionPoleEmploiUserAdvisorEntities: ConventionPoleEmploiUserAdvisorEntity[], - ) { - this.#conventionPoleEmploiUsersAdvisors = - conventionPoleEmploiUserAdvisorEntities; - } - - async #getAlreadyOpenIfExist( - peExternalId: PeExternalId, - ): Promise { - const entity: ConventionPoleEmploiUserAdvisorEntity | undefined = - this.#conventionPoleEmploiUsersAdvisors - .filter(matchPeExternalId(peExternalId)) - .find(isOpenEntity); - if (entity) return entity; - throw errors.convention.missingFTAdvisor({ ftExternalId: peExternalId }); - } - - #upsertWithClosedConvention = ( - oldEntity: ConventionPoleEmploiUserAdvisorEntity, - newEntity: ConventionPoleEmploiUserAdvisorEntity, - ): void => { - this.#conventionPoleEmploiUsersAdvisors[ - this.#conventionPoleEmploiUsersAdvisors.indexOf(oldEntity) - ] = newEntity; - }; -} - -export const CONVENTION_ID_DEFAULT_UUID = - "00000000-0000-0000-0000-000000000000"; - -const matchPeExternalId = - (peExternalId: string) => - (conventionPoleEmploiUserAdvisor: ConventionPoleEmploiUserAdvisorEntity) => - conventionPoleEmploiUserAdvisor.peExternalId === peExternalId; - -const matchConventionId = - (conventionId: string) => - (conventionPoleEmploiUserAdvisor: ConventionPoleEmploiUserAdvisorEntity) => - conventionPoleEmploiUserAdvisor.conventionId === conventionId; - -const isOpenEntity = (entity: ConventionPoleEmploiUserAdvisorEntity) => - entity.conventionId === CONVENTION_ID_DEFAULT_UUID; diff --git a/back/src/domains/core/authentication/pe-connect/adapters/PgConventionPoleEmploiAdvisorRepository.integration.test.ts b/back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts similarity index 87% rename from back/src/domains/core/authentication/pe-connect/adapters/PgConventionPoleEmploiAdvisorRepository.integration.test.ts rename to back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts index 49711ec674..ea1b76eb5e 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/PgConventionPoleEmploiAdvisorRepository.integration.test.ts +++ b/back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts @@ -15,55 +15,55 @@ import { PgAgencyRepository } from "../../../../agency/adapters/PgAgencyReposito import { PgConventionExternalIdRepository } from "../../../../convention/adapters/PgConventionExternalIdRepository"; import { PgConventionRepository } from "../../../../convention/adapters/PgConventionRepository"; import { - ConventionPoleEmploiUserAdvisorEntity, - PeUserAndAdvisor, -} from "../dto/PeConnect.dto"; -import { PeConnectImmersionAdvisorDto } from "../dto/PeConnectAdvisor.dto"; -import { PeConnectUserDto } from "../dto/PeConnectUser.dto"; -import { PgConventionPoleEmploiAdvisorRepository } from "./PgConventionPoleEmploiAdvisorRepository"; + ConventionFtUserAdvisorEntity, + FtUserAndAdvisor, +} from "../dto/FtConnect.dto"; +import { FtConnectImmersionAdvisorDto } from "../dto/FtConnectAdvisor.dto"; +import { FtConnectUserDto } from "../dto/FtConnectUserDto"; +import { PgConventionFranceTravailAdvisorRepository } from "./PgConventionFranceTravailAdvisorRepository"; const conventionId = "88401348-bad9-4933-87c6-405b8a8fe4cc"; const userPeExternalId = "92f44bbf-103d-4312-bd74-217c7d79f618"; const convention = new ConventionDtoBuilder().withId(conventionId).build(); -const user: PeConnectUserDto = { +const user: FtConnectUserDto = { email: "", firstName: "", isJobseeker: true, lastName: "", peExternalId: userPeExternalId, }; -const placementAdvisor: PeConnectImmersionAdvisorDto = { +const placementAdvisor: FtConnectImmersionAdvisorDto = { firstName: "Jean", lastName: "Dupont", email: "jean.dupont@pole-emploi.fr", type: "PLACEMENT", }; -const capemploiAdvisor: PeConnectImmersionAdvisorDto = { +const capemploiAdvisor: FtConnectImmersionAdvisorDto = { firstName: "Jeanne", lastName: "Delamare", email: "jeanne.delamare@pole-emploi.fr", type: "CAPEMPLOI", }; -const poleEmploiFirstUserAdvisor: PeUserAndAdvisor = { +const poleEmploiFirstUserAdvisor: FtUserAndAdvisor = { advisor: placementAdvisor, user, }; -const poleEmploiFirstUserWithoutAdvisor: PeUserAndAdvisor = { +const poleEmploiFirstUserWithoutAdvisor: FtUserAndAdvisor = { advisor: undefined, user, }; -const poleEmploiUpdatedUserAdvisor: PeUserAndAdvisor = { +const poleEmploiUpdatedUserAdvisor: FtUserAndAdvisor = { advisor: capemploiAdvisor, user, }; describe("PgConventionPoleEmploiAdvisorRepository", () => { let pool: Pool; - let conventionPoleEmploiAdvisorRepository: PgConventionPoleEmploiAdvisorRepository; + let conventionPoleEmploiAdvisorRepository: PgConventionFranceTravailAdvisorRepository; let db: KyselyDb; beforeAll(async () => { @@ -95,7 +95,7 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { beforeEach(async () => { await db.deleteFrom("partners_pe_connect").execute(); conventionPoleEmploiAdvisorRepository = - new PgConventionPoleEmploiAdvisorRepository(db); + new PgConventionFranceTravailAdvisorRepository(db); }); describe("openSlotForNextConvention", () => { @@ -205,9 +205,7 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { describe("getByConventionId", () => { it("should return undefined if no convention Advisor", async () => { - const conventionAdvisor: - | ConventionPoleEmploiUserAdvisorEntity - | undefined = + const conventionAdvisor: ConventionFtUserAdvisorEntity | undefined = await conventionPoleEmploiAdvisorRepository.getByConventionId( conventionId, ); @@ -224,9 +222,7 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { userPeExternalId, ); - const conventionAdvisor: - | ConventionPoleEmploiUserAdvisorEntity - | undefined = + const conventionAdvisor: ConventionFtUserAdvisorEntity | undefined = await conventionPoleEmploiAdvisorRepository.getByConventionId( conventionId, ); @@ -248,9 +244,7 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { userPeExternalId, ); - const conventionAdvisor: - | ConventionPoleEmploiUserAdvisorEntity - | undefined = + const conventionAdvisor: ConventionFtUserAdvisorEntity | undefined = await conventionPoleEmploiAdvisorRepository.getByConventionId( conventionId, ); diff --git a/back/src/domains/core/authentication/pe-connect/adapters/PgConventionPoleEmploiAdvisorRepository.ts b/back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts similarity index 71% rename from back/src/domains/core/authentication/pe-connect/adapters/PgConventionPoleEmploiAdvisorRepository.ts rename to back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts index 369c577490..97eeeca684 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/PgConventionPoleEmploiAdvisorRepository.ts +++ b/back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts @@ -1,4 +1,4 @@ -import { ConventionId, PeExternalId } from "shared"; +import { ConventionId, FtExternalId } from "shared"; import { KyselyDb, executeKyselyRawSqlQuery, @@ -6,30 +6,30 @@ import { import { createLogger } from "../../../../../utils/logger"; import { parseZodSchemaAndLogErrorOnParsingFailure } from "../../../../../utils/schema.utils"; import { - ConventionPoleEmploiUserAdvisorDto, - ConventionPoleEmploiUserAdvisorEntity, - PeUserAndAdvisor, -} from "../dto/PeConnect.dto"; -import { isPeAdvisorImmersionKind } from "../dto/PeConnectAdvisor.dto"; + ConventionFtUserAdvisorDto, + ConventionFtUserAdvisorEntity, + FtUserAndAdvisor, +} from "../dto/FtConnect.dto"; +import { isFtAdvisorImmersionKind } from "../dto/FtConnectAdvisor.dto"; import { - ConventionAndPeExternalIds, - ConventionPoleEmploiAdvisorRepository, -} from "../port/ConventionPoleEmploiAdvisorRepository"; -import { conventionPoleEmploiUserAdvisorDtoSchema } from "../port/PeConnect.schema"; + ConventionAndFtExternalIds, + ConventionFranceTravailAdvisorRepository, +} from "../port/ConventionFranceTravailAdvisorRepository"; +import { conventionFranceTravailUserAdvisorDtoSchema } from "../port/FtConnect.schema"; const CONVENTION_ID_DEFAULT_UUID = "00000000-0000-0000-0000-000000000000"; const logger = createLogger(__filename); -export class PgConventionPoleEmploiAdvisorRepository - implements ConventionPoleEmploiAdvisorRepository +export class PgConventionFranceTravailAdvisorRepository + implements ConventionFranceTravailAdvisorRepository { constructor(private transaction: KyselyDb) {} public async associateConventionAndUserAdvisor( conventionId: ConventionId, - peExternalId: PeExternalId, - ): Promise { + peExternalId: FtExternalId, + ): Promise { const pgResult = await executeKyselyRawSqlQuery( this.transaction, ` @@ -53,9 +53,9 @@ export class PgConventionPoleEmploiAdvisorRepository public async getByConventionId( conventionId: ConventionId, - ): Promise { + ): Promise { const pgResult = - await executeKyselyRawSqlQuery( + await executeKyselyRawSqlQuery( this.transaction, `SELECT * FROM partners_pe_connect @@ -65,13 +65,13 @@ export class PgConventionPoleEmploiAdvisorRepository const result = pgResult.rows.at(0); const conventionPeUserAdvisor = - result && toConventionPoleEmploiUserAdvisorDTO(result); + result && toConventionFranceTravailUserAdvisorDTO(result); return ( conventionPeUserAdvisor && toConventionPoleEmploiUserAdvisorEntity( parseZodSchemaAndLogErrorOnParsingFailure( - conventionPoleEmploiUserAdvisorDtoSchema, + conventionFranceTravailUserAdvisorDtoSchema, conventionPeUserAdvisor, logger, ), @@ -80,7 +80,7 @@ export class PgConventionPoleEmploiAdvisorRepository } public async openSlotForNextConvention( - peUserAndAdvisor: PeUserAndAdvisor, + peUserAndAdvisor: FtUserAndAdvisor, ): Promise { const { user, advisor } = peUserAndAdvisor; @@ -99,7 +99,7 @@ export class PgConventionPoleEmploiAdvisorRepository } } -export type PgConventionPoleEmploiUserAdvisorDto = { +export type PgConventionFranceTravailUserAdvisorDto = { user_pe_external_id: string; convention_id: string; firstname: string | null; @@ -108,16 +108,16 @@ export type PgConventionPoleEmploiUserAdvisorDto = { type: string | null; }; -const toConventionPoleEmploiUserAdvisorDTO = ({ +const toConventionFranceTravailUserAdvisorDTO = ({ user_pe_external_id, convention_id, firstname, lastname, email, type, -}: PgConventionPoleEmploiUserAdvisorDto): ConventionPoleEmploiUserAdvisorDto => ({ +}: PgConventionFranceTravailUserAdvisorDto): ConventionFtUserAdvisorDto => ({ advisor: - firstname && lastname && email && type && isPeAdvisorImmersionKind(type) + firstname && lastname && email && type && isFtAdvisorImmersionKind(type) ? { firstName: firstname, lastName: lastname, @@ -130,10 +130,10 @@ const toConventionPoleEmploiUserAdvisorDTO = ({ }); const toConventionPoleEmploiUserAdvisorEntity = ( - dto: ConventionPoleEmploiUserAdvisorDto, -): ConventionPoleEmploiUserAdvisorEntity => ({ + dto: ConventionFtUserAdvisorDto, +): ConventionFtUserAdvisorEntity => ({ ...dto, - _entityName: "ConventionPoleEmploiAdvisor", + _entityName: "ConventionFranceTravailAdvisor", }); // On primary key conflict we update the data columns (firstname, lastname, email, type) with the new values. diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts index 68b80ede68..dc31b40d70 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts +++ b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts @@ -12,10 +12,10 @@ import { import { notifyObjectDiscord } from "../../../../../../utils/notifyDiscord"; import { parseZodSchemaAndLogErrorOnParsingFailure } from "../../../../../../utils/schema.utils"; import { AccessTokenDto } from "../../dto/AccessToken.dto"; -import { PeConnectAdvisorDto } from "../../dto/PeConnectAdvisor.dto"; -import { PeConnectUserDto } from "../../dto/PeConnectUser.dto"; +import { FtConnectAdvisorDto } from "../../dto/FtConnectAdvisor.dto"; +import { FtConnectUserDto } from "../../dto/FtConnectUserDto"; import { externalAccessTokenSchema } from "../../port/AccessToken.schema"; -import { PeConnectGateway } from "../../port/PeConnectGateway"; +import { FtConnectGateway } from "../../port/FtConnectGateway"; import { ExternalPeConnectAdvisor, ExternalPeConnectUser, @@ -86,7 +86,7 @@ const peConnectMaxRequestsPerInterval = 1; const rate_ms = 1250; // TODO GERER LE RETRY POUR L'ENSEMBLE DES APPELS PE -export class HttpPeConnectGateway implements PeConnectGateway { +export class HttpPeConnectGateway implements FtConnectGateway { // PE Connect limit rate at 1 call per 1.2s #limiter = new Bottleneck({ reservoir: peConnectMaxRequestsPerInterval, @@ -151,8 +151,8 @@ export class HttpPeConnectGateway implements PeConnectGateway { public async getUserAndAdvisors(accessToken: AccessTokenDto): Promise< | { - user: PeConnectUserDto; - advisors: PeConnectAdvisorDto[]; + user: FtConnectUserDto; + advisors: FtConnectAdvisorDto[]; } | undefined > { diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway.ts b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway.ts index 7397e832c1..994ff03e9e 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway.ts +++ b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway.ts @@ -1,14 +1,14 @@ import { AccessTokenDto } from "../../dto/AccessToken.dto"; -import { PeConnectAdvisorDto } from "../../dto/PeConnectAdvisor.dto"; -import { PeConnectUserDto } from "../../dto/PeConnectUser.dto"; -import { PeConnectGateway } from "../../port/PeConnectGateway"; +import { FtConnectAdvisorDto } from "../../dto/FtConnectAdvisor.dto"; +import { FtConnectUserDto } from "../../dto/FtConnectUserDto"; +import { FtConnectGateway } from "../../port/FtConnectGateway"; -export class InMemoryPeConnectGateway implements PeConnectGateway { +export class InMemoryPeConnectGateway implements FtConnectGateway { #accessToken: AccessTokenDto | undefined = undefined; - #advisors: PeConnectAdvisorDto[] = []; + #advisors: FtConnectAdvisorDto[] = []; - #user: PeConnectUserDto | undefined = undefined; + #user: FtConnectUserDto | undefined = undefined; public async getAccessToken( _authorizationCode: string, @@ -18,15 +18,15 @@ export class InMemoryPeConnectGateway implements PeConnectGateway { public async getUserAndAdvisors(_accessToken: AccessTokenDto): Promise< | { - user: PeConnectUserDto; - advisors: PeConnectAdvisorDto[]; + user: FtConnectUserDto; + advisors: FtConnectAdvisorDto[]; } | undefined > { if (!this.#user) return undefined; const peUserAndAdvisor: { - user: PeConnectUserDto; - advisors: PeConnectAdvisorDto[]; + user: FtConnectUserDto; + advisors: FtConnectAdvisorDto[]; } = { advisors: this.#advisors, user: this.#user, @@ -38,12 +38,12 @@ export class InMemoryPeConnectGateway implements PeConnectGateway { this.#accessToken = accessToken; } - public setAdvisors(advisors: PeConnectAdvisorDto[]) { + public setAdvisors(advisors: FtConnectAdvisorDto[]) { this.#advisors = advisors; } // test - public setUser(user: PeConnectUserDto | undefined) { + public setUser(user: FtConnectUserDto | undefined) { this.#user = user; } } diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.dto.ts b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.dto.ts index 845c097c0f..81b04d4068 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.dto.ts +++ b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.dto.ts @@ -1,7 +1,7 @@ import { AbsoluteUrl } from "shared"; import { z } from "zod"; import { BearerToken } from "../../dto/BearerToken"; -import { PeConnectAdvisorsKind } from "../../dto/PeConnectAdvisor.dto"; +import { FtConnectAdvisorsKind } from "../../dto/FtConnectAdvisor.dto"; export type ExternalAccessToken = { access_token: string; @@ -30,7 +30,7 @@ export type ExternalPeConnectAdvisor = { prenom: string; civilite: "1" | "2"; mail: string; - type: PeConnectAdvisorsKind; + type: FtConnectAdvisorsKind; }; export type ExternalPeConnectAdvisors = ExternalPeConnectAdvisor[]; diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes.ts b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes.ts index f652a4d60a..db6b925728 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes.ts +++ b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes.ts @@ -3,8 +3,8 @@ import { defineRoute, defineRoutes } from "shared-routes"; import { z } from "zod"; import { AppConfig } from "../../../../../../config/bootstrap/appConfig"; import { AccessTokenDto } from "../../dto/AccessToken.dto"; -import { PeConnectAdvisorDto } from "../../dto/PeConnectAdvisor.dto"; -import { PeConnectUserDto } from "../../dto/PeConnectUser.dto"; +import { FtConnectAdvisorDto } from "../../dto/FtConnectAdvisor.dto"; +import { FtConnectUserDto } from "../../dto/FtConnectUserDto"; import { ExternalAccessToken, ExternalPeConnectAdvisor, @@ -93,7 +93,7 @@ const makeOauthGetAuthorizationCodeRedirectUrl = ( export const toPeConnectAdvisorDto = ( fromApi: ExternalPeConnectAdvisor, -): PeConnectAdvisorDto => ({ +): FtConnectAdvisorDto => ({ email: fromApi.mail, firstName: fromApi.prenom, lastName: fromApi.nom, @@ -102,7 +102,7 @@ export const toPeConnectAdvisorDto = ( export const toPeConnectUserDto = ( externalPeConnectUser: ExternalPeConnectUser & { isUserJobseeker: boolean }, -): PeConnectUserDto => ({ +): FtConnectUserDto => ({ isJobseeker: externalPeConnectUser.isUserJobseeker, email: externalPeConnectUser.email, firstName: externalPeConnectUser.given_name, diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.schema.ts b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.schema.ts index 752755105d..01ca498f5f 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.schema.ts +++ b/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.schema.ts @@ -2,9 +2,9 @@ import { emailSchema, zStringMinLength1 } from "shared"; import { z } from "zod"; import { BearerToken } from "../../dto/BearerToken"; import { - PeConnectAdvisorsKind, - peAdvisorKinds, -} from "../../dto/PeConnectAdvisor.dto"; + FtConnectAdvisorsKind, + ftAdvisorKinds, +} from "../../dto/FtConnectAdvisor.dto"; import { ExternalPeConnectAdvisor, ExternalPeConnectAdvisors, @@ -32,8 +32,8 @@ export const externalPeConnectUserStatutSchema: z.Schema = - z.enum(peAdvisorKinds); +const peAdvisorKindSchema: z.Schema = + z.enum(ftAdvisorKinds); const externalPeConnectAdvisorSchema: z.Schema = z.object({ diff --git a/back/src/domains/core/authentication/pe-connect/dto/FtConnect.dto.ts b/back/src/domains/core/authentication/pe-connect/dto/FtConnect.dto.ts new file mode 100644 index 0000000000..be419b347a --- /dev/null +++ b/back/src/domains/core/authentication/pe-connect/dto/FtConnect.dto.ts @@ -0,0 +1,49 @@ +import { + Beneficiary, + FederatedIdentityProvider, + FtConnectToken, + FtExternalId, + InternshipKind, + notJobSeeker, +} from "shared"; +import { EntityFromDto } from "../../../../../utils/EntityFromDto"; +import { FtConnectImmersionAdvisorDto } from "./FtConnectAdvisor.dto"; +import { FtConnectUserDto } from "./FtConnectUserDto"; + +export type ConventionFtUserAdvisorDto = { + peExternalId: FtExternalId; + conventionId: string; + advisor?: FtConnectImmersionAdvisorDto; +}; + +export type ConventionFtUserAdvisorEntity = EntityFromDto< + ConventionFtUserAdvisorDto, + "ConventionFranceTravailAdvisor" +>; + +type BeneficiaryBasicIdentity = Pick< + Beneficiary, + "email" | "firstName" | "lastName" +>; + +export type ConventionFtConnectFields = BeneficiaryBasicIdentity & { + fedId: FtConnectToken; + fedIdProvider: FederatedIdentityProvider; +}; + +export type FtUserAndAdvisor = { + advisor: FtConnectImmersionAdvisorDto | undefined; + user: FtConnectUserDto; +}; + +export const toPartialConventionDtoWithPeIdentity = ( + ftConnectUserInfo: FtConnectUserDto, +): ConventionFtConnectFields => ({ + email: ftConnectUserInfo.email || "", + firstName: ftConnectUserInfo.firstName, + lastName: ftConnectUserInfo.lastName, + fedId: ftConnectUserInfo.isJobseeker + ? ftConnectUserInfo.peExternalId + : notJobSeeker, + fedIdProvider: "peConnect", +}); diff --git a/back/src/domains/core/authentication/pe-connect/dto/FtConnectAdvisor.dto.ts b/back/src/domains/core/authentication/pe-connect/dto/FtConnectAdvisor.dto.ts new file mode 100644 index 0000000000..6e03d4b015 --- /dev/null +++ b/back/src/domains/core/authentication/pe-connect/dto/FtConnectAdvisor.dto.ts @@ -0,0 +1,33 @@ +import { NotEmptyArray } from "shared"; + +const ftAdvisorImmersionKinds = ["PLACEMENT", "CAPEMPLOI"] as const; +export const ftAdvisorKinds = [ + ...ftAdvisorImmersionKinds, + "INDEMNISATION", +] as const; + +export const isFtAdvisorImmersionKind = ( + input: string, +): input is FtConnectImmersionAdvisorsKind => + immersionFranceTravailAdvisors.some((value) => value === input); + +export const immersionFranceTravailAdvisors: NotEmptyArray = + ["PLACEMENT", "CAPEMPLOI"]; + +type FtConnectImmersionAdvisorsKind = (typeof ftAdvisorImmersionKinds)[number]; + +export type FtConnectImmersionAdvisorDto = { + email: string; + firstName: string; + lastName: string; + type: FtConnectImmersionAdvisorsKind; +}; + +export type FtConnectAdvisorsKind = (typeof ftAdvisorKinds)[number]; + +export type FtConnectAdvisorDto = { + email: string; + firstName: string; + lastName: string; + type: FtConnectAdvisorsKind; +}; diff --git a/back/src/domains/core/authentication/pe-connect/dto/FtConnectUserDto.ts b/back/src/domains/core/authentication/pe-connect/dto/FtConnectUserDto.ts new file mode 100644 index 0000000000..09d2bab254 --- /dev/null +++ b/back/src/domains/core/authentication/pe-connect/dto/FtConnectUserDto.ts @@ -0,0 +1,9 @@ +import { FtExternalId } from "shared"; + +export type FtConnectUserDto = { + isJobseeker: boolean; + email?: string; + firstName: string; + lastName: string; + peExternalId: FtExternalId; +}; diff --git a/back/src/domains/core/authentication/pe-connect/dto/PeConnect.dto.ts b/back/src/domains/core/authentication/pe-connect/dto/PeConnect.dto.ts deleted file mode 100644 index 02590b98b4..0000000000 --- a/back/src/domains/core/authentication/pe-connect/dto/PeConnect.dto.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { - Beneficiary, - FederatedIdentityProvider, - InternshipKind, - PeConnectToken, - PeExternalId, - notJobSeeker, -} from "shared"; -import { EntityFromDto } from "../../../../../utils/EntityFromDto"; -import { PeConnectImmersionAdvisorDto } from "./PeConnectAdvisor.dto"; -import { PeConnectUserDto } from "./PeConnectUser.dto"; - -export type ConventionPoleEmploiUserAdvisorDto = { - peExternalId: PeExternalId; - conventionId: string; - advisor?: PeConnectImmersionAdvisorDto; -}; - -export type ConventionPoleEmploiUserAdvisorEntity = EntityFromDto< - ConventionPoleEmploiUserAdvisorDto, - "ConventionPoleEmploiAdvisor" ->; - -type BeneficiaryBasicIdentity = Pick< - Beneficiary, - "email" | "firstName" | "lastName" ->; - -export type ConventionPeConnectFields = BeneficiaryBasicIdentity & { - fedId: PeConnectToken; - fedIdProvider: FederatedIdentityProvider; -}; - -export type PeUserAndAdvisor = { - advisor: PeConnectImmersionAdvisorDto | undefined; - user: PeConnectUserDto; -}; - -export const toPartialConventionDtoWithPeIdentity = ( - peConnectUserInfo: PeConnectUserDto, -): ConventionPeConnectFields => ({ - email: peConnectUserInfo.email || "", - firstName: peConnectUserInfo.firstName, - lastName: peConnectUserInfo.lastName, - fedId: peConnectUserInfo.isJobseeker - ? peConnectUserInfo.peExternalId - : notJobSeeker, - fedIdProvider: "peConnect", -}); diff --git a/back/src/domains/core/authentication/pe-connect/dto/PeConnectAdvisor.dto.ts b/back/src/domains/core/authentication/pe-connect/dto/PeConnectAdvisor.dto.ts deleted file mode 100644 index 28885d357a..0000000000 --- a/back/src/domains/core/authentication/pe-connect/dto/PeConnectAdvisor.dto.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { NotEmptyArray } from "shared"; - -const peAdvisorImmersionKinds = ["PLACEMENT", "CAPEMPLOI"] as const; -export const peAdvisorKinds = [ - ...peAdvisorImmersionKinds, - "INDEMNISATION", -] as const; - -export const isPeAdvisorImmersionKind = ( - input: string, -): input is PeConnectImmersionAdvisorsKind => - immersionPoleEmploiAdvisors.some((value) => value === input); - -export const immersionPoleEmploiAdvisors: NotEmptyArray = - ["PLACEMENT", "CAPEMPLOI"]; - -type PeConnectImmersionAdvisorsKind = (typeof peAdvisorImmersionKinds)[number]; - -export type PeConnectImmersionAdvisorDto = { - email: string; - firstName: string; - lastName: string; - type: PeConnectImmersionAdvisorsKind; -}; - -export type PeConnectAdvisorsKind = (typeof peAdvisorKinds)[number]; - -export type PeConnectAdvisorDto = { - email: string; - firstName: string; - lastName: string; - type: PeConnectAdvisorsKind; -}; diff --git a/back/src/domains/core/authentication/pe-connect/dto/PeConnectUser.dto.ts b/back/src/domains/core/authentication/pe-connect/dto/PeConnectUser.dto.ts deleted file mode 100644 index 36784b2ab5..0000000000 --- a/back/src/domains/core/authentication/pe-connect/dto/PeConnectUser.dto.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { PeExternalId } from "shared"; - -export type PeConnectUserDto = { - isJobseeker: boolean; - email?: string; - firstName: string; - lastName: string; - peExternalId: PeExternalId; -}; diff --git a/back/src/domains/core/authentication/pe-connect/entities/ConventionFranceTravailAdvisorEntity.ts b/back/src/domains/core/authentication/pe-connect/entities/ConventionFranceTravailAdvisorEntity.ts new file mode 100644 index 0000000000..2d19735d4d --- /dev/null +++ b/back/src/domains/core/authentication/pe-connect/entities/ConventionFranceTravailAdvisorEntity.ts @@ -0,0 +1,53 @@ +import { createLogger } from "../../../../../utils/logger"; +import { + ConventionFtUserAdvisorEntity, + FtUserAndAdvisor, +} from "../dto/FtConnect.dto"; +import { + FtConnectAdvisorDto, + FtConnectImmersionAdvisorDto, +} from "../dto/FtConnectAdvisor.dto"; +import { FtConnectUserDto } from "../dto/FtConnectUserDto"; + +export const conventionFranceTravailUserAdvisorFromDto = ( + dto: FtUserAndAdvisor, + conventionId: string, +): ConventionFtUserAdvisorEntity => ({ + advisor: dto.advisor, + peExternalId: dto.user.peExternalId, + conventionId, + _entityName: "ConventionFranceTravailAdvisor", +}); + +const preferCapEmploiPredicate = ( + a: FtConnectImmersionAdvisorDto, + _: FtConnectImmersionAdvisorDto, +) => (a.type === "CAPEMPLOI" ? -1 : 1); + +const onlyValidAdvisorsForImmersion = ( + advisor: FtConnectAdvisorDto, +): advisor is FtConnectImmersionAdvisorDto => advisor.type !== "INDEMNISATION"; + +const logger = createLogger(__filename); + +export const chooseValidAdvisor = ( + { peExternalId }: FtConnectUserDto, + advisors: FtConnectAdvisorDto[], +): FtConnectImmersionAdvisorDto | undefined => { + const sortedValidAdvisors: FtConnectImmersionAdvisorDto[] = advisors + .filter(onlyValidAdvisorsForImmersion) + .sort(preferCapEmploiPredicate); + + const preferredAdvisor = sortedValidAdvisors.at(0); + if (!preferredAdvisor) { + logger.error({ + ftConnect: { + peExternalId, + }, + message: "getAdvisorsInfo - ftConnectNoValidAdvisor", + }); + return undefined; + } + + return preferredAdvisor; +}; diff --git a/back/src/domains/core/authentication/pe-connect/entities/ConventionPoleEmploiAdvisorEntity.ts b/back/src/domains/core/authentication/pe-connect/entities/ConventionPoleEmploiAdvisorEntity.ts deleted file mode 100644 index 77ff069df8..0000000000 --- a/back/src/domains/core/authentication/pe-connect/entities/ConventionPoleEmploiAdvisorEntity.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { createLogger } from "../../../../../utils/logger"; -import { - ConventionPoleEmploiUserAdvisorEntity, - PeUserAndAdvisor, -} from "../dto/PeConnect.dto"; -import { - PeConnectAdvisorDto, - PeConnectImmersionAdvisorDto, -} from "../dto/PeConnectAdvisor.dto"; -import { PeConnectUserDto } from "../dto/PeConnectUser.dto"; - -export const conventionPoleEmploiUserAdvisorFromDto = ( - dto: PeUserAndAdvisor, - conventionId: string, -): ConventionPoleEmploiUserAdvisorEntity => ({ - advisor: dto.advisor, - peExternalId: dto.user.peExternalId, - conventionId, - _entityName: "ConventionPoleEmploiAdvisor", -}); - -const preferCapEmploiPredicate = ( - a: PeConnectImmersionAdvisorDto, - _: PeConnectImmersionAdvisorDto, -) => (a.type === "CAPEMPLOI" ? -1 : 1); - -const onlyValidAdvisorsForImmersion = ( - advisor: PeConnectAdvisorDto, -): advisor is PeConnectImmersionAdvisorDto => advisor.type !== "INDEMNISATION"; - -const logger = createLogger(__filename); - -export const chooseValidAdvisor = ( - { peExternalId }: PeConnectUserDto, - advisors: PeConnectAdvisorDto[], -): PeConnectImmersionAdvisorDto | undefined => { - const sortedValidAdvisors: PeConnectImmersionAdvisorDto[] = advisors - .filter(onlyValidAdvisorsForImmersion) - .sort(preferCapEmploiPredicate); - - const preferredAdvisor = sortedValidAdvisors.at(0); - if (!preferredAdvisor) { - logger.error({ - ftConnect: { - peExternalId, - }, - message: "getAdvisorsInfo - peConnectNoValidAdvisor", - }); - return undefined; - } - - return preferredAdvisor; -}; diff --git a/back/src/domains/core/authentication/pe-connect/port/ConventionFranceTravailAdvisorRepository.ts b/back/src/domains/core/authentication/pe-connect/port/ConventionFranceTravailAdvisorRepository.ts new file mode 100644 index 0000000000..b02fc44ab1 --- /dev/null +++ b/back/src/domains/core/authentication/pe-connect/port/ConventionFranceTravailAdvisorRepository.ts @@ -0,0 +1,23 @@ +import { ConventionId, FtExternalId } from "shared"; +import { + ConventionFtUserAdvisorEntity, + FtUserAndAdvisor, +} from "../dto/FtConnect.dto"; + +export type ConventionAndFtExternalIds = { + conventionId: ConventionId; + peExternalId: FtExternalId; +}; + +export interface ConventionFranceTravailAdvisorRepository { + openSlotForNextConvention: ( + ftUserAndAdvisor: FtUserAndAdvisor, + ) => Promise; + associateConventionAndUserAdvisor: ( + conventionId: ConventionId, + userFtExternalId: FtExternalId, + ) => Promise; + getByConventionId: ( + conventionId: ConventionId, + ) => Promise; +} diff --git a/back/src/domains/core/authentication/pe-connect/port/ConventionPoleEmploiAdvisorRepository.ts b/back/src/domains/core/authentication/pe-connect/port/ConventionPoleEmploiAdvisorRepository.ts deleted file mode 100644 index 640367e886..0000000000 --- a/back/src/domains/core/authentication/pe-connect/port/ConventionPoleEmploiAdvisorRepository.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ConventionId, PeExternalId } from "shared"; -import { - ConventionPoleEmploiUserAdvisorEntity, - PeUserAndAdvisor, -} from "../dto/PeConnect.dto"; - -export type ConventionAndPeExternalIds = { - conventionId: ConventionId; - peExternalId: PeExternalId; -}; - -export interface ConventionPoleEmploiAdvisorRepository { - openSlotForNextConvention: ( - peUserAndAdvisor: PeUserAndAdvisor, - ) => Promise; - associateConventionAndUserAdvisor: ( - conventionId: ConventionId, - userPeExternalId: PeExternalId, - ) => Promise; - getByConventionId: ( - conventionId: ConventionId, - ) => Promise; -} diff --git a/back/src/domains/core/authentication/pe-connect/port/PeConnect.schema.ts b/back/src/domains/core/authentication/pe-connect/port/FtConnect.schema.ts similarity index 62% rename from back/src/domains/core/authentication/pe-connect/port/PeConnect.schema.ts rename to back/src/domains/core/authentication/pe-connect/port/FtConnect.schema.ts index 112aa2044b..a4d45b075b 100644 --- a/back/src/domains/core/authentication/pe-connect/port/PeConnect.schema.ts +++ b/back/src/domains/core/authentication/pe-connect/port/FtConnect.schema.ts @@ -1,9 +1,9 @@ import { makezTrimmedString, zUuidLike } from "shared"; import { z } from "zod"; -import { ConventionPoleEmploiUserAdvisorDto } from "../dto/PeConnect.dto"; -import { immersionPoleEmploiAdvisors } from "../dto/PeConnectAdvisor.dto"; +import { ConventionFtUserAdvisorDto } from "../dto/FtConnect.dto"; +import { immersionFranceTravailAdvisors } from "../dto/FtConnectAdvisor.dto"; -export const conventionPoleEmploiUserAdvisorDtoSchema: z.Schema = +export const conventionFranceTravailUserAdvisorDtoSchema: z.Schema = z.object({ advisor: z .object({ @@ -14,7 +14,7 @@ export const conventionPoleEmploiUserAdvisorDtoSchema: z.Schema; getUserAndAdvisors(accessToken: AccessTokenDto): Promise< | { - user: PeConnectUserDto; - advisors: PeConnectAdvisorDto[]; + user: FtConnectUserDto; + advisors: FtConnectAdvisorDto[]; } | undefined >; diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts b/back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts index 306015a739..92c0beb27d 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts +++ b/back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts @@ -15,16 +15,16 @@ import { createInMemoryUow } from "../../../unit-of-work/adapters/createInMemory import { TestUuidGenerator } from "../../../uuid-generator/adapters/UuidGeneratorImplementations"; import { CONVENTION_ID_DEFAULT_UUID, - InMemoryConventionPoleEmploiAdvisorRepository, -} from "../adapters/InMemoryConventionPoleEmploiAdvisorRepository"; -import { PeUserAndAdvisor } from "../dto/PeConnect.dto"; -import { conventionPoleEmploiUserAdvisorFromDto } from "../entities/ConventionPoleEmploiAdvisorEntity"; + InMemoryConventionFranceTravailAdvisorRepository, +} from "../adapters/InMemoryConventionFranceTravailAdvisorRepository"; +import { FtUserAndAdvisor } from "../dto/FtConnect.dto"; +import { conventionFranceTravailUserAdvisorFromDto } from "../entities/ConventionFranceTravailAdvisorEntity"; import { BindConventionToFederatedIdentity } from "./BindConventionToFederatedIdentity"; describe("AssociatePeConnectFederatedIdentity", () => { let associatePeConnectFederatedIdentity: BindConventionToFederatedIdentity; let uowPerformer: InMemoryUowPerformer; - let conventionPoleEmploiAdvisorRepo: InMemoryConventionPoleEmploiAdvisorRepository; + let conventionPoleEmploiAdvisorRepo: InMemoryConventionFranceTravailAdvisorRepository; let outboxRepo: InMemoryOutboxRepository; let createNewEvent: CreateNewEvent; beforeEach(() => { @@ -88,7 +88,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { it("should associate convention and federated identity if the federated identity match format", async () => { conventionPoleEmploiAdvisorRepo.setConventionPoleEmploiUsersAdvisor([ - conventionPoleEmploiUserAdvisorFromDto( + conventionFranceTravailUserAdvisorFromDto( userAdvisorDto, CONVENTION_ID_DEFAULT_UUID, ), @@ -115,7 +115,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { it("should save event PeConnectFederatedIdentityAssociated", async () => { conventionPoleEmploiAdvisorRepo.setConventionPoleEmploiUsersAdvisor([ - conventionPoleEmploiUserAdvisorFromDto( + conventionFranceTravailUserAdvisorFromDto( userAdvisorDto, CONVENTION_ID_DEFAULT_UUID, ), @@ -144,7 +144,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { it("without advisor", async () => { conventionPoleEmploiAdvisorRepo.setConventionPoleEmploiUsersAdvisor([ - conventionPoleEmploiUserAdvisorFromDto( + conventionFranceTravailUserAdvisorFromDto( { ...userAdvisorDto, advisor: undefined, @@ -202,7 +202,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { const conventionId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; -const userAdvisorDto: PeUserAndAdvisor = { +const userAdvisorDto: FtUserAndAdvisor = { advisor: { email: "elsa.oldenburg@pole-emploi.net", firstName: "Elsa", diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.ts b/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.ts index 058a004181..125a2ecbc4 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.ts +++ b/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.ts @@ -10,12 +10,12 @@ import { UnitOfWork } from "../../../unit-of-work/ports/UnitOfWork"; import { UnitOfWorkPerformer } from "../../../unit-of-work/ports/UnitOfWorkPerformer"; import { AccessTokenDto } from "../dto/AccessToken.dto"; import { - ConventionPeConnectFields, - PeUserAndAdvisor, + ConventionFtConnectFields, + FtUserAndAdvisor, toPartialConventionDtoWithPeIdentity, -} from "../dto/PeConnect.dto"; -import { chooseValidAdvisor } from "../entities/ConventionPoleEmploiAdvisorEntity"; -import { PeConnectGateway } from "../port/PeConnectGateway"; +} from "../dto/FtConnect.dto"; +import { chooseValidAdvisor } from "../entities/ConventionFranceTravailAdvisorEntity"; +import { FtConnectGateway } from "../port/FtConnectGateway"; export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalUseCase< string, @@ -23,13 +23,13 @@ export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalU > { protected inputSchema = z.string(); - readonly #peConnectGateway: PeConnectGateway; + readonly #peConnectGateway: FtConnectGateway; readonly #baseUrlForRedirect: AbsoluteUrl; constructor( uowPerformer: UnitOfWorkPerformer, - peConnectGateway: PeConnectGateway, + peConnectGateway: FtConnectGateway, baseUrlForRedirect: AbsoluteUrl, ) { super(uowPerformer); @@ -52,10 +52,10 @@ export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalU }); } - #makeRedirectUrl(fields: Partial): AbsoluteUrl { + #makeRedirectUrl(fields: Partial): AbsoluteUrl { return `${this.#baseUrlForRedirect}/${ frontRoutes.conventionImmersionRoute - }?${queryParamsAsString>(fields)}`; + }?${queryParamsAsString>(fields)}`; } async #onAccessToken(accessToken: AccessTokenDto, uow: UnitOfWork) { @@ -68,7 +68,7 @@ export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalU }); const { user, advisors } = userAndAdvisors; - const peUserAndAdvisor: PeUserAndAdvisor = { + const peUserAndAdvisor: FtUserAndAdvisor = { user, advisor: user.isJobseeker ? chooseValidAdvisor(user, advisors) diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.unit.test.ts b/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.unit.test.ts index 01c9524f2f..202e70d70e 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.unit.test.ts +++ b/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.unit.test.ts @@ -4,15 +4,15 @@ import { InMemoryUnitOfWork, createInMemoryUow, } from "../../../unit-of-work/adapters/createInMemoryUow"; -import { CONVENTION_ID_DEFAULT_UUID } from "../adapters/InMemoryConventionPoleEmploiAdvisorRepository"; +import { CONVENTION_ID_DEFAULT_UUID } from "../adapters/InMemoryConventionFranceTravailAdvisorRepository"; import { InMemoryPeConnectGateway } from "../adapters/pe-connect-gateway/InMemoryPeConnectGateway"; import { AccessTokenDto } from "../dto/AccessToken.dto"; import { - PeConnectAdvisorDto, - PeConnectImmersionAdvisorDto, -} from "../dto/PeConnectAdvisor.dto"; -import { PeConnectUserDto } from "../dto/PeConnectUser.dto"; -import { conventionPoleEmploiUserAdvisorFromDto } from "../entities/ConventionPoleEmploiAdvisorEntity"; + FtConnectAdvisorDto, + FtConnectImmersionAdvisorDto, +} from "../dto/FtConnectAdvisor.dto"; +import { FtConnectUserDto } from "../dto/FtConnectUserDto"; +import { conventionFranceTravailUserAdvisorFromDto } from "../entities/ConventionFranceTravailAdvisorEntity"; import { LinkPoleEmploiAdvisorAndRedirectToConvention } from "./LinkPoleEmploiAdvisorAndRedirectToConvention"; describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { @@ -49,7 +49,7 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { uow.conventionPoleEmploiAdvisorRepository .conventionPoleEmploiUsersAdvisors, [ - conventionPoleEmploiUserAdvisorFromDto( + conventionFranceTravailUserAdvisorFromDto( { advisor: pePlacementAdvisor, user: peJobseekerUser, @@ -75,7 +75,7 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { uow.conventionPoleEmploiAdvisorRepository .conventionPoleEmploiUsersAdvisors, [ - conventionPoleEmploiUserAdvisorFromDto( + conventionFranceTravailUserAdvisorFromDto( { advisor: peCapemploiAdvisor, user: peJobseekerUser, @@ -159,7 +159,7 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { uow.conventionPoleEmploiAdvisorRepository .conventionPoleEmploiUsersAdvisors, [ - conventionPoleEmploiUserAdvisorFromDto( + conventionFranceTravailUserAdvisorFromDto( { user: peJobseekerUser, advisor: undefined, @@ -171,14 +171,14 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { }); }); -const peJobseekerUser: PeConnectUserDto = { +const peJobseekerUser: FtConnectUserDto = { isJobseeker: true, firstName: "John", lastName: "Doe", peExternalId: "749dd14f-c82a-48b1-b1bb-fffc5467e4d4", email: "john.doe@gmail.com", }; -const peNotJobseekerUser: PeConnectUserDto = { +const peNotJobseekerUser: FtConnectUserDto = { isJobseeker: false, firstName: "John", lastName: "Doe", @@ -186,21 +186,21 @@ const peNotJobseekerUser: PeConnectUserDto = { email: "john.doe@gmail.com", }; -const pePlacementAdvisor: PeConnectImmersionAdvisorDto = { +const pePlacementAdvisor: FtConnectImmersionAdvisorDto = { email: "jane.smith@pole-emploi.net", lastName: "Smith", firstName: "Jane", type: "PLACEMENT", }; -const peIndemnisationAdvisor: PeConnectAdvisorDto = { +const peIndemnisationAdvisor: FtConnectAdvisorDto = { email: "017jean.dupont@pole-emploi.net", firstName: "Jean", lastName: "Dupont", type: "INDEMNISATION", }; -const peCapemploiAdvisor: PeConnectImmersionAdvisorDto = { +const peCapemploiAdvisor: FtConnectImmersionAdvisorDto = { email: "elsa.oldenburg@pole-emploi.net", lastName: "Oldenburg", firstName: "Elsa", diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.unit.test.ts b/back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.unit.test.ts index cfdef8c164..64bd0c1cb9 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.unit.test.ts +++ b/back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.unit.test.ts @@ -18,8 +18,8 @@ import { createInMemoryUow, } from "../../../unit-of-work/adapters/createInMemoryUow"; import { UuidV4Generator } from "../../../uuid-generator/adapters/UuidGeneratorImplementations"; -import { PeUserAndAdvisor } from "../dto/PeConnect.dto"; -import { PeConnectImmersionAdvisorDto } from "../dto/PeConnectAdvisor.dto"; +import { FtUserAndAdvisor } from "../dto/FtConnect.dto"; +import { FtConnectImmersionAdvisorDto } from "../dto/FtConnectAdvisor.dto"; import { NotifyPoleEmploiUserAdvisorOnConventionFullySigned } from "./NotifyPoleEmploiUserAdvisorOnConventionFullySigned"; describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { @@ -84,7 +84,7 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { { peExternalId: userAdvisorDto.user.peExternalId, advisor: userAdvisorDto.advisor, - _entityName: "ConventionPoleEmploiAdvisor", + _entityName: "ConventionFranceTravailAdvisor", conventionId, }, ], @@ -149,7 +149,7 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { { advisor: undefined, peExternalId: userAdvisorDto.user.peExternalId, - _entityName: "ConventionPoleEmploiAdvisor", + _entityName: "ConventionFranceTravailAdvisor", conventionId, }, ], @@ -165,13 +165,13 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { const conventionId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; -const advisor: PeConnectImmersionAdvisorDto = { +const advisor: FtConnectImmersionAdvisorDto = { email: "elsa.oldenburg@pole-emploi.net", firstName: "Elsa", lastName: "Oldenburg", type: "CAPEMPLOI", }; -const userAdvisorDto: PeUserAndAdvisor = { +const userAdvisorDto: FtUserAndAdvisor = { advisor, user: { peExternalId: userPeExternalId, diff --git a/back/src/domains/core/unit-of-work/adapters/createInMemoryUow.ts b/back/src/domains/core/unit-of-work/adapters/createInMemoryUow.ts index 832ae1f333..d1cc8982dd 100644 --- a/back/src/domains/core/unit-of-work/adapters/createInMemoryUow.ts +++ b/back/src/domains/core/unit-of-work/adapters/createInMemoryUow.ts @@ -19,7 +19,7 @@ import { InMemoryEstablishementMarketingRepository } from "../../../marketing/ad import { InMemoryApiConsumerRepository } from "../../api-consumer/adapters/InMemoryApiConsumerRepository"; import { InMemoryOngoingOAuthRepository } from "../../authentication/inclusion-connect/adapters/InMemoryOngoingOAuthRepository"; import { InMemoryUserRepository } from "../../authentication/inclusion-connect/adapters/InMemoryUserRepository"; -import { InMemoryConventionPoleEmploiAdvisorRepository } from "../../authentication/pe-connect/adapters/InMemoryConventionPoleEmploiAdvisorRepository"; +import { InMemoryConventionFranceTravailAdvisorRepository } from "../../authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository"; import { InMemoryOutboxQueries } from "../../events/adapters/InMemoryOutboxQueries"; import { InMemoryOutboxRepository } from "../../events/adapters/InMemoryOutboxRepository"; import { InMemoryFeatureFlagRepository } from "../../feature-flags/adapters/InMemoryFeatureFlagRepository"; @@ -55,7 +55,7 @@ export const createInMemoryUow = () => { conventionQueries, conventionRepository, conventionPoleEmploiAdvisorRepository: - new InMemoryConventionPoleEmploiAdvisorRepository(), + new InMemoryConventionFranceTravailAdvisorRepository(), conventionsToSyncRepository: new InMemoryConventionsToSyncRepository(), delegationContactRepository: new InMemoryDelegationContactRepository(), discussionRepository: new InMemoryDiscussionRepository(), diff --git a/back/src/domains/core/unit-of-work/adapters/createPgUow.ts b/back/src/domains/core/unit-of-work/adapters/createPgUow.ts index ce7a02ea8a..bd83e310b9 100644 --- a/back/src/domains/core/unit-of-work/adapters/createPgUow.ts +++ b/back/src/domains/core/unit-of-work/adapters/createPgUow.ts @@ -20,7 +20,7 @@ import { PgEstablishmentMarketingRepository } from "../../../marketing/adapters/ import { PgApiConsumerRepository } from "../../api-consumer/adapters/PgApiConsumerRepository"; import { PgOngoingOAuthRepository } from "../../authentication/inclusion-connect/adapters/PgOngoingOAuthRepository"; import { PgUserRepository } from "../../authentication/inclusion-connect/adapters/PgUserRepository"; -import { PgConventionPoleEmploiAdvisorRepository } from "../../authentication/pe-connect/adapters/PgConventionPoleEmploiAdvisorRepository"; +import { PgConventionFranceTravailAdvisorRepository } from "../../authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository"; import { PgOutboxQueries } from "../../events/adapters/PgOutboxQueries"; import { PgOutboxRepository } from "../../events/adapters/PgOutboxRepository"; import { PgFeatureFlagRepository } from "../../feature-flags/adapters/PgFeatureFlagRepository"; @@ -39,7 +39,7 @@ export const createPgUow = (transaction: KyselyDb): UnitOfWork => { apiConsumerRepository: new PgApiConsumerRepository(transaction), userRepository: new PgUserRepository(transaction), conventionPoleEmploiAdvisorRepository: - new PgConventionPoleEmploiAdvisorRepository(transaction), + new PgConventionFranceTravailAdvisorRepository(transaction), conventionExternalIdRepository: new PgConventionExternalIdRepository( transaction, ), diff --git a/back/src/domains/core/unit-of-work/ports/UnitOfWork.ts b/back/src/domains/core/unit-of-work/ports/UnitOfWork.ts index 812126b0a3..a5ea3407e5 100644 --- a/back/src/domains/core/unit-of-work/ports/UnitOfWork.ts +++ b/back/src/domains/core/unit-of-work/ports/UnitOfWork.ts @@ -19,7 +19,7 @@ import { EstablishmentMarketingRepository } from "../../../marketing/ports/Estab import { ApiConsumerRepository } from "../../api-consumer/ports/ApiConsumerRepository"; import { OngoingOAuthRepository } from "../../authentication/inclusion-connect/port/OngoingOAuthRepositiory"; import { UserRepository } from "../../authentication/inclusion-connect/port/UserRepository"; -import { ConventionPoleEmploiAdvisorRepository } from "../../authentication/pe-connect/port/ConventionPoleEmploiAdvisorRepository"; +import { ConventionFranceTravailAdvisorRepository } from "../../authentication/pe-connect/port/ConventionFranceTravailAdvisorRepository"; import { OutboxQueries } from "../../events/ports/OutboxQueries"; import { OutboxRepository } from "../../events/ports/OutboxRepository"; import { FeatureFlagRepository } from "../../feature-flags/ports/FeatureFlagRepository"; @@ -36,7 +36,7 @@ export type UnitOfWork = { apiConsumerRepository: ApiConsumerRepository; assessmentRepository: AssessmentRepository; conventionExternalIdRepository: ConventionExternalIdRepository; - conventionPoleEmploiAdvisorRepository: ConventionPoleEmploiAdvisorRepository; + conventionPoleEmploiAdvisorRepository: ConventionFranceTravailAdvisorRepository; conventionQueries: ConventionQueries; conventionRepository: ConventionRepository; conventionsToSyncRepository: ConventionsToSyncRepository; diff --git a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts index e3cf8d37d9..3e03b9fac3 100644 --- a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts +++ b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts @@ -5,7 +5,7 @@ import { AppConfig, } from "../../../../config/bootstrap/appConfig"; import { createPeFetchSharedClient } from "../../../../config/helpers/createFetchSharedClients"; -import { HttpFranceTravailGateway } from "../../../convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; +import { HttpFranceTravailGateway } from "../../../convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; diff --git a/back/src/scripts/triggerResyncOldConventionsToPe.ts b/back/src/scripts/triggerResyncOldConventionsToPe.ts index c8d8054e31..155f982819 100644 --- a/back/src/scripts/triggerResyncOldConventionsToPe.ts +++ b/back/src/scripts/triggerResyncOldConventionsToPe.ts @@ -1,7 +1,7 @@ import { AccessTokenResponse, AppConfig } from "../config/bootstrap/appConfig"; import { createGetPgPoolFn } from "../config/bootstrap/createGateways"; import { createPeAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; -import { HttpFranceTravailGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; +import { HttpFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { ResyncOldConventionsToPe } from "../domains/convention/use-cases/ResyncOldConventionsToPe"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; diff --git a/back/src/scripts/triggerUpdateLegacyRomeV3.ts b/back/src/scripts/triggerUpdateLegacyRomeV3.ts index 4ed1f064b0..5e199e2390 100644 --- a/back/src/scripts/triggerUpdateLegacyRomeV3.ts +++ b/back/src/scripts/triggerUpdateLegacyRomeV3.ts @@ -15,7 +15,7 @@ import { HttpRome3Gateway, makeRome3Routes, } from "../domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway"; -import { HttpFranceTravailGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; +import { HttpFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../domains/core/time-gateway/adapters/RealTimeGateway"; diff --git a/back/src/scripts/triggerUpdateRomeData.ts b/back/src/scripts/triggerUpdateRomeData.ts index b44abe416b..fd80c0d5b7 100644 --- a/back/src/scripts/triggerUpdateRomeData.ts +++ b/back/src/scripts/triggerUpdateRomeData.ts @@ -12,7 +12,7 @@ import { HttpRome4Gateway, makeRome4Routes, } from "../domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway"; -import { HttpFranceTravailGateway } from "../domains/convention/adapters/pole-emploi-gateway/HttpFranceTravailGateway"; +import { HttpFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../domains/core/time-gateway/adapters/RealTimeGateway"; diff --git a/back/src/utils/buildTestApp.ts b/back/src/utils/buildTestApp.ts index f2b98ba7dc..0232670dc0 100644 --- a/back/src/utils/buildTestApp.ts +++ b/back/src/utils/buildTestApp.ts @@ -3,7 +3,7 @@ import supertest from "supertest"; import { AppConfig } from "../config/bootstrap/appConfig"; import { Gateways } from "../config/bootstrap/createGateways"; import { createApp } from "../config/bootstrap/server"; -import { InMemoryFranceTravailGateway } from "../domains/convention/adapters/pole-emploi-gateway/InMemoryFranceTravailGateway"; +import { InMemoryFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/InMemoryFranceTravailGateway"; import { InMemoryAddressGateway } from "../domains/core/address/adapters/InMemoryAddressGateway"; import { InMemorySubscribersGateway } from "../domains/core/api-consumer/adapters/InMemorySubscribersGateway"; import { InMemoryOAuthGateway } from "../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/InMemoryOAuthGateway"; diff --git a/back/src/utils/logger.ts b/back/src/utils/logger.ts index a5d336f8e2..beb4001b0e 100644 --- a/back/src/utils/logger.ts +++ b/back/src/utils/logger.ts @@ -7,7 +7,7 @@ import { complement, isNil, pickBy } from "ramda"; import { AgencyId, ConventionId, - PeExternalId, + FtExternalId, SearchQueryParamsDto, SiretDto, } from "shared"; @@ -116,7 +116,7 @@ type LoggerParams = Partial<{ ftConnect: Partial<{ ftId: ConventionId; originalId: ConventionId; - peExternalId: PeExternalId; + peExternalId: FtExternalId; isJobSeeker: boolean; }>; reportContent: string; diff --git a/shared/src/errors/errors.ts b/shared/src/errors/errors.ts index 172604f398..fbb6014fa5 100644 --- a/shared/src/errors/errors.ts +++ b/shared/src/errors/errors.ts @@ -12,7 +12,7 @@ import type { } from "../convention/convention.dto"; import { DiscussionId } from "../discussion/discussion.dto"; import { Email } from "../email/email.dto"; -import { PeExternalId } from "../federatedIdentities/federatedIdentity.dto"; +import { FtExternalId } from "../federatedIdentities/federatedIdentity.dto"; import { ContactMethod } from "../formEstablishment/FormEstablishment.dto"; import { GroupSlug } from "../group/group.dto"; import { @@ -93,7 +93,7 @@ export const errors = { ), updateForbidden: ({ id }: { id: ConventionId }) => new ForbiddenError(`User is not allowed to update convention ${id}`), - missingFTAdvisor: ({ ftExternalId }: { ftExternalId: PeExternalId }) => + missingFTAdvisor: ({ ftExternalId }: { ftExternalId: FtExternalId }) => new NotFoundError( `Il n'y a pas de conseiller France Travail attaché à l'identifiant OAuth ftExternalId '${ftExternalId}'.`, ), diff --git a/shared/src/federatedIdentities/federatedIdentity.dto.ts b/shared/src/federatedIdentities/federatedIdentity.dto.ts index bc199dca10..de050317c1 100644 --- a/shared/src/federatedIdentities/federatedIdentity.dto.ts +++ b/shared/src/federatedIdentities/federatedIdentity.dto.ts @@ -12,7 +12,7 @@ export const federatedIdentityProviders = [ type GenericFederatedIdentity< Provider extends FederatedIdentityProvider, - T extends PeConnectToken | InclusionConnectJwt, + T extends FtConnectToken | InclusionConnectJwt, P = void, > = Provider extends "peConnect" ? { @@ -30,7 +30,7 @@ type GenericFederatedIdentity< export const authFailed = "AuthFailed"; export const notJobSeeker = "NotJobSeeker"; -export type PeExternalId = Flavor; +export type FtExternalId = Flavor; type PeConnectAdvisorForBeneficiary = { advisor: { @@ -41,14 +41,14 @@ type PeConnectAdvisorForBeneficiary = { }; }; -export type PeConnectToken = - | PeExternalId +export type FtConnectToken = + | FtExternalId | typeof authFailed | typeof notJobSeeker; export type PeConnectIdentity = GenericFederatedIdentity< "peConnect", - PeConnectToken, + FtConnectToken, PeConnectAdvisorForBeneficiary >; export const isPeConnectIdentity = ( From 02256acca7a2ee830867d613804912a62b1abbf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Burkard?= Date: Mon, 13 Jan 2025 18:29:30 +0100 Subject: [PATCH 3/5] replace PoleEmploi to FranceTravail in other places that do not affect DB --- .../addConventionAndSendMails.e2e.test.ts | 2 +- .../routers/convention/convention.e2e.test.ts | 2 +- .../peConnect/createPeConnectRouter.ts | 4 +- back/src/config/bootstrap/appConfig.ts | 34 ++--- back/src/config/bootstrap/createGateways.ts | 38 ++--- back/src/config/bootstrap/createUseCases.ts | 18 +-- .../helpers/createAxiosSharedClients.ts | 4 +- .../helpers/createFetchSharedClients.ts | 4 +- .../HttpPeAgenciesReferential.manual.test.ts | 8 +- .../HttpPeAgenciesReferential.ts | 8 +- .../HttpRome3Gateway.manual.test.ts | 8 +- .../HttpRome3Gateway.ts | 16 +-- .../HttpRome4Gateway.manual.test.ts | 8 +- .../HttpRome4Gateway.ts | 18 +-- .../agency/use-cases/AddAgency.unit.test.ts | 6 +- .../PgConventionQueries.integration.test.ts | 10 +- .../HttpFranceTravailGateway.manual.test.ts | 56 ++++---- .../HttpFranceTravailGateway.ts | 2 +- .../GetConventionsForApiConsumer.unit.test.ts | 42 +++--- ...onsToPe.ts => ResyncOldConventionsToFt.ts} | 14 +- .../ResyncOldConventionsToPe.unit.test.ts | 8 +- ...dcastToFranceTravailOnConventionUpdates.ts | 11 +- ...nceTravailOnConventionUpdates.unit.test.ts | 34 ++--- ...ifyAllActorsOfFinalConventionValidation.ts | 4 +- ...rsOfFinalConventionValidation.unit.test.ts | 6 +- .../NotifyNewConventionNeedsReview.ts | 4 +- ...otifyNewConventionNeedsReview.unit.test.ts | 8 +- .../NotifyToAgencyConventionSubmitted.ts | 2 +- ...fyToAgencyConventionSubmitted.unit.test.ts | 6 +- ...onventionFranceTravailAdvisorRepository.ts | 16 +-- ...availAdvisorRepository.integration.test.ts | 76 +++++----- ...onventionFranceTravailAdvisorRepository.ts | 4 +- .../HttpFtConnectGateway.manual.test.ts} | 22 +-- .../HttpFtConnectGateway.ts} | 44 +++--- .../InMemoryPeConnectGateway.ts | 0 .../ft-connect-gateway/ftConnectApi.dto.ts} | 22 ++- .../ft-connect-gateway/ftConnectApi.error.ts} | 2 +- .../ftConnectApi.routes.ts} | 28 ++-- .../ftConnectApi.schema.ts} | 24 ++-- .../dto/AccessToken.dto.ts | 0 .../dto/BearerToken.ts | 0 .../dto/FtConnect.dto.ts | 0 .../dto/FtConnectAdvisor.dto.ts | 0 .../dto/FtConnectUserDto.ts | 0 .../ConventionFranceTravailAdvisorEntity.ts | 0 .../port/AccessToken.schema.ts | 2 +- ...onventionFranceTravailAdvisorRepository.ts | 0 .../port/FtConnect.schema.ts | 0 .../port/FtConnectGateway.ts | 0 .../BindConventionToFederatedIdentity.ts | 2 +- ...ConventionToFederatedIdentity.unit.test.ts | 29 ++-- ...eTravailAdvisorAndRedirectToConvention.ts} | 12 +- ...visorAndRedirectToConvention.unit.test.ts} | 136 +++++++++--------- ...vailUserAdvisorOnConventionFullySigned.ts} | 4 +- ...visorOnConventionFullySigned.unit.test.ts} | 73 +++++----- .../domains/core/events/subscribeToEvents.ts | 26 ++-- .../adapters/createInMemoryUow.ts | 4 +- .../core/unit-of-work/adapters/createPgUow.ts | 4 +- .../core/unit-of-work/ports/UnitOfWork.ts | 4 +- .../HttpLaBonneBoiteGateway.manual.test.ts | 8 +- .../la-bonne-boite/HttpLaBonneBoiteGateway.ts | 12 +- .../triggerResyncOldConventionsToPe.ts | 16 +-- back/src/scripts/triggerUpdateLegacyRomeV3.ts | 8 +- back/src/scripts/triggerUpdateRomeData.ts | 8 +- back/src/utils/buildTestApp.ts | 4 +- front/src/assets/img/pole-emploi-logo.png | Bin 3465 -> 0 bytes 66 files changed, 498 insertions(+), 477 deletions(-) rename back/src/domains/convention/use-cases/{ResyncOldConventionsToPe.ts => ResyncOldConventionsToFt.ts} (92%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts (83%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts (71%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/adapters/PgConventionFranceTravailAdvisorRepository.ts (97%) rename back/src/domains/core/authentication/{pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.manual.test.ts => ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.manual.test.ts} (97%) rename back/src/domains/core/authentication/{pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts => ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.ts} (91%) rename back/src/domains/core/authentication/{pe-connect/adapters/pe-connect-gateway => ft-connect/adapters/ft-connect-gateway}/InMemoryPeConnectGateway.ts (100%) rename back/src/domains/core/authentication/{pe-connect/adapters/pe-connect-gateway/peConnectApi.dto.ts => ft-connect/adapters/ft-connect-gateway/ftConnectApi.dto.ts} (75%) rename back/src/domains/core/authentication/{pe-connect/adapters/pe-connect-gateway/peConnectApi.error.ts => ft-connect/adapters/ft-connect-gateway/ftConnectApi.error.ts} (98%) rename back/src/domains/core/authentication/{pe-connect/adapters/pe-connect-gateway/peConnectApi.routes.ts => ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes.ts} (83%) rename back/src/domains/core/authentication/{pe-connect/adapters/pe-connect-gateway/peConnectApi.schema.ts => ft-connect/adapters/ft-connect-gateway/ftConnectApi.schema.ts} (71%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/dto/AccessToken.dto.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/dto/BearerToken.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/dto/FtConnect.dto.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/dto/FtConnectAdvisor.dto.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/dto/FtConnectUserDto.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/entities/ConventionFranceTravailAdvisorEntity.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/port/AccessToken.schema.ts (78%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/port/ConventionFranceTravailAdvisorRepository.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/port/FtConnect.schema.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/port/FtConnectGateway.ts (100%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/use-cases/BindConventionToFederatedIdentity.ts (95%) rename back/src/domains/core/authentication/{pe-connect => ft-connect}/use-cases/BindConventionToFederatedIdentity.unit.test.ts (85%) rename back/src/domains/core/authentication/{pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.ts => ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.ts} (84%) rename back/src/domains/core/authentication/{pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.unit.test.ts => ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.unit.test.ts} (51%) rename back/src/domains/core/authentication/{pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.ts => ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.ts} (94%) rename back/src/domains/core/authentication/{pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.unit.test.ts => ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.unit.test.ts} (76%) delete mode 100644 front/src/assets/img/pole-emploi-logo.png diff --git a/back/src/adapters/primary/routers/convention/addConventionAndSendMails.e2e.test.ts b/back/src/adapters/primary/routers/convention/addConventionAndSendMails.e2e.test.ts index 31223f4b2f..8d4a22ba9f 100644 --- a/back/src/adapters/primary/routers/convention/addConventionAndSendMails.e2e.test.ts +++ b/back/src/adapters/primary/routers/convention/addConventionAndSendMails.e2e.test.ts @@ -221,7 +221,7 @@ describe("Add Convention Notifications, then checks the mails are sent (trigerre await processEventsForEmailToBeSent(eventCrawler); expect(inMemoryUow.notificationRepository.notifications).toHaveLength(3); - const peNotification = gateways.poleEmploiGateway.notifications[0]; + const peNotification = gateways.franceTravailGateway.notifications[0]; expect(peNotification.id).toBe(externalId); expectToEqual(peNotification.statut, "DEMANDE_A_SIGNER"); expect(peNotification.originalId).toBe(convention.id); diff --git a/back/src/adapters/primary/routers/convention/convention.e2e.test.ts b/back/src/adapters/primary/routers/convention/convention.e2e.test.ts index 3949a7f8fa..aed241f668 100644 --- a/back/src/adapters/primary/routers/convention/convention.e2e.test.ts +++ b/back/src/adapters/primary/routers/convention/convention.e2e.test.ts @@ -544,7 +544,7 @@ describe("convention e2e", () => { await eventCrawler.processNewEvents(); - expectToEqual(gateways.poleEmploiGateway.notifications, [ + expectToEqual(gateways.franceTravailGateway.notifications, [ { activitesObservees: convention.immersionActivities, adresseImmersion: convention.immersionAddress, diff --git a/back/src/adapters/primary/routers/peConnect/createPeConnectRouter.ts b/back/src/adapters/primary/routers/peConnect/createPeConnectRouter.ts index 9ed2c0d6c3..fe266f490c 100644 --- a/back/src/adapters/primary/routers/peConnect/createPeConnectRouter.ts +++ b/back/src/adapters/primary/routers/peConnect/createPeConnectRouter.ts @@ -2,7 +2,7 @@ import { Router } from "express"; import { ManagedRedirectError, loginPeConnect, peConnect } from "shared"; import { AppDependencies } from "../../../../config/bootstrap/createAppDependencies"; import { sendRedirectResponseWithManagedErrors } from "../../../../config/helpers/sendRedirectResponseWithManagedErrors"; -import { makePeConnectLoginPageUrl } from "../../../../domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes"; +import { makePeConnectLoginPageUrl } from "../../../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes"; export const createPeConnectRouter = (deps: AppDependencies) => { const peConnectRouter = Router({ mergeParams: true }); @@ -26,7 +26,7 @@ export const createPeConnectRouter = (deps: AppDependencies) => { if (!req?.query?.code) throw new ManagedRedirectError("peConnectNoAuthorisation"); - return deps.useCases.linkPoleEmploiAdvisorAndRedirectToConvention.execute( + return deps.useCases.linkFranceTravailAdvisorAndRedirectToConvention.execute( req.query.code as string, ); }, diff --git a/back/src/config/bootstrap/appConfig.ts b/back/src/config/bootstrap/appConfig.ts index 405791238b..45625da965 100644 --- a/back/src/config/bootstrap/appConfig.ts +++ b/back/src/config/bootstrap/appConfig.ts @@ -17,9 +17,9 @@ import { S3Params } from "../../domains/core/file-storage/adapters/S3DocumentGat export type AccessTokenConfig = { immersionFacileBaseUrl: AbsoluteUrl; - peApiUrl: AbsoluteUrl; - peAuthCandidatUrl: AbsoluteUrl; - peEnterpriseUrl: AbsoluteUrl; + ftApiUrl: AbsoluteUrl; + ftAuthCandidatUrl: AbsoluteUrl; + ftEnterpriseUrl: AbsoluteUrl; clientId: string; clientSecret: string; }; @@ -445,18 +445,18 @@ export class AppConfig { }); } - public get peApiUrl(): AbsoluteUrl { + public get ftApiUrl(): AbsoluteUrl { return this.#throwIfNotAbsoluteUrl("POLE_EMPLOI_API_URL"); } - public get peAuthCandidatUrl(): AbsoluteUrl { + public get ftAuthCandidatUrl(): AbsoluteUrl { return this.#throwIfNotAbsoluteUrl( "POLE_EMPLOI_AUTHENTIFICATION_CANDIDAT_URL", ); } - // == PE Connect gateway == - public get peConnectGateway() { + // == France Travail Connect gateway == + public get ftConnectGateway() { return this.#throwIfNotInArray({ variableName: "PE_CONNECT_GATEWAY", authorizedValues: ["IN_MEMORY", "HTTPS"], @@ -464,7 +464,7 @@ export class AppConfig { }); } - public get peEnterpriseUrl(): AbsoluteUrl { + public get ftEnterpriseUrl(): AbsoluteUrl { return this.#throwIfNotAbsoluteUrl("POLE_EMPLOI_ENTREPRISE_URL"); } @@ -472,26 +472,26 @@ export class AppConfig { return this.#throwIfNotDefinedOrDefault("DATABASE_URL"); } - public get poleEmploiAccessTokenConfig(): AccessTokenConfig { + public get franceTravailAccessTokenConfig(): AccessTokenConfig { return { immersionFacileBaseUrl: this.immersionFacileBaseUrl, - peApiUrl: this.peApiUrl, - peAuthCandidatUrl: this.peAuthCandidatUrl, - peEnterpriseUrl: this.peEnterpriseUrl, - clientId: this.poleEmploiClientId, - clientSecret: this.poleEmploiClientSecret, + ftApiUrl: this.ftApiUrl, + ftAuthCandidatUrl: this.ftAuthCandidatUrl, + ftEnterpriseUrl: this.ftEnterpriseUrl, + clientId: this.franceTravailClientId, + clientSecret: this.franceTravailClientSecret, }; } - public get poleEmploiClientId() { + public get franceTravailClientId() { return this.#throwIfNotDefinedOrDefault("POLE_EMPLOI_CLIENT_ID"); } - public get poleEmploiClientSecret() { + public get franceTravailClientSecret() { return this.#throwIfNotDefinedOrDefault("POLE_EMPLOI_CLIENT_SECRET"); } - public get poleEmploiGateway() { + public get franceTravailGateway() { return this.#throwIfNotInArray({ variableName: "POLE_EMPLOI_GATEWAY", authorizedValues: ["IN_MEMORY", "HTTPS"], diff --git a/back/src/config/bootstrap/createGateways.ts b/back/src/config/bootstrap/createGateways.ts index cf947b4f4d..84b2267752 100644 --- a/back/src/config/bootstrap/createGateways.ts +++ b/back/src/config/bootstrap/createGateways.ts @@ -12,15 +12,15 @@ import { addressesExternalRoutes } from "../../domains/core/address/adapters/Htt import { InMemoryAddressGateway } from "../../domains/core/address/adapters/InMemoryAddressGateway"; import { HttpSubscribersGateway } from "../../domains/core/api-consumer/adapters/HttpSubscribersGateway"; import { InMemorySubscribersGateway } from "../../domains/core/api-consumer/adapters/InMemorySubscribersGateway"; +import { HttpFtConnectGateway } from "../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway"; +import { InMemoryPeConnectGateway } from "../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway"; +import { makePeConnectExternalRoutes } from "../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes"; +import { FtConnectGateway } from "../../domains/core/authentication/ft-connect/port/FtConnectGateway"; import { HttpOAuthGateway } from "../../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/HttpOAuthGateway"; import { InMemoryOAuthGateway } from "../../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/InMemoryOAuthGateway"; import { makeInclusionConnectRoutes } from "../../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/inclusionConnect.routes"; import { makeProConnectRoutes } from "../../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/proConnect.routes"; import { OAuthGateway } from "../../domains/core/authentication/inclusion-connect/port/OAuthGateway"; -import { HttpPeConnectGateway } from "../../domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway"; -import { InMemoryPeConnectGateway } from "../../domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway"; -import { makePeConnectExternalRoutes } from "../../domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes"; -import { FtConnectGateway } from "../../domains/core/authentication/pe-connect/port/FtConnectGateway"; import { InMemoryCachingGateway } from "../../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { MetabaseDashboardGateway } from "../../domains/core/dashboard/adapters/MetabaseDashboardGateway"; import { StubDashboardGateway } from "../../domains/core/dashboard/adapters/StubDashboardGateway"; @@ -168,19 +168,19 @@ export const createGateways = async ( ? new CustomTimeGateway() : new RealTimeGateway(); - const poleEmploiGateway = - config.poleEmploiGateway === "HTTPS" + const franceTravailGateway = + config.franceTravailGateway === "HTTPS" ? new HttpFranceTravailGateway( createLegacyAxiosHttpClientForExternalAPIs({ partnerName: partnerNames.franceTravailApi, - routes: createFranceTravailRoutes(config.peApiUrl), + routes: createFranceTravailRoutes(config.ftApiUrl), }), new InMemoryCachingGateway( timeGateway, "expires_in", ), - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, config.envType === "dev", ) @@ -189,19 +189,19 @@ export const createGateways = async ( const { withCache, disconnectCache } = await getWithCache(config); const peConnectGateway: FtConnectGateway = - config.peConnectGateway === "HTTPS" - ? new HttpPeConnectGateway( + config.ftConnectGateway === "HTTPS" + ? new HttpFtConnectGateway( createLegacyAxiosHttpClientForExternalAPIs({ partnerName: partnerNames.franceTravailConnect, routes: makePeConnectExternalRoutes({ - peApiUrl: config.peApiUrl, - peAuthCandidatUrl: config.peAuthCandidatUrl, + peApiUrl: config.ftApiUrl, + peAuthCandidatUrl: config.ftAuthCandidatUrl, }), }), { immersionFacileBaseUrl: config.immersionFacileBaseUrl, - poleEmploiClientId: config.poleEmploiClientId, - poleEmploiClientSecret: config.poleEmploiClientSecret, + franceTravailClientId: config.franceTravailClientId, + franceTravailClientSecret: config.franceTravailClientSecret, }, ) : new InMemoryPeConnectGateway(); @@ -393,10 +393,10 @@ export const createGateways = async ( ? new HttpLaBonneBoiteGateway( createFetchHttpClientForExternalAPIs({ partnerName: partnerNames.laBonneBoite, - routes: createLbbRoutes(config.peApiUrl), + routes: createLbbRoutes(config.ftApiUrl), }), - poleEmploiGateway, - config.poleEmploiClientId, + franceTravailGateway, + config.franceTravailClientId, ) : new InMemoryLaBonneBoiteGateway(), subscribersGateway: @@ -413,7 +413,7 @@ export const createGateways = async ( : new InMemoryPassEmploiGateway(), pdfGeneratorGateway: createPdfGeneratorGateway(), peConnectGateway, - poleEmploiGateway, + franceTravailGateway, timeGateway, establishmentMarketingGateway: config.establishmentMarketingGateway === "BREVO" diff --git a/back/src/config/bootstrap/createUseCases.ts b/back/src/config/bootstrap/createUseCases.ts index 5ca9b76fd8..5a833898d6 100644 --- a/back/src/config/bootstrap/createUseCases.ts +++ b/back/src/config/bootstrap/createUseCases.ts @@ -60,12 +60,12 @@ import { DeleteSubscription } from "../../domains/core/api-consumer/use-cases/De import { makeListActiveSubscriptions } from "../../domains/core/api-consumer/use-cases/ListActiveSubscriptions"; import { SaveApiConsumer } from "../../domains/core/api-consumer/use-cases/SaveApiConsumer"; import { SubscribeToWebhook } from "../../domains/core/api-consumer/use-cases/SubscribeToWebhook"; +import { BindConventionToFederatedIdentity } from "../../domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity"; +import { LinkFranceTravailAdvisorAndRedirectToConvention } from "../../domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention"; +import { NotifyFranceTravailUserAdvisorOnConventionFullySigned } from "../../domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned"; import { AuthenticateWithInclusionCode } from "../../domains/core/authentication/inclusion-connect/use-cases/AuthenticateWithInclusionCode"; import { makeGetInclusionConnectLogoutUrl } from "../../domains/core/authentication/inclusion-connect/use-cases/GetInclusionConnectLogoutUrl"; import { InitiateInclusionConnect } from "../../domains/core/authentication/inclusion-connect/use-cases/InitiateInclusionConnect"; -import { BindConventionToFederatedIdentity } from "../../domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity"; -import { LinkPoleEmploiAdvisorAndRedirectToConvention } from "../../domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention"; -import { NotifyPoleEmploiUserAdvisorOnConventionFullySigned } from "../../domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned"; import { DashboardGateway } from "../../domains/core/dashboard/port/DashboardGateway"; import { GetDashboardUrl } from "../../domains/core/dashboard/useCases/GetDashboardUrl"; import { ValidateEmail } from "../../domains/core/email-validation/use-cases/ValidateEmail"; @@ -278,8 +278,8 @@ export const createUseCases = ( getConventionsForApiConsumer: new GetConventionsForApiConsumer( uowPerformer, ), - linkPoleEmploiAdvisorAndRedirectToConvention: - new LinkPoleEmploiAdvisorAndRedirectToConvention( + linkFranceTravailAdvisorAndRedirectToConvention: + new LinkFranceTravailAdvisorAndRedirectToConvention( uowPerformer, gateways.peConnectGateway, config.immersionFacileBaseUrl, @@ -535,8 +535,8 @@ export const createUseCases = ( saveNotificationAndRelatedEvent, config.immersionFacileDomain, ), - notifyPoleEmploiUserAdvisorOnConventionFullySigned: - new NotifyPoleEmploiUserAdvisorOnConventionFullySigned( + notifyFranceTravailUserAdvisorOnConventionFullySigned: + new NotifyFranceTravailUserAdvisorOnConventionFullySigned( uowPerformer, saveNotificationAndRelatedEvent, generateConventionMagicLinkUrl, @@ -551,10 +551,10 @@ export const createUseCases = ( uowPerformer, saveNotificationAndRelatedEvent, ), - broadcastToPoleEmploiOnConventionUpdates: + broadcastToFranceTravailOnConventionUpdates: new BroadcastToFranceTravailOnConventionUpdates( uowPerformer, - gateways.poleEmploiGateway, + gateways.franceTravailGateway, gateways.timeGateway, { resyncMode: false }, ), diff --git a/back/src/config/helpers/createAxiosSharedClients.ts b/back/src/config/helpers/createAxiosSharedClients.ts index 56c5b5b538..6e1ac4020c 100644 --- a/back/src/config/helpers/createAxiosSharedClients.ts +++ b/back/src/config/helpers/createAxiosSharedClients.ts @@ -7,6 +7,6 @@ export const createPeAxiosSharedClient = ( config: AppConfig, axiosInstance = axios.create({ timeout: config.externalAxiosTimeout }), ) => { - const poleEmploiRoutes = createFranceTravailRoutes(config.peApiUrl); - return createAxiosSharedClient(poleEmploiRoutes, axiosInstance); + const franceTravailRoutes = createFranceTravailRoutes(config.ftApiUrl); + return createAxiosSharedClient(franceTravailRoutes, axiosInstance); }; diff --git a/back/src/config/helpers/createFetchSharedClients.ts b/back/src/config/helpers/createFetchSharedClients.ts index 93589e1fd7..9017b54f0d 100644 --- a/back/src/config/helpers/createFetchSharedClients.ts +++ b/back/src/config/helpers/createFetchSharedClients.ts @@ -3,6 +3,6 @@ import { createFranceTravailRoutes } from "../../domains/convention/adapters/fra import { AppConfig } from "../bootstrap/appConfig"; export const createPeFetchSharedClient = (config: AppConfig) => { - const poleEmploiRoutes = createFranceTravailRoutes(config.peApiUrl); - return createFetchSharedClient(poleEmploiRoutes, fetch); + const franceTravailRoutes = createFranceTravailRoutes(config.ftApiUrl); + return createFetchSharedClient(franceTravailRoutes, fetch); }; diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts index 05225d3bd0..7062e20866 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts @@ -13,18 +13,18 @@ const config = AppConfig.createFromEnv(); const axiosHttpClient = createPeAxiosSharedClient(config); const referencielAgencesPE = new HttpPeAgenciesReferential( - config.peApiUrl, + config.ftApiUrl, new HttpFranceTravailGateway( axiosHttpClient, new InMemoryCachingGateway( new RealTimeGateway(), "expires_in", ), - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ), - config.poleEmploiClientId, + config.franceTravailClientId, ); describe("HttpReferencielAgencesPe", () => { diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts index 446777f1d0..59aee38dac 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts @@ -17,16 +17,16 @@ export class HttpPeAgenciesReferential implements PeAgenciesReferential { constructor( peApiUrl: AbsoluteUrl, - private readonly poleEmploiGateway: FranceTravailGateway, - private readonly poleEmploiClientId: string, + private readonly franceTravailGateway: FranceTravailGateway, + private readonly franceTravailClientId: string, ) { this.#axios = createAxiosInstance(logger); this.#referencielAgenceUrl = `${peApiUrl}/partenaire/referentielagences/v1/agences`; } public async getPeAgencies(): Promise { - const accessToken = await this.poleEmploiGateway.getAccessToken( - `application_${this.poleEmploiClientId} api_referentielagencesv1 organisationpe`, + const accessToken = await this.franceTravailGateway.getAccessToken( + `application_${this.franceTravailClientId} api_referentielagencesv1 organisationpe`, ); if (!accessToken) throw new Error("No access token"); diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts index 76670fa001..fdce038c84 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts @@ -23,15 +23,15 @@ describe("HttpRome3Gateway", () => { const franceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ); const httpRome3Gateway = new HttpRome3Gateway( - createAxiosSharedClient(makeRome3Routes(config.peApiUrl), axios), + createAxiosSharedClient(makeRome3Routes(config.ftApiUrl), axios), franceTravailGateway, - config.poleEmploiClientId, + config.franceTravailClientId, ); it("fetches the updated list of appellations, with their rome code (all in ROME v3)", async () => { diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts index b19a2a3eec..1a19573b2b 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts @@ -35,25 +35,25 @@ export const makeRome3Routes = (peApiUrl: AbsoluteUrl) => export class HttpRome3Gateway implements Rome3Gateway { #httpClient: HttpClient; - #poleEmploiGateway: FranceTravailGateway; - #poleEmploiClientId: string; + #franceTravailGateway: FranceTravailGateway; + #franceTravailClientId: string; constructor( httpClient: HttpClient, - poleEmploiGateway: FranceTravailGateway, - poleEmploiClientId: string, + franceTravailGateway: FranceTravailGateway, + franceTravailClientId: string, ) { this.#httpClient = httpClient; - this.#poleEmploiGateway = poleEmploiGateway; - this.#poleEmploiClientId = poleEmploiClientId; + this.#franceTravailGateway = franceTravailGateway; + this.#franceTravailClientId = franceTravailClientId; } #getScope() { - return `application_${this.#poleEmploiClientId} api_romev1 nomenclatureRome`; + return `application_${this.#franceTravailClientId} api_romev1 nomenclatureRome`; } public async getAllAppellations(): Promise { - const { access_token } = await this.#poleEmploiGateway.getAccessToken( + const { access_token } = await this.#franceTravailGateway.getAccessToken( this.#getScope(), ); diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts index df38ff33e6..e075eba3e7 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts @@ -23,15 +23,15 @@ describe("HttpRome4Gateway", () => { const franceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ); const httpRome4Gateway = new HttpRome4Gateway( - createAxiosSharedClient(makeRome4Routes(config.peApiUrl), axios), + createAxiosSharedClient(makeRome4Routes(config.ftApiUrl), axios), franceTravailGateway, - config.poleEmploiClientId, + config.franceTravailClientId, ); it("fetches the updated list of romes", async () => { diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts index 3540d0be1c..b141ef85e0 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts +++ b/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts @@ -50,25 +50,25 @@ export const makeRome4Routes = (peApiUrl: AbsoluteUrl) => export class HttpRome4Gateway implements Rome4Gateway { #httpClient: HttpClient; - #poleEmploiGateway: FranceTravailGateway; - #poleEmploiClientId: string; + #franceTravailGateway: FranceTravailGateway; + #franceTravailClientId: string; constructor( httpClient: HttpClient, - poleEmploiGateway: FranceTravailGateway, - poleEmploiClientId: string, + franceTravailGateway: FranceTravailGateway, + franceTravailClientId: string, ) { this.#httpClient = httpClient; - this.#poleEmploiGateway = poleEmploiGateway; - this.#poleEmploiClientId = poleEmploiClientId; + this.#franceTravailGateway = franceTravailGateway; + this.#franceTravailClientId = franceTravailClientId; } #getScope() { - return `application_${this.#poleEmploiClientId} api_rome-metiersv1 nomenclatureRome`; + return `application_${this.#franceTravailClientId} api_rome-metiersv1 nomenclatureRome`; } public async getAllRomes(): Promise { - const { access_token } = await this.#poleEmploiGateway.getAccessToken( + const { access_token } = await this.#franceTravailGateway.getAccessToken( this.#getScope(), ); @@ -83,7 +83,7 @@ export class HttpRome4Gateway implements Rome4Gateway { } public async getAllAppellations(): Promise { - const { access_token } = await this.#poleEmploiGateway.getAccessToken( + const { access_token } = await this.#franceTravailGateway.getAccessToken( this.#getScope(), ); return this.#httpClient diff --git a/back/src/domains/agency/use-cases/AddAgency.unit.test.ts b/back/src/domains/agency/use-cases/AddAgency.unit.test.ts index 657dd2380d..0fb75facfc 100644 --- a/back/src/domains/agency/use-cases/AddAgency.unit.test.ts +++ b/back/src/domains/agency/use-cases/AddAgency.unit.test.ts @@ -209,14 +209,14 @@ describe("AddAgency use case", () => { }); it("uses default questionnaire url when none is provided", async () => { - const poleEmploiParis: CreateAgencyDto = { + const franceTravailParis: CreateAgencyDto = { ...createParisMissionLocaleParams, }; uow.agencyRepository.agencies = []; uow.userRepository.users = []; - await addAgency.execute(poleEmploiParis); + await addAgency.execute(franceTravailParis); const newValidator: User = { id: uuids[0], @@ -238,7 +238,7 @@ describe("AddAgency use case", () => { expectToEqual(uow.agencyRepository.agencies, [ toAgencyWithRights( { - ...poleEmploiParis, + ...franceTravailParis, counsellorEmails: [], validatorEmails: [], status: "needsReview", diff --git a/back/src/domains/convention/adapters/PgConventionQueries.integration.test.ts b/back/src/domains/convention/adapters/PgConventionQueries.integration.test.ts index 893a03cbfc..ddb1dcc59d 100644 --- a/back/src/domains/convention/adapters/PgConventionQueries.integration.test.ts +++ b/back/src/domains/convention/adapters/PgConventionQueries.integration.test.ts @@ -208,11 +208,11 @@ describe("Pg implementation of ConventionQueries", () => { }); describe("PG implementation of method getConventionsByScope", () => { - let poleEmploiConvention: ConventionReadDto; + let franceTravailConvention: ConventionReadDto; let cciConvention: ConventionReadDto; beforeEach(async () => { - poleEmploiConvention = await insertAgencyAndConvention({ + franceTravailConvention = await insertAgencyAndConvention({ conventionId: conventionIdA, agencyId: agencyIdA, agencyName: "agency PE", @@ -283,7 +283,7 @@ describe("Pg implementation of ConventionQueries", () => { filters: {}, }); - expectToEqual(result, [cciConvention, poleEmploiConvention]); + expectToEqual(result, [cciConvention, franceTravailConvention]); }); it("return conventions matching agencyKinds and status", async () => { @@ -297,7 +297,7 @@ describe("Pg implementation of ConventionQueries", () => { }, }); - expectToEqual(result, [poleEmploiConvention]); + expectToEqual(result, [franceTravailConvention]); }); }); @@ -323,7 +323,7 @@ describe("Pg implementation of ConventionQueries", () => { filters: {}, }); - expectToEqual(result, [cciConvention, poleEmploiConvention]); + expectToEqual(result, [cciConvention, franceTravailConvention]); }); }); diff --git a/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts b/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts index 8b5c9d8c39..2cd648e0fb 100644 --- a/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts +++ b/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts @@ -19,7 +19,7 @@ import { import { createFranceTravailRoutes } from "./FrancetTravailRoutes"; import { HttpFranceTravailGateway } from "./HttpFranceTravailGateway"; -describe("HttpPoleEmploiGateway", () => { +describe("HttpFranceTravailGateway", () => { it.each([ { testMessage: "the email exists in PE but the dateNaissance is wrong", @@ -57,18 +57,20 @@ describe("HttpPoleEmploiGateway", () => { ] satisfies TestCase[])( "Should have status $expected.status when $testMessage", async ({ fields, expected }) => { - const httpPoleEmploiGateway = new HttpFranceTravailGateway( + const httpFranceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ); - const response = await httpPoleEmploiGateway.notifyOnConventionUpdated({ - ...peConvention, - ...fields, - }); + const response = await httpFranceTravailGateway.notifyOnConventionUpdated( + { + ...ftConvention, + ...fields, + }, + ); if (isBroadcastResponseOk(response) || isBroadcastResponseOk(expected)) throw new Error("Should not occurs"); @@ -110,18 +112,20 @@ describe("HttpPoleEmploiGateway", () => { ] satisfies TestCase[])( "Should have status $expected.status when $testMessage", async ({ fields, expected }) => { - const httpPoleEmploiGateway = new HttpFranceTravailGateway( + const httpFranceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ); - const response = await httpPoleEmploiGateway.notifyOnConventionUpdated({ - ...peConvention, - ...fields, - }); + const response = await httpFranceTravailGateway.notifyOnConventionUpdated( + { + ...ftConvention, + ...fields, + }, + ); if (!isBroadcastResponseOk(expected)) throw new Error("Should not occurs"); @@ -145,14 +149,14 @@ describe("HttpPoleEmploiGateway", () => { const accessTokenConfig: AccessTokenConfig = { immersionFacileBaseUrl: "https://", - peApiUrl, - peAuthCandidatUrl: "https://", - peEnterpriseUrl, + ftApiUrl: peApiUrl, + ftAuthCandidatUrl: "https://", + ftEnterpriseUrl: peEnterpriseUrl, clientId: "", clientSecret: "", }; - const poleEmploiGateway = new HttpFranceTravailGateway( + const franceTravailGateway = new HttpFranceTravailGateway( httpClient, cachingGateway, peApiUrl, @@ -171,7 +175,7 @@ describe("HttpPoleEmploiGateway", () => { .timeout(); const response = - await poleEmploiGateway.notifyOnConventionUpdated(peConvention); + await franceTravailGateway.notifyOnConventionUpdated(ftConvention); if (isBroadcastResponseOk(response)) throw new Error("PE broadcast OK must not occurs"); @@ -198,14 +202,14 @@ describe("HttpPoleEmploiGateway", () => { const accessTokenConfig: AccessTokenConfig = { immersionFacileBaseUrl: "https://", - peApiUrl, - peAuthCandidatUrl: "https://", - peEnterpriseUrl, + ftApiUrl: peApiUrl, + ftAuthCandidatUrl: "https://", + ftEnterpriseUrl: peEnterpriseUrl, clientId: "", clientSecret: "", }; - const poleEmploiGateway = new HttpFranceTravailGateway( + const franceTravailGateway = new HttpFranceTravailGateway( httpClient, cachingGateway, peApiUrl, @@ -224,7 +228,7 @@ describe("HttpPoleEmploiGateway", () => { .reply(204, { message: "yolo" }); const response = - await poleEmploiGateway.notifyOnConventionUpdated(peConvention); + await franceTravailGateway.notifyOnConventionUpdated(ftConvention); if (isBroadcastResponseOk(response)) throw new Error("PE broadcast OK must not occurs"); @@ -245,7 +249,7 @@ const cachingGateway = new InMemoryCachingGateway( "expires_in", ); -const peConvention: FranceTravailConvention = { +const ftConvention: FranceTravailConvention = { activitesObservees: "Tenir une conversation client", originalId: "31bd445d-54fa-4b53-8875-0ada1673fe3c", adresseImmersion: "5 avenue du Général", diff --git a/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.ts b/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.ts index 102bf3ddcf..7a47f8e56d 100644 --- a/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.ts +++ b/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.ts @@ -90,7 +90,7 @@ export class HttpFranceTravailGateway implements FranceTravailGateway { this.#commonlimiter.schedule(() => createAxiosInstance(logger) .post( - `${this.#accessTokenConfig.peEnterpriseUrl}/connexion/oauth2/access_token?realm=%2Fpartenaire`, + `${this.#accessTokenConfig.ftEnterpriseUrl}/connexion/oauth2/access_token?realm=%2Fpartenaire`, querystring.stringify({ grant_type: "client_credentials", client_id: this.#accessTokenConfig.clientId, diff --git a/back/src/domains/convention/use-cases/GetConventionsForApiConsumer.unit.test.ts b/back/src/domains/convention/use-cases/GetConventionsForApiConsumer.unit.test.ts index 24f1732382..10d5055bbe 100644 --- a/back/src/domains/convention/use-cases/GetConventionsForApiConsumer.unit.test.ts +++ b/back/src/domains/convention/use-cases/GetConventionsForApiConsumer.unit.test.ts @@ -15,8 +15,8 @@ import { import { GetConventionsForApiConsumer } from "./GetConventionsForApiConsumer"; describe("Get Conventions for ApiConsumer", () => { - const agencyPoleEmploi = new AgencyDtoBuilder() - .withId("agency-pole-emploi") + const agencyFranceTravail = new AgencyDtoBuilder() + .withId("agency-france-travail") .withKind("pole-emploi") .build(); @@ -25,9 +25,9 @@ describe("Get Conventions for ApiConsumer", () => { .withKind("mission-locale") .build(); - const conventionPoleEmploi = new ConventionDtoBuilder() - .withId("convention-pole-emploi-id") - .withAgencyId(agencyPoleEmploi.id) + const conventionFranceTravail = new ConventionDtoBuilder() + .withId("convention-france-travail-id") + .withAgencyId(agencyFranceTravail.id) .withStatus("IN_REVIEW") .build(); @@ -42,11 +42,11 @@ describe("Get Conventions for ApiConsumer", () => { beforeEach(() => { uow = createInMemoryUow(); uow.agencyRepository.agencies = [ - toAgencyWithRights(agencyPoleEmploi), + toAgencyWithRights(agencyFranceTravail), toAgencyWithRights(agencyMissionLocale), ]; uow.conventionRepository.setConventions([ - conventionPoleEmploi, + conventionFranceTravail, conventionMissionLocale, ]); getConventionsForApiConsumer = new GetConventionsForApiConsumer( @@ -102,13 +102,13 @@ describe("Get Conventions for ApiConsumer", () => { expectToEqual(retrievedConventions, [ { - ...conventionPoleEmploi, - agencyName: agencyPoleEmploi.name, - agencyDepartment: agencyPoleEmploi.address.departmentCode, - agencyKind: agencyPoleEmploi.kind, - agencySiret: agencyPoleEmploi.agencySiret, - agencyCounsellorEmails: agencyPoleEmploi.counsellorEmails, - agencyValidatorEmails: agencyPoleEmploi.validatorEmails, + ...conventionFranceTravail, + agencyName: agencyFranceTravail.name, + agencyDepartment: agencyFranceTravail.address.departmentCode, + agencyKind: agencyFranceTravail.kind, + agencySiret: agencyFranceTravail.agencySiret, + agencyCounsellorEmails: agencyFranceTravail.counsellorEmails, + agencyValidatorEmails: agencyFranceTravail.validatorEmails, }, ]); }); @@ -133,13 +133,13 @@ describe("Get Conventions for ApiConsumer", () => { expectToEqual(retrievedConventions, [ { - ...conventionPoleEmploi, - agencyName: agencyPoleEmploi.name, - agencyDepartment: agencyPoleEmploi.address.departmentCode, - agencyKind: agencyPoleEmploi.kind, - agencySiret: agencyPoleEmploi.agencySiret, - agencyCounsellorEmails: agencyPoleEmploi.counsellorEmails, - agencyValidatorEmails: agencyPoleEmploi.validatorEmails, + ...conventionFranceTravail, + agencyName: agencyFranceTravail.name, + agencyDepartment: agencyFranceTravail.address.departmentCode, + agencyKind: agencyFranceTravail.kind, + agencySiret: agencyFranceTravail.agencySiret, + agencyCounsellorEmails: agencyFranceTravail.counsellorEmails, + agencyValidatorEmails: agencyFranceTravail.validatorEmails, }, ]); }); diff --git a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.ts b/back/src/domains/convention/use-cases/ResyncOldConventionsToFt.ts similarity index 92% rename from back/src/domains/convention/use-cases/ResyncOldConventionsToPe.ts rename to back/src/domains/convention/use-cases/ResyncOldConventionsToFt.ts index 01a76ca1eb..56f1e221a5 100644 --- a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.ts +++ b/back/src/domains/convention/use-cases/ResyncOldConventionsToFt.ts @@ -8,21 +8,21 @@ import { UnitOfWorkPerformer } from "../../core/unit-of-work/ports/UnitOfWorkPer import { FranceTravailGateway } from "../ports/FranceTravailGateway"; import { BroadcastToFranceTravailOnConventionUpdates } from "./broadcast/BroadcastToFranceTravailOnConventionUpdates"; -type ResyncOldConventionToPeReport = { +type ResyncOldConventionToFtReport = { success: number; skips: Record; errors: Record; }; -export class ResyncOldConventionsToPe extends TransactionalUseCase< +export class ResyncOldConventionsToFt extends TransactionalUseCase< void, - ResyncOldConventionToPeReport + ResyncOldConventionToFtReport > { protected override inputSchema = z.void(); readonly #broadcastToFTUsecase: BroadcastToFranceTravailOnConventionUpdates; - #report: ResyncOldConventionToPeReport = { + #report: ResyncOldConventionToFtReport = { errors: {}, skips: {}, success: 0, @@ -34,7 +34,7 @@ export class ResyncOldConventionsToPe extends TransactionalUseCase< constructor( uowPerform: UnitOfWorkPerformer, - poleEmploiGateway: FranceTravailGateway, + franceTravailGateway: FranceTravailGateway, timeGateway: TimeGateway, limit: number, ) { @@ -42,7 +42,7 @@ export class ResyncOldConventionsToPe extends TransactionalUseCase< this.#broadcastToFTUsecase = new BroadcastToFranceTravailOnConventionUpdates( uowPerform, - poleEmploiGateway, + franceTravailGateway, timeGateway, { resyncMode: true }, ); @@ -54,7 +54,7 @@ export class ResyncOldConventionsToPe extends TransactionalUseCase< public async _execute( _: void, uow: UnitOfWork, - ): Promise { + ): Promise { const conventionsToSync = await uow.conventionsToSyncRepository.getToProcessOrError(this.#limit); await Promise.all( diff --git a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts b/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts index 500a765a9f..aa9a43df50 100644 --- a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts +++ b/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts @@ -19,7 +19,7 @@ import { FranceTravailConvention, conventionStatusToFranceTravailStatus, } from "../ports/FranceTravailGateway"; -import { ResyncOldConventionsToPe } from "./ResyncOldConventionsToPe"; +import { ResyncOldConventionsToFt } from "./ResyncOldConventionsToFt"; describe("ResyncOldConventionsToPe use case", () => { const agencyPE = new AgencyDtoBuilder().withKind("pole-emploi").build(); @@ -41,7 +41,7 @@ describe("ResyncOldConventionsToPe use case", () => { .build(); let uow: InMemoryUnitOfWork; - let useCase: ResyncOldConventionsToPe; + let useCase: ResyncOldConventionsToFt; let timeGateway: CustomTimeGateway; let peGateway: InMemoryFranceTravailGateway; @@ -50,7 +50,7 @@ describe("ResyncOldConventionsToPe use case", () => { timeGateway = new CustomTimeGateway(); peGateway = new InMemoryFranceTravailGateway(); - useCase = new ResyncOldConventionsToPe( + useCase = new ResyncOldConventionsToFt( new InMemoryUowPerformer(uow), peGateway, timeGateway, @@ -282,7 +282,7 @@ describe("ResyncOldConventionsToPe use case", () => { ]); expectToEqual(peGateway.notifications, []); - const report = await new ResyncOldConventionsToPe( + const report = await new ResyncOldConventionsToFt( new InMemoryUowPerformer(uow), peGateway, timeGateway, diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts index 9c9e7378a2..bdf9e70b20 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts @@ -35,7 +35,7 @@ export class BroadcastToFranceTravailOnConventionUpdates extends TransactionalUs constructor( uowPerformer: UnitOfWorkPerformer, - private poleEmploiGateway: FranceTravailGateway, + private franceTravailGateway: FranceTravailGateway, private timeGateway: TimeGateway, private options: { resyncMode: boolean }, ) { @@ -70,7 +70,7 @@ export class BroadcastToFranceTravailOnConventionUpdates extends TransactionalUs const externalId = await uow.conventionExternalIdRepository.getByConventionId(convention.id); - const poleEmploiConvention: FranceTravailConvention = { + const franceTravailConvention: FranceTravailConvention = { id: externalId ?? "no-external-id", originalId: convention.id, peConnectId: beneficiary.federatedIdentity?.token, @@ -118,10 +118,9 @@ export class BroadcastToFranceTravailOnConventionUpdates extends TransactionalUs fonctionTuteur: convention.establishmentTutor.job, }; - const response = - await this.poleEmploiGateway.notifyOnConventionUpdated( - poleEmploiConvention, - ); + const response = await this.franceTravailGateway.notifyOnConventionUpdated( + franceTravailConvention, + ); if (this.options.resyncMode) await uow.conventionsToSyncRepository.save({ diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts index 5875005416..b2ec41c121 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts @@ -27,7 +27,7 @@ describe("Broadcasts events to France Travail", () => { .withKind("pole-emploi") .build(); - let poleEmploiGateWay: InMemoryFranceTravailGateway; + let franceTravailGateWay: InMemoryFranceTravailGateway; let uow: InMemoryUnitOfWork; let timeGateway: CustomTimeGateway; let broadcastToFranceTravailOnConventionUpdates: BroadcastToFranceTravailOnConventionUpdates; @@ -53,12 +53,12 @@ describe("Broadcasts events to France Travail", () => { beforeEach(() => { uow = createInMemoryUow(); - poleEmploiGateWay = new InMemoryFranceTravailGateway(); + franceTravailGateWay = new InMemoryFranceTravailGateway(); timeGateway = new CustomTimeGateway(); broadcastToFranceTravailOnConventionUpdates = new BroadcastToFranceTravailOnConventionUpdates( new InMemoryUowPerformer(uow), - poleEmploiGateWay, + franceTravailGateWay, timeGateway, { resyncMode: false }, ); @@ -74,7 +74,7 @@ describe("Broadcasts events to France Travail", () => { convention: conventionLinkedToSIAE, }); - expect(poleEmploiGateWay.notifications).toHaveLength(0); + expect(franceTravailGateWay.notifications).toHaveLength(0); }); it("Conventions without federated id are still sent, with their externalId", async () => { @@ -88,15 +88,15 @@ describe("Broadcasts events to France Travail", () => { }); // Assert - expect(poleEmploiGateWay.notifications).toHaveLength(1); - expectObjectsToMatch(poleEmploiGateWay.notifications[0], { + expect(franceTravailGateWay.notifications).toHaveLength(1); + expectObjectsToMatch(franceTravailGateWay.notifications[0], { originalId: conventionLinkedToFTWithoutFederatedIdentity.id, id: externalId, }); }); it("If Pe returns a 404 error, we store the error in a repo", async () => { - poleEmploiGateWay.setNextResponse({ + franceTravailGateWay.setNextResponse({ status: 404, subscriberErrorFeedback: { message: "Ops, something is bad" }, body: "not found", @@ -110,7 +110,7 @@ describe("Broadcasts events to France Travail", () => { }); // Assert - expect(poleEmploiGateWay.notifications).toHaveLength(1); + expect(franceTravailGateWay.notifications).toHaveLength(1); expectToEqual(uow.broadcastFeedbacksRepository.broadcastFeedbacks, [ { consumerId: null, @@ -131,7 +131,7 @@ describe("Broadcasts events to France Travail", () => { }); it("store the broadcast feetback success in a repo", async () => { - poleEmploiGateWay.setNextResponse({ + franceTravailGateWay.setNextResponse({ status: 200, body: { success: true }, }); @@ -197,8 +197,8 @@ describe("Broadcasts events to France Travail", () => { await broadcastToFranceTravailOnConventionUpdates.execute({ convention }); // Assert - expect(poleEmploiGateWay.notifications).toHaveLength(1); - expectObjectsToMatch(poleEmploiGateWay.notifications[0], { + expect(franceTravailGateWay.notifications).toHaveLength(1); + expectObjectsToMatch(franceTravailGateWay.notifications[0], { id: externalId, peConnectId: "some-id", originalId: immersionConventionId, @@ -270,8 +270,8 @@ describe("Broadcasts events to France Travail", () => { }); // Assert - expect(poleEmploiGateWay.notifications).toHaveLength(1); - expectObjectsToMatch(poleEmploiGateWay.notifications[0], { + expect(franceTravailGateWay.notifications).toHaveLength(1); + expectObjectsToMatch(franceTravailGateWay.notifications[0], { id: externalId, originalId: conventionLinkedToAgencyReferingToOther.id, objectifDeImmersion: 3, @@ -354,8 +354,8 @@ describe("Broadcasts events to France Travail", () => { convention, }); - expect(poleEmploiGateWay.notifications).toHaveLength(1); - expectObjectsToMatch(poleEmploiGateWay.notifications[0], { + expect(franceTravailGateWay.notifications).toHaveLength(1); + expectObjectsToMatch(franceTravailGateWay.notifications[0], { siret: convention.siret, typeAgence: agencyKind, }); @@ -394,7 +394,7 @@ describe("Broadcasts events to France Travail", () => { }); // Assert - expect(poleEmploiGateWay.notifications).toHaveLength(0); + expect(franceTravailGateWay.notifications).toHaveLength(0); }); }, ); @@ -436,7 +436,7 @@ describe("Broadcasts events to France Travail", () => { convention: convention, }); - expect(poleEmploiGateWay.notifications).toHaveLength(0); + expect(franceTravailGateWay.notifications).toHaveLength(0); }); }, ); diff --git a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts index cb4d6c0233..c94fef14c0 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts @@ -19,7 +19,7 @@ import { AppConfig } from "../../../../config/bootstrap/appConfig"; import { GenerateConventionMagicLinkUrl } from "../../../../config/bootstrap/magicLinkUrl"; import { agencyWithRightToAgencyDto } from "../../../../utils/agency"; import { TransactionalUseCase } from "../../../core/UseCase"; -import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/FtConnect.dto"; +import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/ft-connect/dto/FtConnect.dto"; import { SaveNotificationAndRelatedEvent } from "../../../core/notifications/helpers/Notification"; import { prepareMagicShortLinkMaker } from "../../../core/short-link/ShortLink"; import { ShortLinkIdGeneratorGateway } from "../../../core/short-link/ports/ShortLinkIdGeneratorGateway"; @@ -97,7 +97,7 @@ export class NotifyAllActorsOfFinalConventionValidation extends TransactionalUse }), ), ...getPeAdvisorEmailAndRoleIfExist( - await uow.conventionPoleEmploiAdvisorRepository.getByConventionId( + await uow.conventionFranceTravailAdvisorRepository.getByConventionId( convention.id, ), ), diff --git a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts index a0b8ac9adb..9ccb0c20d5 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts @@ -15,7 +15,7 @@ import { AppConfig } from "../../../../config/bootstrap/appConfig"; import { AppConfigBuilder } from "../../../../utils/AppConfigBuilder"; import { toAgencyWithRights } from "../../../../utils/agency"; import { fakeGenerateMagicLinkUrlFn } from "../../../../utils/jwtTestHelper"; -import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/FtConnect.dto"; +import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/ft-connect/dto/FtConnect.dto"; import { expectEmailFinalValidationConfirmationMatchingConvention } from "../../../core/notifications/adapters/InMemoryNotificationRepository"; import { WithNotificationIdAndKind, @@ -481,7 +481,7 @@ describe("NotifyAllActorsOfFinalApplicationValidation", () => { conventionId: validConvention.id, }; - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [userConventionAdvisor], ); @@ -567,7 +567,7 @@ describe("NotifyAllActorsOfFinalApplicationValidation", () => { conventionId: validConvention.id, }; - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [userConventionAdvisor], ); diff --git a/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.ts b/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.ts index 6e611d9b78..cd958a54aa 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.ts @@ -13,7 +13,7 @@ import { GenerateConventionMagicLinkUrl } from "../../../../config/bootstrap/mag import { agencyWithRightToAgencyDto } from "../../../../utils/agency"; import { createLogger } from "../../../../utils/logger"; import { TransactionalUseCase } from "../../../core/UseCase"; -import { FtConnectImmersionAdvisorDto } from "../../../core/authentication/pe-connect/dto/FtConnectAdvisor.dto"; +import { FtConnectImmersionAdvisorDto } from "../../../core/authentication/ft-connect/dto/FtConnectAdvisor.dto"; import { SaveNotificationAndRelatedEvent } from "../../../core/notifications/helpers/Notification"; import { prepareMagicShortLinkMaker } from "../../../core/short-link/ShortLink"; import { ShortLinkIdGeneratorGateway } from "../../../core/short-link/ports/ShortLinkIdGeneratorGateway"; @@ -67,7 +67,7 @@ export class NotifyNewConventionNeedsReview extends TransactionalUseCase { conventionId: conventionInReviewWithPeAdvisor.id, }; - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [userConventionAdvisor], ); @@ -363,7 +363,7 @@ describe("NotifyConventionNeedsReview", () => { conventionId: conventionInReviewWithPeAdvisor.id, }; - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [userConventionAdvisor], ); @@ -632,7 +632,7 @@ describe("NotifyConventionNeedsReview", () => { conventionId: conventionAcceptedByCounsellorWithPeAdvisor.id, }; - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [userConventionAdvisor], ); diff --git a/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.ts b/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.ts index 8e0d2f232d..bd2069f335 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.ts @@ -64,7 +64,7 @@ export class NotifyToAgencyConventionSubmitted extends TransactionalUseCase< const agency = await agencyWithRightToAgencyDto(uow, agencyWithRights); const conventionAdvisorEntity = - await uow.conventionPoleEmploiAdvisorRepository.getByConventionId( + await uow.conventionFranceTravailAdvisorRepository.getByConventionId( convention.id, ); diff --git a/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts b/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts index 31d2b1d151..ba842926f0 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts @@ -16,7 +16,7 @@ import { ExpectSavedNotificationsAndEvents, makeExpectSavedNotificationsAndEvents, } from "../../../../utils/makeExpectSavedNotificationAndEvent.helpers"; -import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/pe-connect/dto/FtConnect.dto"; +import { ConventionFtUserAdvisorEntity } from "../../../core/authentication/ft-connect/dto/FtConnect.dto"; import { makeSaveNotificationAndRelatedEvent } from "../../../core/notifications/helpers/Notification"; import { makeShortLinkUrl } from "../../../core/short-link/ShortLink"; import { DeterministShortLinkIdGeneratorGateway } from "../../../core/short-link/adapters/short-link-generator-gateway/DeterministShortLinkIdGeneratorGateway"; @@ -308,7 +308,7 @@ describe("NotifyToAgencyConventionSubmitted", () => { .withFederatedIdentity(peIdentity) .build(); - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [ { conventionId: validConvention.id, @@ -421,7 +421,7 @@ describe("NotifyToAgencyConventionSubmitted", () => { conventionId: validConvention.id, }; - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [userConventionAdvisor], ); diff --git a/back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts b/back/src/domains/core/authentication/ft-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts similarity index 83% rename from back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts rename to back/src/domains/core/authentication/ft-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts index 7391fa6a79..097a906028 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts @@ -31,7 +31,7 @@ export class InMemoryConventionFranceTravailAdvisorRepository } //test purposes only - public get conventionPoleEmploiUsersAdvisors() { + public get conventionFranceTravailUsersAdvisors() { return this.#conventionFranceTravailUsersAdvisors; } @@ -55,11 +55,11 @@ export class InMemoryConventionFranceTravailAdvisorRepository } //test purposes only - public setConventionPoleEmploiUsersAdvisor( - conventionPoleEmploiUserAdvisorEntities: ConventionFtUserAdvisorEntity[], + public setConventionFranceTravailUsersAdvisor( + conventionFranceTravailUserAdvisorEntities: ConventionFtUserAdvisorEntity[], ) { this.#conventionFranceTravailUsersAdvisors = - conventionPoleEmploiUserAdvisorEntities; + conventionFranceTravailUserAdvisorEntities; } async #getAlreadyOpenIfExist( @@ -88,13 +88,13 @@ export const CONVENTION_ID_DEFAULT_UUID = const matchPeExternalId = (peExternalId: string) => - (conventionPoleEmploiUserAdvisor: ConventionFtUserAdvisorEntity) => - conventionPoleEmploiUserAdvisor.peExternalId === peExternalId; + (conventionFranceTravailUserAdvisor: ConventionFtUserAdvisorEntity) => + conventionFranceTravailUserAdvisor.peExternalId === peExternalId; const matchConventionId = (conventionId: string) => - (conventionPoleEmploiUserAdvisor: ConventionFtUserAdvisorEntity) => - conventionPoleEmploiUserAdvisor.conventionId === conventionId; + (conventionFranceTravailUserAdvisor: ConventionFtUserAdvisorEntity) => + conventionFranceTravailUserAdvisor.conventionId === conventionId; const isOpenEntity = (entity: ConventionFtUserAdvisorEntity) => entity.conventionId === CONVENTION_ID_DEFAULT_UUID; diff --git a/back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts b/back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts similarity index 71% rename from back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts rename to back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts index ea1b76eb5e..78189128f0 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts @@ -46,24 +46,24 @@ const capemploiAdvisor: FtConnectImmersionAdvisorDto = { email: "jeanne.delamare@pole-emploi.fr", type: "CAPEMPLOI", }; -const poleEmploiFirstUserAdvisor: FtUserAndAdvisor = { +const franceTravailFirstUserAdvisor: FtUserAndAdvisor = { advisor: placementAdvisor, user, }; -const poleEmploiFirstUserWithoutAdvisor: FtUserAndAdvisor = { +const franceTravailFirstUserWithoutAdvisor: FtUserAndAdvisor = { advisor: undefined, user, }; -const poleEmploiUpdatedUserAdvisor: FtUserAndAdvisor = { +const franceTravailUpdatedUserAdvisor: FtUserAndAdvisor = { advisor: capemploiAdvisor, user, }; -describe("PgConventionPoleEmploiAdvisorRepository", () => { +describe("PgConventionFranceTravailAdvisorRepository", () => { let pool: Pool; - let conventionPoleEmploiAdvisorRepository: PgConventionFranceTravailAdvisorRepository; + let conventionFranceTravailAdvisorRepository: PgConventionFranceTravailAdvisorRepository; let db: KyselyDb; beforeAll(async () => { @@ -94,21 +94,22 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { beforeEach(async () => { await db.deleteFrom("partners_pe_connect").execute(); - conventionPoleEmploiAdvisorRepository = + conventionFranceTravailAdvisorRepository = new PgConventionFranceTravailAdvisorRepository(db); }); describe("openSlotForNextConvention", () => { it("should open a slot if no open slot is present", async () => { - await conventionPoleEmploiAdvisorRepository.openSlotForNextConvention( - poleEmploiFirstUserAdvisor, + await conventionFranceTravailAdvisorRepository.openSlotForNextConvention( + franceTravailFirstUserAdvisor, ); expectToEqual( await db.selectFrom("partners_pe_connect").selectAll().execute(), [ { - user_pe_external_id: poleEmploiFirstUserAdvisor.user.peExternalId, + user_pe_external_id: + franceTravailFirstUserAdvisor.user.peExternalId, convention_id: "00000000-0000-0000-0000-000000000000", firstname: placementAdvisor.firstName, lastname: placementAdvisor.lastName, @@ -120,15 +121,16 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { }); it("should open a slot with no advisor", async () => { - await conventionPoleEmploiAdvisorRepository.openSlotForNextConvention( - poleEmploiFirstUserWithoutAdvisor, + await conventionFranceTravailAdvisorRepository.openSlotForNextConvention( + franceTravailFirstUserWithoutAdvisor, ); expectToEqual( await db.selectFrom("partners_pe_connect").selectAll().execute(), [ { - user_pe_external_id: poleEmploiFirstUserAdvisor.user.peExternalId, + user_pe_external_id: + franceTravailFirstUserAdvisor.user.peExternalId, convention_id: "00000000-0000-0000-0000-000000000000", firstname: null, lastname: null, @@ -140,19 +142,20 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { }); it("should update the open slot if it already exist", async () => { - await conventionPoleEmploiAdvisorRepository.openSlotForNextConvention( - poleEmploiFirstUserAdvisor, + await conventionFranceTravailAdvisorRepository.openSlotForNextConvention( + franceTravailFirstUserAdvisor, ); - await conventionPoleEmploiAdvisorRepository.openSlotForNextConvention( - poleEmploiUpdatedUserAdvisor, + await conventionFranceTravailAdvisorRepository.openSlotForNextConvention( + franceTravailUpdatedUserAdvisor, ); expectToEqual( await db.selectFrom("partners_pe_connect").selectAll().execute(), [ { - user_pe_external_id: poleEmploiUpdatedUserAdvisor.user.peExternalId, + user_pe_external_id: + franceTravailUpdatedUserAdvisor.user.peExternalId, convention_id: "00000000-0000-0000-0000-000000000000", firstname: capemploiAdvisor.firstName, lastname: capemploiAdvisor.lastName, @@ -165,9 +168,9 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { }); describe("associateConventionAndUserAdvisor", () => { - it("should throw a not found error if no suitable opened conventionPoleEmploiUserAdvisor is present", async () => { + it("should throw a not found error if no suitable opened conventionFranceTravailUserAdvisor is present", async () => { await expect( - conventionPoleEmploiAdvisorRepository.associateConventionAndUserAdvisor( + conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( conventionId, userPeExternalId, ), @@ -178,11 +181,11 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { ); }); - it("should update the entity in db if a suitable conventionPoleEmploiUserAdvisor was found", async () => { - await conventionPoleEmploiAdvisorRepository.openSlotForNextConvention( - poleEmploiFirstUserAdvisor, + it("should update the entity in db if a suitable conventionFranceTravailUserAdvisor was found", async () => { + await conventionFranceTravailAdvisorRepository.openSlotForNextConvention( + franceTravailFirstUserAdvisor, ); - await conventionPoleEmploiAdvisorRepository.associateConventionAndUserAdvisor( + await conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( conventionId, userPeExternalId, ); @@ -191,7 +194,8 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { await db.selectFrom("partners_pe_connect").selectAll().execute(), [ { - user_pe_external_id: poleEmploiFirstUserAdvisor.user.peExternalId, + user_pe_external_id: + franceTravailFirstUserAdvisor.user.peExternalId, convention_id: conventionId, email: placementAdvisor.email, firstname: placementAdvisor.firstName, @@ -206,7 +210,7 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { describe("getByConventionId", () => { it("should return undefined if no convention Advisor", async () => { const conventionAdvisor: ConventionFtUserAdvisorEntity | undefined = - await conventionPoleEmploiAdvisorRepository.getByConventionId( + await conventionFranceTravailAdvisorRepository.getByConventionId( conventionId, ); @@ -214,45 +218,45 @@ describe("PgConventionPoleEmploiAdvisorRepository", () => { }); it("should get the convention Advisor by the convention id", async () => { - await conventionPoleEmploiAdvisorRepository.openSlotForNextConvention( - poleEmploiFirstUserAdvisor, + await conventionFranceTravailAdvisorRepository.openSlotForNextConvention( + franceTravailFirstUserAdvisor, ); - await conventionPoleEmploiAdvisorRepository.associateConventionAndUserAdvisor( + await conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( conventionId, userPeExternalId, ); const conventionAdvisor: ConventionFtUserAdvisorEntity | undefined = - await conventionPoleEmploiAdvisorRepository.getByConventionId( + await conventionFranceTravailAdvisorRepository.getByConventionId( conventionId, ); // biome-ignore lint/style/noNonNullAssertion: expectObjectsToMatch(conventionAdvisor!, { - advisor: poleEmploiFirstUserAdvisor.advisor, - peExternalId: poleEmploiFirstUserAdvisor.user.peExternalId, + advisor: franceTravailFirstUserAdvisor.advisor, + peExternalId: franceTravailFirstUserAdvisor.user.peExternalId, conventionId, }); }); it("convention advisor without advisor", async () => { - await conventionPoleEmploiAdvisorRepository.openSlotForNextConvention( - poleEmploiFirstUserWithoutAdvisor, + await conventionFranceTravailAdvisorRepository.openSlotForNextConvention( + franceTravailFirstUserWithoutAdvisor, ); - await conventionPoleEmploiAdvisorRepository.associateConventionAndUserAdvisor( + await conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( conventionId, userPeExternalId, ); const conventionAdvisor: ConventionFtUserAdvisorEntity | undefined = - await conventionPoleEmploiAdvisorRepository.getByConventionId( + await conventionFranceTravailAdvisorRepository.getByConventionId( conventionId, ); // biome-ignore lint/style/noNonNullAssertion: expectObjectsToMatch(conventionAdvisor!, { advisor: undefined, - peExternalId: poleEmploiFirstUserAdvisor.user.peExternalId, + peExternalId: franceTravailFirstUserAdvisor.user.peExternalId, conventionId, }); }); diff --git a/back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts b/back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts similarity index 97% rename from back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts rename to back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts index 97eeeca684..0c7aef4756 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.ts @@ -69,7 +69,7 @@ export class PgConventionFranceTravailAdvisorRepository return ( conventionPeUserAdvisor && - toConventionPoleEmploiUserAdvisorEntity( + toConventionFranceTravailUserAdvisorEntity( parseZodSchemaAndLogErrorOnParsingFailure( conventionFranceTravailUserAdvisorDtoSchema, conventionPeUserAdvisor, @@ -129,7 +129,7 @@ const toConventionFranceTravailUserAdvisorDTO = ({ conventionId: convention_id, }); -const toConventionPoleEmploiUserAdvisorEntity = ( +const toConventionFranceTravailUserAdvisorEntity = ( dto: ConventionFtUserAdvisorDto, ): ConventionFtUserAdvisorEntity => ({ ...dto, diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.manual.test.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.manual.test.ts similarity index 97% rename from back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.manual.test.ts rename to back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.manual.test.ts index 6491fbdbbd..d27a8a39d7 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.manual.test.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.manual.test.ts @@ -9,17 +9,17 @@ import { testRawRedirectError, } from "shared"; import { createAxiosSharedClient } from "shared-routes/axios"; -import { HttpPeConnectGateway } from "./HttpPeConnectGateway"; +import { HttpFtConnectGateway } from "./HttpFtConnectGateway"; import { ExternalAccessToken, - ExternalPeConnectAdvisor, - ExternalPeConnectUser, -} from "./peConnectApi.dto"; + ExternalFtConnectAdvisor, + ExternalFtConnectUser, +} from "./ftConnectApi.dto"; import { makePeConnectExternalRoutes, toPeConnectAdvisorDto, toPeConnectUserDto, -} from "./peConnectApi.routes"; +} from "./ftConnectApi.routes"; const unhandledStatusCode = 201; @@ -33,14 +33,14 @@ describe("HttpPeConnectGateway", () => { skipResponseValidation: true, }); - const peConnectGateway = new HttpPeConnectGateway(httpClient, { + const peConnectGateway = new HttpFtConnectGateway(httpClient, { immersionFacileBaseUrl: "https://fake-immersion.fr", - poleEmploiClientId: "pe-client-id", - poleEmploiClientSecret: "pe-client-secret", + franceTravailClientId: "pe-client-id", + franceTravailClientSecret: "pe-client-secret", }); const mock = new MockAdapter(axios); - const peExternalUser: ExternalPeConnectUser = { + const peExternalUser: ExternalFtConnectUser = { email: "maurice.chevalier@gmail.com", family_name: "chevalier", gender: "male", @@ -48,14 +48,14 @@ describe("HttpPeConnectGateway", () => { idIdentiteExterne: "617cd5a3-2cbd-477c-96a0-85d34381f815", sub: "617cd5a3-2cbd-477c-96a0-85d34381f815", }; - const peExternalAdvisorCapemploi: ExternalPeConnectAdvisor = { + const peExternalAdvisorCapemploi: ExternalFtConnectAdvisor = { type: "CAPEMPLOI", civilite: "1", mail: "capEmploiAdvisor@pe.fr", nom: "prost", prenom: "alain", }; - const peExternalAdvisorPlacement: ExternalPeConnectAdvisor = { + const peExternalAdvisorPlacement: ExternalFtConnectAdvisor = { type: "PLACEMENT", civilite: "1", mail: "placementAdvisor@pe.fr", diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.ts similarity index 91% rename from back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts rename to back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.ts index dc31b40d70..1be4527d93 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/HttpPeConnectGateway.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.ts @@ -17,23 +17,23 @@ import { FtConnectUserDto } from "../../dto/FtConnectUserDto"; import { externalAccessTokenSchema } from "../../port/AccessToken.schema"; import { FtConnectGateway } from "../../port/FtConnectGateway"; import { - ExternalPeConnectAdvisor, - ExternalPeConnectUser, - PeConnectHeaders, - PeConnectOauthConfig, -} from "./peConnectApi.dto"; -import { peConnectErrorStrategy as peConnectAxiosErrorStrategy } from "./peConnectApi.error"; + ExternalFtConnectAdvisor, + ExternalFtConnectUser, + FtConnectHeaders, + FtConnectOauthConfig, +} from "./ftConnectApi.dto"; +import { peConnectErrorStrategy as peConnectAxiosErrorStrategy } from "./ftConnectApi.error"; import { PeConnectExternalRoutes, toAccessToken, toPeConnectAdvisorDto, toPeConnectUserDto, -} from "./peConnectApi.routes"; +} from "./ftConnectApi.routes"; import { externalPeConnectAdvisorsSchema, externalPeConnectUserSchema, externalPeConnectUserStatutSchema, -} from "./peConnectApi.schema"; +} from "./ftConnectApi.schema"; const logger = createLogger(__filename); @@ -82,23 +82,23 @@ const exchangeCodeForAccessTokenLogger = makePeConnectLogger( "exchangeCodeForAccessToken", ); -const peConnectMaxRequestsPerInterval = 1; +const ftConnectMaxRequestsPerInterval = 1; const rate_ms = 1250; // TODO GERER LE RETRY POUR L'ENSEMBLE DES APPELS PE -export class HttpPeConnectGateway implements FtConnectGateway { +export class HttpFtConnectGateway implements FtConnectGateway { // PE Connect limit rate at 1 call per 1.2s #limiter = new Bottleneck({ - reservoir: peConnectMaxRequestsPerInterval, + reservoir: ftConnectMaxRequestsPerInterval, reservoirRefreshInterval: rate_ms, // number of ms - reservoirRefreshAmount: peConnectMaxRequestsPerInterval, + reservoirRefreshAmount: ftConnectMaxRequestsPerInterval, maxConcurrent: 1, - minTime: Math.ceil(rate_ms / peConnectMaxRequestsPerInterval), + minTime: Math.ceil(rate_ms / ftConnectMaxRequestsPerInterval), }); constructor( private httpClient: HttpClient, - private configs: PeConnectOauthConfig, + private configs: FtConnectOauthConfig, ) {} public async getAccessToken( @@ -110,8 +110,8 @@ export class HttpPeConnectGateway implements FtConnectGateway { const response = await this.#limiter.schedule(() => this.httpClient.exchangeCodeForAccessToken({ body: queryParamsAsString({ - client_id: this.configs.poleEmploiClientId, - client_secret: this.configs.poleEmploiClientSecret, + client_id: this.configs.franceTravailClientId, + client_secret: this.configs.franceTravailClientSecret, code: authorizationCode, grant_type: "authorization_code", redirect_uri: `${this.configs.immersionFacileBaseUrl}/api/pe-connect`, @@ -156,7 +156,7 @@ export class HttpPeConnectGateway implements FtConnectGateway { } | undefined > { - const headers: PeConnectHeaders = { + const headers: FtConnectHeaders = { "Content-Type": "application/json", Accept: "application/json", Authorization: `Bearer ${accessToken.value}`, @@ -180,7 +180,7 @@ export class HttpPeConnectGateway implements FtConnectGateway { } async #userIsJobseeker( - headers: PeConnectHeaders, + headers: FtConnectHeaders, peExternalId: string | undefined, ): Promise { const log = getUserStatutInfoLogger; @@ -226,8 +226,8 @@ export class HttpPeConnectGateway implements FtConnectGateway { } async #getUserInfo( - headers: PeConnectHeaders, - ): Promise { + headers: FtConnectHeaders, + ): Promise { const log = getUserInfoLogger; try { log.total({}); @@ -266,8 +266,8 @@ export class HttpPeConnectGateway implements FtConnectGateway { } async #getAdvisorsInfo( - headers: PeConnectHeaders, - ): Promise { + headers: FtConnectHeaders, + ): Promise { const log = getAdvisorsInfoLogger; try { log.total({}); diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway.ts rename to back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway.ts diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.dto.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.dto.ts similarity index 75% rename from back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.dto.ts rename to back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.dto.ts index 81b04d4068..83169f1442 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.dto.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.dto.ts @@ -9,7 +9,7 @@ export type ExternalAccessToken = { }; // External contract from https://pole-emploi.io/data/api/pole-emploi-connect -export type ExternalPeConnectUser = { +export type ExternalFtConnectUser = { email?: string; family_name: string; gender: "male" | "female"; @@ -19,13 +19,13 @@ export type ExternalPeConnectUser = { }; // External contract from https://pole-emploi.io/data/api/pole-emploi-connect/statut -export type ExternalPeConnectStatut = { +export type ExternalFtConnectStatut = { codeStatutIndividu: "0" | "1"; libelleStatutIndividu: "Non demandeur d’emploi" | "Demandeur d’emploi"; }; // External contract from https://pole-emploi.io/data/api/conseillers -export type ExternalPeConnectAdvisor = { +export type ExternalFtConnectAdvisor = { nom: string; prenom: string; civilite: "1" | "2"; @@ -33,10 +33,8 @@ export type ExternalPeConnectAdvisor = { type: FtConnectAdvisorsKind; }; -export type ExternalPeConnectAdvisors = ExternalPeConnectAdvisor[]; - // External contract from https://pole-emploi.io/data/documentation/utilisation-api-pole-emploi/generer-access-token -export type ExternalPeConnectOAuthGrantPayload = { +export type ExternalFtConnectOAuthGrantPayload = { response_type: string; client_id: string; realm: string; @@ -44,24 +42,24 @@ export type ExternalPeConnectOAuthGrantPayload = { scope: string; }; -export type PeConnectHeaders = { +export type FtConnectHeaders = { "Content-Type": "application/json"; Accept: "application/json"; Authorization: BearerToken; }; -type PeConnectAccessTokenHeaders = { +type FtConnectAccessTokenHeaders = { "Content-Type": "application/x-www-form-urlencoded"; }; -export const peConnectAccessTokenHeadersSchema: z.Schema = +export const ftConnectAccessTokenHeadersSchema: z.Schema = z .object({ "Content-Type": z.literal("application/x-www-form-urlencoded"), }) .passthrough(); -export type PeConnectOauthConfig = { - poleEmploiClientId: string; - poleEmploiClientSecret: string; +export type FtConnectOauthConfig = { + franceTravailClientId: string; + franceTravailClientSecret: string; immersionFacileBaseUrl: AbsoluteUrl; }; diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.error.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.error.ts similarity index 98% rename from back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.error.ts rename to back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.error.ts index fafefb5218..2eb842d0a0 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.error.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.error.ts @@ -1,7 +1,7 @@ import { AxiosError } from "axios"; import { HTTP_STATUS, ManagedRedirectError, RawRedirectError } from "shared"; import { UnhandledError } from "../../../../../../config/helpers/handleHttpJsonResponseError"; -import { PeConnectExternalRoutes } from "./peConnectApi.routes"; +import { PeConnectExternalRoutes } from "./ftConnectApi.routes"; type PeConnectTargetsKind = keyof PeConnectExternalRoutes; diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes.ts similarity index 83% rename from back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes.ts rename to back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes.ts index db6b925728..5f69746423 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.routes.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes.ts @@ -7,12 +7,12 @@ import { FtConnectAdvisorDto } from "../../dto/FtConnectAdvisor.dto"; import { FtConnectUserDto } from "../../dto/FtConnectUserDto"; import { ExternalAccessToken, - ExternalPeConnectAdvisor, - ExternalPeConnectOAuthGrantPayload, - ExternalPeConnectUser, - peConnectAccessTokenHeadersSchema, -} from "./peConnectApi.dto"; -import { peConnectHeadersSchema } from "./peConnectApi.schema"; + ExternalFtConnectAdvisor, + ExternalFtConnectOAuthGrantPayload, + ExternalFtConnectUser, + ftConnectAccessTokenHeadersSchema, +} from "./ftConnectApi.dto"; +import { peConnectHeadersSchema } from "./ftConnectApi.schema"; const peConnectNeededScopesForAllUsedApi = (clientId: string): string => [ @@ -69,30 +69,30 @@ export const makePeConnectExternalRoutes = ({ method: "post", url: `${peAuthCandidatUrl}/connexion/oauth2/access_token?realm=%2Findividu`, requestBodySchema: z.string(), - headersSchema: peConnectAccessTokenHeadersSchema, + headersSchema: ftConnectAccessTokenHeadersSchema, responses: { 200: z.any() }, }), }); export const makePeConnectLoginPageUrl = (appConfig: AppConfig): AbsoluteUrl => - makeOauthGetAuthorizationCodeRedirectUrl(appConfig.peAuthCandidatUrl, { + makeOauthGetAuthorizationCodeRedirectUrl(appConfig.ftAuthCandidatUrl, { response_type: "code", - client_id: appConfig.poleEmploiClientId, + client_id: appConfig.franceTravailClientId, realm: "/individu", redirect_uri: `${appConfig.immersionFacileBaseUrl}/api/pe-connect`, - scope: peConnectNeededScopesForAllUsedApi(appConfig.poleEmploiClientId), + scope: peConnectNeededScopesForAllUsedApi(appConfig.franceTravailClientId), }); const makeOauthGetAuthorizationCodeRedirectUrl = ( peAuthCandidatUrl: AbsoluteUrl, - authorizationCodePayload: ExternalPeConnectOAuthGrantPayload, + authorizationCodePayload: ExternalFtConnectOAuthGrantPayload, ): AbsoluteUrl => - `${peAuthCandidatUrl}/connexion/oauth2/authorize?${queryParamsAsString( + `${peAuthCandidatUrl}/connexion/oauth2/authorize?${queryParamsAsString( authorizationCodePayload, )}`; export const toPeConnectAdvisorDto = ( - fromApi: ExternalPeConnectAdvisor, + fromApi: ExternalFtConnectAdvisor, ): FtConnectAdvisorDto => ({ email: fromApi.mail, firstName: fromApi.prenom, @@ -101,7 +101,7 @@ export const toPeConnectAdvisorDto = ( }); export const toPeConnectUserDto = ( - externalPeConnectUser: ExternalPeConnectUser & { isUserJobseeker: boolean }, + externalPeConnectUser: ExternalFtConnectUser & { isUserJobseeker: boolean }, ): FtConnectUserDto => ({ isJobseeker: externalPeConnectUser.isUserJobseeker, email: externalPeConnectUser.email, diff --git a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.schema.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.schema.ts similarity index 71% rename from back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.schema.ts rename to back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.schema.ts index 01ca498f5f..2143390284 100644 --- a/back/src/domains/core/authentication/pe-connect/adapters/pe-connect-gateway/peConnectApi.schema.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.schema.ts @@ -6,14 +6,13 @@ import { ftAdvisorKinds, } from "../../dto/FtConnectAdvisor.dto"; import { - ExternalPeConnectAdvisor, - ExternalPeConnectAdvisors, - ExternalPeConnectStatut, - ExternalPeConnectUser, - PeConnectHeaders, -} from "./peConnectApi.dto"; + ExternalFtConnectAdvisor, + ExternalFtConnectStatut, + ExternalFtConnectUser, + FtConnectHeaders, +} from "./ftConnectApi.dto"; -export const externalPeConnectUserSchema: z.Schema = +export const externalPeConnectUserSchema: z.Schema = z.object({ email: emailSchema.optional(), family_name: zStringMinLength1, @@ -23,7 +22,7 @@ export const externalPeConnectUserSchema: z.Schema = sub: zStringMinLength1, }); -export const externalPeConnectUserStatutSchema: z.Schema = +export const externalPeConnectUserStatutSchema: z.Schema = z.object({ codeStatutIndividu: z.enum(["0", "1"]), libelleStatutIndividu: z.enum([ @@ -35,7 +34,7 @@ export const externalPeConnectUserStatutSchema: z.Schema = z.enum(ftAdvisorKinds); -const externalPeConnectAdvisorSchema: z.Schema = +const externalPeConnectAdvisorSchema: z.Schema = z.object({ nom: zStringMinLength1, prenom: zStringMinLength1, @@ -44,12 +43,13 @@ const externalPeConnectAdvisorSchema: z.Schema = type: peAdvisorKindSchema, }); -export const externalPeConnectAdvisorsSchema: z.Schema = - z.array(externalPeConnectAdvisorSchema); +export const externalPeConnectAdvisorsSchema: z.Schema< + ExternalFtConnectAdvisor[] +> = z.array(externalPeConnectAdvisorSchema); const bearerSchema = z.string().regex(/^Bearer .+$/) as z.Schema; -export const peConnectHeadersSchema: z.Schema = z +export const peConnectHeadersSchema: z.Schema = z .object({ "Content-Type": z.literal("application/json"), Accept: z.literal("application/json"), diff --git a/back/src/domains/core/authentication/pe-connect/dto/AccessToken.dto.ts b/back/src/domains/core/authentication/ft-connect/dto/AccessToken.dto.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/dto/AccessToken.dto.ts rename to back/src/domains/core/authentication/ft-connect/dto/AccessToken.dto.ts diff --git a/back/src/domains/core/authentication/pe-connect/dto/BearerToken.ts b/back/src/domains/core/authentication/ft-connect/dto/BearerToken.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/dto/BearerToken.ts rename to back/src/domains/core/authentication/ft-connect/dto/BearerToken.ts diff --git a/back/src/domains/core/authentication/pe-connect/dto/FtConnect.dto.ts b/back/src/domains/core/authentication/ft-connect/dto/FtConnect.dto.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/dto/FtConnect.dto.ts rename to back/src/domains/core/authentication/ft-connect/dto/FtConnect.dto.ts diff --git a/back/src/domains/core/authentication/pe-connect/dto/FtConnectAdvisor.dto.ts b/back/src/domains/core/authentication/ft-connect/dto/FtConnectAdvisor.dto.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/dto/FtConnectAdvisor.dto.ts rename to back/src/domains/core/authentication/ft-connect/dto/FtConnectAdvisor.dto.ts diff --git a/back/src/domains/core/authentication/pe-connect/dto/FtConnectUserDto.ts b/back/src/domains/core/authentication/ft-connect/dto/FtConnectUserDto.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/dto/FtConnectUserDto.ts rename to back/src/domains/core/authentication/ft-connect/dto/FtConnectUserDto.ts diff --git a/back/src/domains/core/authentication/pe-connect/entities/ConventionFranceTravailAdvisorEntity.ts b/back/src/domains/core/authentication/ft-connect/entities/ConventionFranceTravailAdvisorEntity.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/entities/ConventionFranceTravailAdvisorEntity.ts rename to back/src/domains/core/authentication/ft-connect/entities/ConventionFranceTravailAdvisorEntity.ts diff --git a/back/src/domains/core/authentication/pe-connect/port/AccessToken.schema.ts b/back/src/domains/core/authentication/ft-connect/port/AccessToken.schema.ts similarity index 78% rename from back/src/domains/core/authentication/pe-connect/port/AccessToken.schema.ts rename to back/src/domains/core/authentication/ft-connect/port/AccessToken.schema.ts index f82c5c0ef0..febb24c35f 100644 --- a/back/src/domains/core/authentication/pe-connect/port/AccessToken.schema.ts +++ b/back/src/domains/core/authentication/ft-connect/port/AccessToken.schema.ts @@ -1,6 +1,6 @@ import { makezTrimmedString } from "shared"; import { z } from "zod"; -import { ExternalAccessToken } from "../adapters/pe-connect-gateway/peConnectApi.dto"; +import { ExternalAccessToken } from "../adapters/ft-connect-gateway/ftConnectApi.dto"; export const externalAccessTokenSchema: z.Schema = z.object({ diff --git a/back/src/domains/core/authentication/pe-connect/port/ConventionFranceTravailAdvisorRepository.ts b/back/src/domains/core/authentication/ft-connect/port/ConventionFranceTravailAdvisorRepository.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/port/ConventionFranceTravailAdvisorRepository.ts rename to back/src/domains/core/authentication/ft-connect/port/ConventionFranceTravailAdvisorRepository.ts diff --git a/back/src/domains/core/authentication/pe-connect/port/FtConnect.schema.ts b/back/src/domains/core/authentication/ft-connect/port/FtConnect.schema.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/port/FtConnect.schema.ts rename to back/src/domains/core/authentication/ft-connect/port/FtConnect.schema.ts diff --git a/back/src/domains/core/authentication/pe-connect/port/FtConnectGateway.ts b/back/src/domains/core/authentication/ft-connect/port/FtConnectGateway.ts similarity index 100% rename from back/src/domains/core/authentication/pe-connect/port/FtConnectGateway.ts rename to back/src/domains/core/authentication/ft-connect/port/FtConnectGateway.ts diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.ts b/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.ts similarity index 95% rename from back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.ts rename to back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.ts index 34c787a8da..2097a1867a 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.ts @@ -53,7 +53,7 @@ export class BindConventionToFederatedIdentity extends TransactionalUseCase { try { - await uow.conventionPoleEmploiAdvisorRepository.associateConventionAndUserAdvisor( + await uow.conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( convention.id, federatedIdentity.token, ); diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts b/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts similarity index 85% rename from back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts rename to back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts index 92c0beb27d..393ae9b092 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts @@ -24,12 +24,13 @@ import { BindConventionToFederatedIdentity } from "./BindConventionToFederatedId describe("AssociatePeConnectFederatedIdentity", () => { let associatePeConnectFederatedIdentity: BindConventionToFederatedIdentity; let uowPerformer: InMemoryUowPerformer; - let conventionPoleEmploiAdvisorRepo: InMemoryConventionFranceTravailAdvisorRepository; + let conventionFranceTravailAdvisorRepo: InMemoryConventionFranceTravailAdvisorRepository; let outboxRepo: InMemoryOutboxRepository; let createNewEvent: CreateNewEvent; beforeEach(() => { const uow = createInMemoryUow(); - conventionPoleEmploiAdvisorRepo = uow.conventionPoleEmploiAdvisorRepository; + conventionFranceTravailAdvisorRepo = + uow.conventionFranceTravailAdvisorRepository; outboxRepo = uow.outboxRepository; uowPerformer = new InMemoryUowPerformer(uow); @@ -59,7 +60,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); expect( - conventionPoleEmploiAdvisorRepo.conventionPoleEmploiUsersAdvisors, + conventionFranceTravailAdvisorRepo.conventionFranceTravailUsersAdvisors, ).toHaveLength(0); expectObjectsToMatch(outboxRepo.events, [expectedEvent]); }); @@ -75,7 +76,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); expectObjectsToMatch( - conventionPoleEmploiAdvisorRepo.conventionPoleEmploiUsersAdvisors, + conventionFranceTravailAdvisorRepo.conventionFranceTravailUsersAdvisors, [], ); @@ -87,7 +88,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); it("should associate convention and federated identity if the federated identity match format", async () => { - conventionPoleEmploiAdvisorRepo.setConventionPoleEmploiUsersAdvisor([ + conventionFranceTravailAdvisorRepo.setConventionFranceTravailUsersAdvisor([ conventionFranceTravailUserAdvisorFromDto( userAdvisorDto, CONVENTION_ID_DEFAULT_UUID, @@ -104,17 +105,17 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); expect( - conventionPoleEmploiAdvisorRepo.conventionPoleEmploiUsersAdvisors, + conventionFranceTravailAdvisorRepo.conventionFranceTravailUsersAdvisors, ).toHaveLength(1); expect( - conventionPoleEmploiAdvisorRepo.conventionPoleEmploiUsersAdvisors[0] + conventionFranceTravailAdvisorRepo.conventionFranceTravailUsersAdvisors[0] .conventionId, ).toBe(conventionId); }); it("should save event PeConnectFederatedIdentityAssociated", async () => { - conventionPoleEmploiAdvisorRepo.setConventionPoleEmploiUsersAdvisor([ + conventionFranceTravailAdvisorRepo.setConventionFranceTravailUsersAdvisor([ conventionFranceTravailUserAdvisorFromDto( userAdvisorDto, CONVENTION_ID_DEFAULT_UUID, @@ -131,7 +132,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); expect( - conventionPoleEmploiAdvisorRepo.conventionPoleEmploiUsersAdvisors, + conventionFranceTravailAdvisorRepo.conventionFranceTravailUsersAdvisors, ).toHaveLength(1); // outbox rep @@ -143,7 +144,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); it("without advisor", async () => { - conventionPoleEmploiAdvisorRepo.setConventionPoleEmploiUsersAdvisor([ + conventionFranceTravailAdvisorRepo.setConventionFranceTravailUsersAdvisor([ conventionFranceTravailUserAdvisorFromDto( { ...userAdvisorDto, @@ -163,7 +164,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); expect( - conventionPoleEmploiAdvisorRepo.conventionPoleEmploiUsersAdvisors, + conventionFranceTravailAdvisorRepo.conventionFranceTravailUsersAdvisors, ).toHaveLength(1); // outbox rep @@ -175,7 +176,9 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); it("without open slot then no association and FederatedIdentityNotBoundToConvention event", async () => { - conventionPoleEmploiAdvisorRepo.setConventionPoleEmploiUsersAdvisor([]); + conventionFranceTravailAdvisorRepo.setConventionFranceTravailUsersAdvisor( + [], + ); const conventionDtoFromEvent = new ConventionDtoBuilder() .withId(conventionId) @@ -187,7 +190,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); expectToEqual( - conventionPoleEmploiAdvisorRepo.conventionPoleEmploiUsersAdvisors, + conventionFranceTravailAdvisorRepo.conventionFranceTravailUsersAdvisors, [], ); diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.ts b/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.ts similarity index 84% rename from back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.ts rename to back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.ts index 125a2ecbc4..d7abf585a6 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.ts @@ -17,13 +17,13 @@ import { import { chooseValidAdvisor } from "../entities/ConventionFranceTravailAdvisorEntity"; import { FtConnectGateway } from "../port/FtConnectGateway"; -export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalUseCase< +export class LinkFranceTravailAdvisorAndRedirectToConvention extends TransactionalUseCase< string, AbsoluteUrl > { protected inputSchema = z.string(); - readonly #peConnectGateway: FtConnectGateway; + readonly #ftConnectGateway: FtConnectGateway; readonly #baseUrlForRedirect: AbsoluteUrl; @@ -35,7 +35,7 @@ export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalU super(uowPerformer); this.#baseUrlForRedirect = baseUrlForRedirect; - this.#peConnectGateway = peConnectGateway; + this.#ftConnectGateway = peConnectGateway; } protected async _execute( @@ -43,7 +43,7 @@ export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalU uow: UnitOfWork, ): Promise { const accessToken = - await this.#peConnectGateway.getAccessToken(authorizationCode); + await this.#ftConnectGateway.getAccessToken(authorizationCode); return accessToken ? this.#onAccessToken(accessToken, uow) : this.#makeRedirectUrl({ @@ -60,7 +60,7 @@ export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalU async #onAccessToken(accessToken: AccessTokenDto, uow: UnitOfWork) { const userAndAdvisors = - await this.#peConnectGateway.getUserAndAdvisors(accessToken); + await this.#ftConnectGateway.getUserAndAdvisors(accessToken); if (!userAndAdvisors) return this.#makeRedirectUrl({ fedIdProvider: "peConnect", @@ -76,7 +76,7 @@ export class LinkPoleEmploiAdvisorAndRedirectToConvention extends TransactionalU }; if (peUserAndAdvisor.user.isJobseeker) - await uow.conventionPoleEmploiAdvisorRepository.openSlotForNextConvention( + await uow.conventionFranceTravailAdvisorRepository.openSlotForNextConvention( peUserAndAdvisor, ); diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.unit.test.ts b/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.unit.test.ts similarity index 51% rename from back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.unit.test.ts rename to back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.unit.test.ts index 202e70d70e..c36874a0f9 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/LinkPoleEmploiAdvisorAndRedirectToConvention.unit.test.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.unit.test.ts @@ -5,7 +5,7 @@ import { createInMemoryUow, } from "../../../unit-of-work/adapters/createInMemoryUow"; import { CONVENTION_ID_DEFAULT_UUID } from "../adapters/InMemoryConventionFranceTravailAdvisorRepository"; -import { InMemoryPeConnectGateway } from "../adapters/pe-connect-gateway/InMemoryPeConnectGateway"; +import { InMemoryPeConnectGateway } from "../adapters/ft-connect-gateway/InMemoryPeConnectGateway"; import { AccessTokenDto } from "../dto/AccessToken.dto"; import { FtConnectAdvisorDto, @@ -13,12 +13,12 @@ import { } from "../dto/FtConnectAdvisor.dto"; import { FtConnectUserDto } from "../dto/FtConnectUserDto"; import { conventionFranceTravailUserAdvisorFromDto } from "../entities/ConventionFranceTravailAdvisorEntity"; -import { LinkPoleEmploiAdvisorAndRedirectToConvention } from "./LinkPoleEmploiAdvisorAndRedirectToConvention"; +import { LinkFranceTravailAdvisorAndRedirectToConvention } from "./LinkFranceTravailAdvisorAndRedirectToConvention"; -describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { +describe("LinkFranceTravailAdvisorAndRedirectToConvention", () => { let uow: InMemoryUnitOfWork; - let usecase: LinkPoleEmploiAdvisorAndRedirectToConvention; - let peConnectGateway: InMemoryPeConnectGateway; + let linkFtAdvisorAndRedirectToConvention: LinkFranceTravailAdvisorAndRedirectToConvention; + let ftConnectGateway: InMemoryPeConnectGateway; const baseurl = "https://plop"; const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; @@ -26,33 +26,34 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { beforeEach(() => { uow = createInMemoryUow(); - peConnectGateway = new InMemoryPeConnectGateway(); - usecase = new LinkPoleEmploiAdvisorAndRedirectToConvention( - new InMemoryUowPerformer(uow), - peConnectGateway, - baseurl, - ); + ftConnectGateway = new InMemoryPeConnectGateway(); + linkFtAdvisorAndRedirectToConvention = + new LinkFranceTravailAdvisorAndRedirectToConvention( + new InMemoryUowPerformer(uow), + ftConnectGateway, + baseurl, + ); }); describe("Pe Connect correctly identify OAuth", () => { it("the returned conventionAdvisor gets stored", async () => { - peConnectGateway.setAccessToken(accessToken); - peConnectGateway.setUser(peJobseekerUser); - peConnectGateway.setAdvisors([ - pePlacementAdvisor, - peIndemnisationAdvisor, + ftConnectGateway.setAccessToken(accessToken); + ftConnectGateway.setUser(ftJobseekerUser); + ftConnectGateway.setAdvisors([ + ftPlacementAdvisor, + ftIndemnisationAdvisor, ]); - await usecase.execute(authorizationCode); + await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); expectToEqual( - uow.conventionPoleEmploiAdvisorRepository - .conventionPoleEmploiUsersAdvisors, + uow.conventionFranceTravailAdvisorRepository + .conventionFranceTravailUsersAdvisors, [ conventionFranceTravailUserAdvisorFromDto( { - advisor: pePlacementAdvisor, - user: peJobseekerUser, + advisor: ftPlacementAdvisor, + user: ftJobseekerUser, }, CONVENTION_ID_DEFAULT_UUID, ), @@ -61,24 +62,24 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { }); it("only PLACEMENT and CAPEMPLOI advisor types are valid for conventionAdvisor", async () => { - peConnectGateway.setAccessToken(accessToken); - peConnectGateway.setUser(peJobseekerUser); - peConnectGateway.setAdvisors([ - peIndemnisationAdvisor, - pePlacementAdvisor, - peCapemploiAdvisor, + ftConnectGateway.setAccessToken(accessToken); + ftConnectGateway.setUser(ftJobseekerUser); + ftConnectGateway.setAdvisors([ + ftIndemnisationAdvisor, + ftPlacementAdvisor, + ftCapEmploiAdvisor, ]); - await usecase.execute(authorizationCode); + await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); expectToEqual( - uow.conventionPoleEmploiAdvisorRepository - .conventionPoleEmploiUsersAdvisors, + uow.conventionFranceTravailAdvisorRepository + .conventionFranceTravailUsersAdvisors, [ conventionFranceTravailUserAdvisorFromDto( { - advisor: peCapemploiAdvisor, - user: peJobseekerUser, + advisor: ftCapEmploiAdvisor, + user: ftJobseekerUser, }, CONVENTION_ID_DEFAULT_UUID, ), @@ -87,11 +88,12 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { }); it("the OAuth info and federated identity are present in the redirect url query parameters", async () => { - peConnectGateway.setAccessToken(accessToken); - peConnectGateway.setUser(peJobseekerUser); - peConnectGateway.setAdvisors([pePlacementAdvisor]); + ftConnectGateway.setAccessToken(accessToken); + ftConnectGateway.setUser(ftJobseekerUser); + ftConnectGateway.setAdvisors([ftPlacementAdvisor]); - const urlWithQueryParams = await usecase.execute(authorizationCode); + const urlWithQueryParams = + await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); expect(urlWithQueryParams).toBe( `${baseurl}/demande-immersion?email=john.doe@gmail.com&firstName=John&lastName=Doe&fedId=${userPeExternalId}&fedIdProvider=peConnect`, @@ -101,67 +103,71 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { describe("Wrong path", () => { it("On PeConnect auth failure", async () => { - const urlWithQueryParams = await usecase.execute(authorizationCode); + const urlWithQueryParams = + await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); expect(urlWithQueryParams).toBe( `${baseurl}/demande-immersion?fedIdProvider=peConnect&fedId=${authFailed}`, ); expectToEqual( - uow.conventionPoleEmploiAdvisorRepository - .conventionPoleEmploiUsersAdvisors, + uow.conventionFranceTravailAdvisorRepository + .conventionFranceTravailUsersAdvisors, [], ); }); it("On PeConnect not user info", async () => { - peConnectGateway.setAccessToken(accessToken); - peConnectGateway.setUser(undefined); - peConnectGateway.setAdvisors([pePlacementAdvisor]); - const urlWithQueryParams = await usecase.execute(authorizationCode); + ftConnectGateway.setAccessToken(accessToken); + ftConnectGateway.setUser(undefined); + ftConnectGateway.setAdvisors([ftPlacementAdvisor]); + const urlWithQueryParams = + await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); expect(urlWithQueryParams).toBe( `${baseurl}/demande-immersion?fedIdProvider=peConnect&fedId=${authFailed}`, ); expectToEqual( - uow.conventionPoleEmploiAdvisorRepository - .conventionPoleEmploiUsersAdvisors, + uow.conventionFranceTravailAdvisorRepository + .conventionFranceTravailUsersAdvisors, [], ); }); it("On PeConnected and is not jobseeker should not open slot and provide convention url with notJobSeeker peConnect mode", async () => { - peConnectGateway.setAccessToken(accessToken); - peConnectGateway.setUser(peNotJobseekerUser); + ftConnectGateway.setAccessToken(accessToken); + ftConnectGateway.setUser(ftNotJobseekerUser); - const urlWithQueryParams = await usecase.execute(authorizationCode); + const urlWithQueryParams = + await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); expect(urlWithQueryParams).toBe( `${baseurl}/demande-immersion?email=john.doe@gmail.com&firstName=John&lastName=Doe&fedId=${notJobSeeker}&fedIdProvider=peConnect`, ); expectToEqual( - uow.conventionPoleEmploiAdvisorRepository - .conventionPoleEmploiUsersAdvisors, + uow.conventionFranceTravailAdvisorRepository + .conventionFranceTravailUsersAdvisors, [], ); }); }); it("On PeConnected and is jobseeker but no advisors should open slot", async () => { - peConnectGateway.setAccessToken(accessToken); - peConnectGateway.setUser(peJobseekerUser); + ftConnectGateway.setAccessToken(accessToken); + ftConnectGateway.setUser(ftJobseekerUser); - const urlWithQueryParams = await usecase.execute(authorizationCode); + const urlWithQueryParams = + await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); expect(urlWithQueryParams).toBe( - `${baseurl}/demande-immersion?email=john.doe@gmail.com&firstName=John&lastName=Doe&fedId=${peJobseekerUser.peExternalId}&fedIdProvider=peConnect`, + `${baseurl}/demande-immersion?email=john.doe@gmail.com&firstName=John&lastName=Doe&fedId=${ftJobseekerUser.peExternalId}&fedIdProvider=peConnect`, ); expectToEqual( - uow.conventionPoleEmploiAdvisorRepository - .conventionPoleEmploiUsersAdvisors, + uow.conventionFranceTravailAdvisorRepository + .conventionFranceTravailUsersAdvisors, [ conventionFranceTravailUserAdvisorFromDto( { - user: peJobseekerUser, + user: ftJobseekerUser, advisor: undefined, }, CONVENTION_ID_DEFAULT_UUID, @@ -171,14 +177,14 @@ describe("LinkPoleEmploiAdvisorAndRedirectToConvention", () => { }); }); -const peJobseekerUser: FtConnectUserDto = { +const ftJobseekerUser: FtConnectUserDto = { isJobseeker: true, firstName: "John", lastName: "Doe", peExternalId: "749dd14f-c82a-48b1-b1bb-fffc5467e4d4", email: "john.doe@gmail.com", }; -const peNotJobseekerUser: FtConnectUserDto = { +const ftNotJobseekerUser: FtConnectUserDto = { isJobseeker: false, firstName: "John", lastName: "Doe", @@ -186,22 +192,22 @@ const peNotJobseekerUser: FtConnectUserDto = { email: "john.doe@gmail.com", }; -const pePlacementAdvisor: FtConnectImmersionAdvisorDto = { - email: "jane.smith@pole-emploi.net", +const ftPlacementAdvisor: FtConnectImmersionAdvisorDto = { + email: "jane.smith@france-travail.net", lastName: "Smith", firstName: "Jane", type: "PLACEMENT", }; -const peIndemnisationAdvisor: FtConnectAdvisorDto = { - email: "017jean.dupont@pole-emploi.net", +const ftIndemnisationAdvisor: FtConnectAdvisorDto = { + email: "017jean.dupont@france-travail.net", firstName: "Jean", lastName: "Dupont", type: "INDEMNISATION", }; -const peCapemploiAdvisor: FtConnectImmersionAdvisorDto = { - email: "elsa.oldenburg@pole-emploi.net", +const ftCapEmploiAdvisor: FtConnectImmersionAdvisorDto = { + email: "elsa.oldenburg@france-travail.net", lastName: "Oldenburg", firstName: "Elsa", type: "CAPEMPLOI", diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.ts b/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.ts similarity index 94% rename from back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.ts rename to back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.ts index 50fc361071..67668b26c2 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.ts @@ -6,7 +6,7 @@ import { TimeGateway } from "../../../time-gateway/ports/TimeGateway"; import { UnitOfWork } from "../../../unit-of-work/ports/UnitOfWork"; import { UnitOfWorkPerformer } from "../../../unit-of-work/ports/UnitOfWorkPerformer"; -export class NotifyPoleEmploiUserAdvisorOnConventionFullySigned extends TransactionalUseCase { +export class NotifyFranceTravailUserAdvisorOnConventionFullySigned extends TransactionalUseCase { protected inputSchema = withConventionSchema; readonly #saveNotificationAndRelatedEvent: SaveNotificationAndRelatedEvent; @@ -33,7 +33,7 @@ export class NotifyPoleEmploiUserAdvisorOnConventionFullySigned extends Transact uow: UnitOfWork, ): Promise { const [conventionPeAdvisor, convention] = await Promise.all([ - uow.conventionPoleEmploiAdvisorRepository.getByConventionId( + uow.conventionFranceTravailAdvisorRepository.getByConventionId( conventionFromEvent.id, ), uow.conventionRepository.getById(conventionFromEvent.id), diff --git a/back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.unit.test.ts b/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.unit.test.ts similarity index 76% rename from back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.unit.test.ts rename to back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.unit.test.ts index 64bd0c1cb9..672b03f42e 100644 --- a/back/src/domains/core/authentication/pe-connect/use-cases/NotifyPoleEmploiUserAdvisorOnConventionFullySigned.unit.test.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.unit.test.ts @@ -20,11 +20,30 @@ import { import { UuidV4Generator } from "../../../uuid-generator/adapters/UuidGeneratorImplementations"; import { FtUserAndAdvisor } from "../dto/FtConnect.dto"; import { FtConnectImmersionAdvisorDto } from "../dto/FtConnectAdvisor.dto"; -import { NotifyPoleEmploiUserAdvisorOnConventionFullySigned } from "./NotifyPoleEmploiUserAdvisorOnConventionFullySigned"; +import { NotifyFranceTravailUserAdvisorOnConventionFullySigned } from "./NotifyFranceTravailUserAdvisorOnConventionFullySigned"; + +describe("NotifyFranceTravailUserAdvisorOnConventionFullySigned", () => { + const conventionId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; + const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; + const advisor: FtConnectImmersionAdvisorDto = { + email: "elsa.oldenburg@pole-emploi.net", + firstName: "Elsa", + lastName: "Oldenburg", + type: "CAPEMPLOI", + }; + const userAdvisorDto: FtUserAndAdvisor = { + advisor, + user: { + peExternalId: userPeExternalId, + email: "", + firstName: "", + isJobseeker: true, + lastName: "", + }, + }; -describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { let uow: InMemoryUnitOfWork; - let usecase: NotifyPoleEmploiUserAdvisorOnConventionFullySigned; + let notifyFranceTravailUserAdvisorOnConventionFullySigned: NotifyFranceTravailUserAdvisorOnConventionFullySigned; let agency: AgencyWithUsersRights; const timeGateway = new CustomTimeGateway(); let expectSavedNotificationsAndEvents: ExpectSavedNotificationsAndEvents; @@ -42,12 +61,13 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { timeGateway, ); - usecase = new NotifyPoleEmploiUserAdvisorOnConventionFullySigned( - new InMemoryUowPerformer(uow), - saveNotificationAndRelatedEvent, - fakeGenerateMagicLinkUrlFn, - timeGateway, - ); + notifyFranceTravailUserAdvisorOnConventionFullySigned = + new NotifyFranceTravailUserAdvisorOnConventionFullySigned( + new InMemoryUowPerformer(uow), + saveNotificationAndRelatedEvent, + fakeGenerateMagicLinkUrlFn, + timeGateway, + ); }); it("should resolve to undefined if the convention France Travail OAuth advisor is not found", async () => { @@ -57,7 +77,9 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { .build(); expect( - await usecase.execute({ convention: conventionDtoFromEvent }), + await notifyFranceTravailUserAdvisorOnConventionFullySigned.execute({ + convention: conventionDtoFromEvent, + }), ).toBeUndefined(); }); @@ -79,7 +101,7 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { .build(); uow.conventionRepository.setConventions([conventionDtoFromEvent]); - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [ { peExternalId: userAdvisorDto.user.peExternalId, @@ -90,7 +112,9 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { ], ); - await usecase.execute({ convention: conventionDtoFromEvent }); + await notifyFranceTravailUserAdvisorOnConventionFullySigned.execute({ + convention: conventionDtoFromEvent, + }); expectSavedNotificationsAndEvents({ emails: [ @@ -144,7 +168,7 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { .build(); uow.conventionRepository.setConventions([conventionDtoFromEvent]); - uow.conventionPoleEmploiAdvisorRepository.setConventionPoleEmploiUsersAdvisor( + uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [ { advisor: undefined, @@ -155,29 +179,12 @@ describe("NotifyPoleEmploiUserAdvisorOnConventionFullySigned", () => { ], ); - await usecase.execute({ convention: conventionDtoFromEvent }); + await notifyFranceTravailUserAdvisorOnConventionFullySigned.execute({ + convention: conventionDtoFromEvent, + }); expectSavedNotificationsAndEvents({ emails: [], }); }); }); - -const conventionId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; -const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; -const advisor: FtConnectImmersionAdvisorDto = { - email: "elsa.oldenburg@pole-emploi.net", - firstName: "Elsa", - lastName: "Oldenburg", - type: "CAPEMPLOI", -}; -const userAdvisorDto: FtUserAndAdvisor = { - advisor, - user: { - peExternalId: userPeExternalId, - email: "", - firstName: "", - isJobseeker: true, - lastName: "", - }, -}; diff --git a/back/src/domains/core/events/subscribeToEvents.ts b/back/src/domains/core/events/subscribeToEvents.ts index ff5bc6adf1..be34451de6 100644 --- a/back/src/domains/core/events/subscribeToEvents.ts +++ b/back/src/domains/core/events/subscribeToEvents.ts @@ -41,40 +41,40 @@ const getUseCasesByTopics = ( FederatedIdentityBoundToConvention: [ useCases.notifyToAgencyConventionSubmitted, useCases.notifySignatoriesThatConventionSubmittedNeedsSignature, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], FederatedIdentityNotBoundToConvention: [ useCases.notifyToAgencyConventionSubmitted, useCases.notifySignatoriesThatConventionSubmittedNeedsSignature, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], ConventionSubmittedAfterModification: [ useCases.notifySignatoriesThatConventionSubmittedNeedsSignatureAfterNotification, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], ConventionPartiallySigned: [ useCases.notifyLastSigneeThatConventionHasBeenSigned, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], ConventionFullySigned: [ useCases.notifyLastSigneeThatConventionHasBeenSigned, useCases.notifyNewConventionNeedsReview, - useCases.notifyPoleEmploiUserAdvisorOnConventionFullySigned, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.notifyFranceTravailUserAdvisorOnConventionFullySigned, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], ConventionAcceptedByCounsellor: [ useCases.notifyNewConventionNeedsReview, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], ConventionAcceptedByValidator: [ useCases.notifyAllActorsOfFinalConventionValidation, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, useCases.addEstablishmentLead, { @@ -88,21 +88,21 @@ const getUseCasesByTopics = ( ConventionRequiresModification: [ useCases.notifyActorThatConventionNeedsModifications, useCases.broadcastToPartnersOnConventionUpdates, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, ], ConventionRejected: [ useCases.notifyAllActorsThatConventionIsRejected, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], ConventionCancelled: [ useCases.notifyAllActorsThatConventionIsCancelled, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], ConventionDeprecated: [ useCases.notifyAllActorsThatConventionIsDeprecated, - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], ConventionReminderRequired: [useCases.notifyConventionReminder], @@ -174,7 +174,7 @@ const getUseCasesByTopics = ( //partnersConvention related PartnerErroredConventionMarkedAsHandled: [], ConventionBroadcastRequested: [ - useCases.broadcastToPoleEmploiOnConventionUpdates, + useCases.broadcastToFranceTravailOnConventionUpdates, useCases.broadcastToPartnersOnConventionUpdates, ], }); diff --git a/back/src/domains/core/unit-of-work/adapters/createInMemoryUow.ts b/back/src/domains/core/unit-of-work/adapters/createInMemoryUow.ts index d1cc8982dd..c6c1e9438a 100644 --- a/back/src/domains/core/unit-of-work/adapters/createInMemoryUow.ts +++ b/back/src/domains/core/unit-of-work/adapters/createInMemoryUow.ts @@ -17,9 +17,9 @@ import { InMemoryGroupRepository } from "../../../establishment/adapters/InMemor import { InMemorySearchMadeRepository } from "../../../establishment/adapters/InMemorySearchMadeRepository"; import { InMemoryEstablishementMarketingRepository } from "../../../marketing/adapters/InMemoryEstablishmentMarketingRepository"; import { InMemoryApiConsumerRepository } from "../../api-consumer/adapters/InMemoryApiConsumerRepository"; +import { InMemoryConventionFranceTravailAdvisorRepository } from "../../authentication/ft-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository"; import { InMemoryOngoingOAuthRepository } from "../../authentication/inclusion-connect/adapters/InMemoryOngoingOAuthRepository"; import { InMemoryUserRepository } from "../../authentication/inclusion-connect/adapters/InMemoryUserRepository"; -import { InMemoryConventionFranceTravailAdvisorRepository } from "../../authentication/pe-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository"; import { InMemoryOutboxQueries } from "../../events/adapters/InMemoryOutboxQueries"; import { InMemoryOutboxRepository } from "../../events/adapters/InMemoryOutboxRepository"; import { InMemoryFeatureFlagRepository } from "../../feature-flags/adapters/InMemoryFeatureFlagRepository"; @@ -54,7 +54,7 @@ export const createInMemoryUow = () => { userRepository, conventionQueries, conventionRepository, - conventionPoleEmploiAdvisorRepository: + conventionFranceTravailAdvisorRepository: new InMemoryConventionFranceTravailAdvisorRepository(), conventionsToSyncRepository: new InMemoryConventionsToSyncRepository(), delegationContactRepository: new InMemoryDelegationContactRepository(), diff --git a/back/src/domains/core/unit-of-work/adapters/createPgUow.ts b/back/src/domains/core/unit-of-work/adapters/createPgUow.ts index bd83e310b9..316387649d 100644 --- a/back/src/domains/core/unit-of-work/adapters/createPgUow.ts +++ b/back/src/domains/core/unit-of-work/adapters/createPgUow.ts @@ -18,9 +18,9 @@ import { PgGroupRepository } from "../../../establishment/adapters/PgGroupReposi import { PgSearchMadeRepository } from "../../../establishment/adapters/PgSearchMadeRepository"; import { PgEstablishmentMarketingRepository } from "../../../marketing/adapters/PgEstablishmentMarketingRepository"; import { PgApiConsumerRepository } from "../../api-consumer/adapters/PgApiConsumerRepository"; +import { PgConventionFranceTravailAdvisorRepository } from "../../authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository"; import { PgOngoingOAuthRepository } from "../../authentication/inclusion-connect/adapters/PgOngoingOAuthRepository"; import { PgUserRepository } from "../../authentication/inclusion-connect/adapters/PgUserRepository"; -import { PgConventionFranceTravailAdvisorRepository } from "../../authentication/pe-connect/adapters/PgConventionFranceTravailAdvisorRepository"; import { PgOutboxQueries } from "../../events/adapters/PgOutboxQueries"; import { PgOutboxRepository } from "../../events/adapters/PgOutboxRepository"; import { PgFeatureFlagRepository } from "../../feature-flags/adapters/PgFeatureFlagRepository"; @@ -38,7 +38,7 @@ export const createPgUow = (transaction: KyselyDb): UnitOfWork => { agencyGroupRepository: new PgAgencyGroupRepository(transaction), apiConsumerRepository: new PgApiConsumerRepository(transaction), userRepository: new PgUserRepository(transaction), - conventionPoleEmploiAdvisorRepository: + conventionFranceTravailAdvisorRepository: new PgConventionFranceTravailAdvisorRepository(transaction), conventionExternalIdRepository: new PgConventionExternalIdRepository( transaction, diff --git a/back/src/domains/core/unit-of-work/ports/UnitOfWork.ts b/back/src/domains/core/unit-of-work/ports/UnitOfWork.ts index a5ea3407e5..58422ebd49 100644 --- a/back/src/domains/core/unit-of-work/ports/UnitOfWork.ts +++ b/back/src/domains/core/unit-of-work/ports/UnitOfWork.ts @@ -17,9 +17,9 @@ import { GroupRepository } from "../../../establishment/ports/GroupRepository"; import { SearchMadeRepository } from "../../../establishment/ports/SearchMadeRepository"; import { EstablishmentMarketingRepository } from "../../../marketing/ports/EstablishmentMarketingRepository"; import { ApiConsumerRepository } from "../../api-consumer/ports/ApiConsumerRepository"; +import { ConventionFranceTravailAdvisorRepository } from "../../authentication/ft-connect/port/ConventionFranceTravailAdvisorRepository"; import { OngoingOAuthRepository } from "../../authentication/inclusion-connect/port/OngoingOAuthRepositiory"; import { UserRepository } from "../../authentication/inclusion-connect/port/UserRepository"; -import { ConventionFranceTravailAdvisorRepository } from "../../authentication/pe-connect/port/ConventionFranceTravailAdvisorRepository"; import { OutboxQueries } from "../../events/ports/OutboxQueries"; import { OutboxRepository } from "../../events/ports/OutboxRepository"; import { FeatureFlagRepository } from "../../feature-flags/ports/FeatureFlagRepository"; @@ -36,7 +36,7 @@ export type UnitOfWork = { apiConsumerRepository: ApiConsumerRepository; assessmentRepository: AssessmentRepository; conventionExternalIdRepository: ConventionExternalIdRepository; - conventionPoleEmploiAdvisorRepository: ConventionFranceTravailAdvisorRepository; + conventionFranceTravailAdvisorRepository: ConventionFranceTravailAdvisorRepository; conventionQueries: ConventionQueries; conventionRepository: ConventionRepository; conventionsToSyncRepository: ConventionsToSyncRepository; diff --git a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts index 3e03b9fac3..559b25c795 100644 --- a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts +++ b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts @@ -53,18 +53,18 @@ describe("HttpLaBonneBoiteGateway", () => { const config = AppConfig.createFromEnv(); const peFetchSharedClient = createPeFetchSharedClient(config); laBonneBoiteGateway = new HttpLaBonneBoiteGateway( - createFetchSharedClient(createLbbRoutes(config.peApiUrl), fetch), + createFetchSharedClient(createLbbRoutes(config.ftApiUrl), fetch), new HttpFranceTravailGateway( peFetchSharedClient, new InMemoryCachingGateway( new RealTimeGateway(), "expires_in", ), - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ), - config.poleEmploiClientId, + config.franceTravailClientId, ); }); diff --git a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts index 6d4ab4487e..c7557ad0c4 100644 --- a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts +++ b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.ts @@ -31,8 +31,8 @@ export class HttpLaBonneBoiteGateway implements LaBonneBoiteGateway { constructor( private readonly httpClient: HttpClient, - private readonly poleEmploiGateway: FranceTravailGateway, - private readonly poleEmploiClientId: string, + private readonly franceTravailGateway: FranceTravailGateway, + private readonly franceTravailClientId: string, ) {} public async searchCompanies({ @@ -44,8 +44,8 @@ export class HttpLaBonneBoiteGateway implements LaBonneBoiteGateway { }: LaBonneBoiteRequestParams): Promise { return this.#limiter .schedule(async () => { - const { access_token } = await this.poleEmploiGateway.getAccessToken( - `application_${this.poleEmploiClientId} ${lbbV2App}`, + const { access_token } = await this.franceTravailGateway.getAccessToken( + `application_${this.franceTravailClientId} ${lbbV2App}`, ); return this.httpClient.getCompanies({ headers: { @@ -100,8 +100,8 @@ export class HttpLaBonneBoiteGateway implements LaBonneBoiteGateway { ): Promise { return this.#limiter .schedule(async () => { - const { access_token } = await this.poleEmploiGateway.getAccessToken( - `application_${this.poleEmploiClientId} ${lbbV2App}`, + const { access_token } = await this.franceTravailGateway.getAccessToken( + `application_${this.franceTravailClientId} ${lbbV2App}`, ); return this.httpClient.getCompany({ headers: { diff --git a/back/src/scripts/triggerResyncOldConventionsToPe.ts b/back/src/scripts/triggerResyncOldConventionsToPe.ts index 155f982819..40787b835b 100644 --- a/back/src/scripts/triggerResyncOldConventionsToPe.ts +++ b/back/src/scripts/triggerResyncOldConventionsToPe.ts @@ -2,7 +2,7 @@ import { AccessTokenResponse, AppConfig } from "../config/bootstrap/appConfig"; import { createGetPgPoolFn } from "../config/bootstrap/createGateways"; import { createPeAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; import { HttpFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; -import { ResyncOldConventionsToPe } from "../domains/convention/use-cases/ResyncOldConventionsToPe"; +import { ResyncOldConventionsToFt } from "../domains/convention/use-cases/ResyncOldConventionsToFt"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../domains/core/time-gateway/adapters/RealTimeGateway"; @@ -18,11 +18,11 @@ const executeUsecase = async () => { const timeGateway = new RealTimeGateway(); const peAxiosHttpClient = createPeAxiosSharedClient(config); - const httpPoleEmploiGateway = new HttpFranceTravailGateway( + const httpFranceTravailGateway = new HttpFranceTravailGateway( peAxiosHttpClient, new InMemoryCachingGateway(timeGateway, "expires_in"), - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ); @@ -31,18 +31,18 @@ const executeUsecase = async () => { createGetPgPoolFn(config), ); - const resyncOldConventionsToPeUsecase = new ResyncOldConventionsToPe( + const resyncOldConventionsToFtUsecase = new ResyncOldConventionsToFt( uowPerformer, - httpPoleEmploiGateway, + httpFranceTravailGateway, timeGateway, config.maxConventionsToSyncWithPe, ); - return resyncOldConventionsToPeUsecase.execute(); + return resyncOldConventionsToFtUsecase.execute(); }; handleCRONScript( - "resyncOldConventionToPE", + "resyncOldConventionToFT", config, executeUsecase, (report) => { diff --git a/back/src/scripts/triggerUpdateLegacyRomeV3.ts b/back/src/scripts/triggerUpdateLegacyRomeV3.ts index 5e199e2390..861b32680d 100644 --- a/back/src/scripts/triggerUpdateLegacyRomeV3.ts +++ b/back/src/scripts/triggerUpdateLegacyRomeV3.ts @@ -40,15 +40,15 @@ const main = async () => { const franceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ); const httpRome3Gateway = new HttpRome3Gateway( - createAxiosSharedClient(makeRome3Routes(config.peApiUrl), axios), + createAxiosSharedClient(makeRome3Routes(config.ftApiUrl), axios), franceTravailGateway, - config.poleEmploiClientId, + config.franceTravailClientId, ); const numberOfAppellations = await db.transaction().execute(async (trx) => { diff --git a/back/src/scripts/triggerUpdateRomeData.ts b/back/src/scripts/triggerUpdateRomeData.ts index fd80c0d5b7..f591378d1c 100644 --- a/back/src/scripts/triggerUpdateRomeData.ts +++ b/back/src/scripts/triggerUpdateRomeData.ts @@ -40,15 +40,15 @@ const main = async () => { const franceTravailGateway = new HttpFranceTravailGateway( createPeAxiosSharedClient(config), cachingGateway, - config.peApiUrl, - config.poleEmploiAccessTokenConfig, + config.ftApiUrl, + config.franceTravailAccessTokenConfig, noRetries, ); const httpRome4Gateway = new HttpRome4Gateway( - createAxiosSharedClient(makeRome4Routes(config.peApiUrl), axios), + createAxiosSharedClient(makeRome4Routes(config.ftApiUrl), axios), franceTravailGateway, - config.poleEmploiClientId, + config.franceTravailClientId, ); const numberOfRomes = await db.transaction().execute(async (trx) => { diff --git a/back/src/utils/buildTestApp.ts b/back/src/utils/buildTestApp.ts index 0232670dc0..e5a9e42bf8 100644 --- a/back/src/utils/buildTestApp.ts +++ b/back/src/utils/buildTestApp.ts @@ -6,8 +6,8 @@ import { createApp } from "../config/bootstrap/server"; import { InMemoryFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/InMemoryFranceTravailGateway"; import { InMemoryAddressGateway } from "../domains/core/address/adapters/InMemoryAddressGateway"; import { InMemorySubscribersGateway } from "../domains/core/api-consumer/adapters/InMemorySubscribersGateway"; +import { InMemoryPeConnectGateway } from "../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway"; import { InMemoryOAuthGateway } from "../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/InMemoryOAuthGateway"; -import { InMemoryPeConnectGateway } from "../domains/core/authentication/pe-connect/adapters/pe-connect-gateway/InMemoryPeConnectGateway"; import { StubDashboardGateway } from "../domains/core/dashboard/adapters/StubDashboardGateway"; import { InMemoryEmailValidationGateway } from "../domains/core/email-validation/adapters/InMemoryEmailValidationGateway"; import { BasicEventCrawler } from "../domains/core/events/adapters/EventCrawlerImplementations"; @@ -40,7 +40,7 @@ export type InMemoryGateways = { pdfGeneratorGateway: InMemoryPdfGeneratorGateway; laBonneBoiteGateway: InMemoryLaBonneBoiteGateway; passEmploiGateway: InMemoryPassEmploiGateway; - poleEmploiGateway: InMemoryFranceTravailGateway; + franceTravailGateway: InMemoryFranceTravailGateway; oAuthGateway: InMemoryOAuthGateway; documentGateway: NotImplementedDocumentGateway; dashboardGateway: StubDashboardGateway; diff --git a/front/src/assets/img/pole-emploi-logo.png b/front/src/assets/img/pole-emploi-logo.png deleted file mode 100644 index 8e6395a9e0352df055f20a53530a69b4206e9898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3465 zcmV;44R-R0P)Tw*iNg6G!QRe!2yB~JHUPH?(}(QcklKNha|o; zY9n4)&+N?X%)HP0G4ITrpc_P+hbN*bGFxn$HcCM)BuPiHt}2C)L~;~=4Jow*+17zy zuB{)T8$^O;nYxF@q7)AIXo5CtM9~_QRRDny(tr@T3E0S|kzPf~WyzQ@AhNf=tzi$% zGR+zY9ec;3HFK#4QtpY6tgQuC5gw2k_eNED?>(Q-B7X%yoHuRC*wP?d_Wtfmjk5;E ztbp*u-eKJeR_zT5YOW(oM0gaJLE$1GTmT&Ai|h0Ga~TVdDWxTM{Bh&$J7^ZD>>zZ$ z@J6#ufy5lmj?ULu<;h`?s8I6PfZ@ygw1wZZu#R`9(lTq?qnED8_Qa+&Nh%|i6@>La z8`8DP$nd-XMQa1{I?NS1Wl$gBUeQVK(v<) zh_ZnY-vs~yVyL!)^k^{8xW}~ms})MU7>w$QAjO+vw4#14-BwqV>swNOqQ^hDOc~SO zUE6VYU&A58pfXU9%0yNw)f)=(vy_>|JogDA{3_MHBAXwzoSJ68*920EGfhx0=gffj{6x)0}~QzM%7q z%ce zS^)kwa)OS$dybBtO{(^{&aa_|n{TBDnie_z%$ZA(CpOX5pY(0N(6roGaP;_$HKJrq zSpDR$HwFTM!Ns2os^EwG4$trO3e3Y9dSPu1?fClrR6nmu_2t?APyaGP2i`j6ep|Rw ztXq8xJ^Aq6s;!)yq~w<$B)T{?p{49)wT3YxXQ@$%l)jwp*31l<=?rD?WZg8Aa-Vb> zY1&EElP`a)ZN)VJyfSLg{v*fo{kY#`(^-|iJUm8!K73rY)#lEnz{=HxP`uXGv>uuv zl?+1WN-AC{On1T_(=HgPw6EL)Ctr5Q()wIKo=X1qvzThLR7Acy%?W^U{OklZ#-bE`@P7Kx=5B>P5!Iu$$xm+*C4nF;TMvb#l6)@M zDX@QUWguU$s1ueHoyXBOb zzM8VhM8Gdxl~7E%63%9%L>)^}iaK9;f0ur zZiTBg@b=DNr&uF~C*_$)=rQ7Vy23YLf5US9^x|dm^y1}RG(##mVw5uT8);=oO$<`x$zp`i8>NC=~plAmnW1qSXe?GAl5c7r*Czwhp8xSa;5KlOG-Pk)b+Io#K3b; zQG=Nx`|x3D!AxL~duWCfpb{xH{-#k;zdDXt>ueGbG24bvc|6kpt{k7udC6%yoe{4O zAEmFfe}O6yB(aa+rEhJ^3VL*XtC*a+OsCJDqcrvnix<|4hwf{pr=NP19^Y^;RRn`% zKl>cXqyJ%F(bqU`yht;olDE=KHFrJ+5abZ$7cb#NcG7$C)_Ez^O^fr!jo6Xie%lgy z{>R@Db84z`lafVaC@1RrN);!ZIYZip4(@W#va@5|R05T(2~3%DZy6N}R@Fj(TOAF6 zg1Qn1mx9mBUCj`V)3>qi*6O>1raB^5-L^z{411d4ETx=E6)N+)_Kj~Q zt;tJUZ#!!|O(jxUKwzq>X*y&Jb3NqLfSL2&mQ4YZx15NH<7+kpPMJm2F+kjoP3Y3( zhxE#;N5tSuuW|_@&J0!8M5qF%&XxsknAVN1QZPP*z(1tucBD8gI!bLQkY5+}c?VF67|U6E5CUg2=7_sX&TGY*lbqq2g) z6xQQ9x*Y2u3soPn|I<%53O7|TJ@%kzn2vNrm~rXMcZqiMhekH zRKqG>h})NpA5C1Z-HF)B0Yr=Px@U|F+rGC8QCkakg`033su)LcBYj3lBW)l{zLTZ8 zd%oSmkH1m6^74*U_-ZFEI+B)U4yG!vthrvN(fH=5(vpv%G29uB)vajZblSS<%F%w> zzG6-KN7a4Yn9u+Nhnq!U&8w!XX+-eSOb;z)L5Pt>>M?AshMZ-MRho&uw) z4tdn~2`$jhJ3BRLA^U~Y22jRYI3j~uKlc?7Hn-((+TA(>b-Rk^R@Cnr;+raWOs`E4 z0V~iG-EepbCDGPxyj9&^cked!`(v0v=lR3W8a&9twrz35^vx(Q_}wwK0&#ev5kama zmG%h0?Fn5D={#|-9VXtQZmEb8EMXj-js!KC#4a(8t9uTUM*z-dxA_Qb4G!}6EggR+ z;WD&^C4V-i>n4e%*mw3Vb)6rW+JRGup<+|Q?Pmv)WKq9e*tfQLrx!s?Jc=XnOZm?% z!@tAMR%eYIvrUn&#D?MP}-J}$w1biSQU08cY;)TX1S;{AdF zseRNQLdR;As{^nGd--sfqGrLE5@QPE+J2?qHx$iNYAu*(GGJo>5uk9YlI<*^>YxSC zVT0_VZ#(0^&R^;Z;8Y{ z9~E8bXrlwb&R(b7-h{dXTt{mAE4PflwsTK1(VN7bNIQ;xlF;sr%AassTR5?V#MuFa zTRiDT!@xN~fSs=n+lFTs{ZOL=sZ=T%5&|nr;jc_^(tJXd`w17?c@!uP=iS8*mj_5w zM{g!Tg%A$lo_AxIQl!R|lyuwi@0&Us#*Z2S^lb@oiLji>PqMcEuMsbaCu1wRsSH%| rHQZ-`H1^^g5z_x3VO0qjR0jGlp=>J_R(+lp00000NkvXXu0mjf2P}@K From 4d594febf40e8d81c87f3ba3c76b021f9477d186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Burkard?= Date: Wed, 15 Jan 2025 11:13:07 +0100 Subject: [PATCH 4/5] rename broadcast to FT service name --- .../inclusionConnectedAllowed.e2e.test.ts | 6 +++--- .../BroadcastConventionAgain.unit.test.ts | 6 +++--- .../BroadcastToFranceTravailOnConventionUpdates.ts | 4 ++-- ...ToFranceTravailOnConventionUpdates.unit.test.ts | 6 +++--- ...PartnersErroredConventionAsHandled.unit.test.ts | 6 +++--- ...roadcastFeedbacksRepository.integration.test.ts | 14 +++++++------- .../ports/BroadcastFeedbacksRepository.ts | 4 ++-- 7 files changed, 23 insertions(+), 23 deletions(-) diff --git a/back/src/adapters/primary/routers/inclusionConnect/inclusionConnectedAllowed.e2e.test.ts b/back/src/adapters/primary/routers/inclusionConnect/inclusionConnectedAllowed.e2e.test.ts index f7ed9481aa..46ae620f09 100644 --- a/back/src/adapters/primary/routers/inclusionConnect/inclusionConnectedAllowed.e2e.test.ts +++ b/back/src/adapters/primary/routers/inclusionConnect/inclusionConnectedAllowed.e2e.test.ts @@ -23,7 +23,7 @@ import { AppConfig } from "../../../../config/bootstrap/appConfig"; import { Gateways } from "../../../../config/bootstrap/createGateways"; import { BasicEventCrawler } from "../../../../domains/core/events/adapters/EventCrawlerImplementations"; import { GenerateInclusionConnectJwt } from "../../../../domains/core/jwt"; -import { broadcastToPeServiceName } from "../../../../domains/core/saved-errors/ports/BroadcastFeedbacksRepository"; +import { broadcastToFtServiceName } from "../../../../domains/core/saved-errors/ports/BroadcastFeedbacksRepository"; import { InMemoryUnitOfWork } from "../../../../domains/core/unit-of-work/adapters/createInMemoryUow"; import { toAgencyWithRights } from "../../../../utils/agency"; import { buildTestApp } from "../../../../utils/buildTestApp"; @@ -353,7 +353,7 @@ describe("InclusionConnectedAllowedRoutes", () => { ]; inMemoryUow.conventionRepository.setConventions([convention]); await inMemoryUow.broadcastFeedbacksRepository.save({ - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, consumerName: "France Travail", consumerId: null, subscriberErrorFeedback: { message: "Some message" }, @@ -376,7 +376,7 @@ describe("InclusionConnectedAllowedRoutes", () => { inMemoryUow.broadcastFeedbacksRepository.broadcastFeedbacks, [ { - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, consumerName: "France Travail", consumerId: null, subscriberErrorFeedback: { diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastConventionAgain.unit.test.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastConventionAgain.unit.test.ts index bf78dbd3af..a6862f90af 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastConventionAgain.unit.test.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastConventionAgain.unit.test.ts @@ -11,7 +11,7 @@ import { } from "shared"; import { toAgencyWithRights } from "../../../../utils/agency"; import { makeCreateNewEvent } from "../../../core/events/ports/EventBus"; -import { broadcastToPeServiceName } from "../../../core/saved-errors/ports/BroadcastFeedbacksRepository"; +import { broadcastToFtServiceName } from "../../../core/saved-errors/ports/BroadcastFeedbacksRepository"; import { CustomTimeGateway } from "../../../core/time-gateway/adapters/CustomTimeGateway"; import { TimeGateway } from "../../../core/time-gateway/ports/TimeGateway"; import { InMemoryUowPerformer } from "../../../core/unit-of-work/adapters/InMemoryUowPerformer"; @@ -124,7 +124,7 @@ describe("BroadcastConventionAgain", () => { "trigger ConventionBroadcastAgain event with the whole convention in payload", async (user) => { uow.broadcastFeedbacksRepository.save({ - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, consumerId: "my-consumer-id", consumerName: "My consumer name", requestParams: { @@ -161,7 +161,7 @@ describe("BroadcastConventionAgain", () => { ); uow.broadcastFeedbacksRepository.save({ - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, consumerId: "my-consumer-id", consumerName: "My consumer name", requestParams: { diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts index bdf9e70b20..ec7ccafc72 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.ts @@ -10,7 +10,7 @@ import { } from "shared"; import { agencyWithRightToAgencyDto } from "../../../../utils/agency"; import { TransactionalUseCase } from "../../../core/UseCase"; -import { broadcastToPeServiceName } from "../../../core/saved-errors/ports/BroadcastFeedbacksRepository"; +import { broadcastToFtServiceName } from "../../../core/saved-errors/ports/BroadcastFeedbacksRepository"; import { TimeGateway } from "../../../core/time-gateway/ports/TimeGateway"; import { UnitOfWork } from "../../../core/unit-of-work/ports/UnitOfWork"; import { UnitOfWorkPerformer } from "../../../core/unit-of-work/ports/UnitOfWorkPerformer"; @@ -132,7 +132,7 @@ export class BroadcastToFranceTravailOnConventionUpdates extends TransactionalUs await uow.broadcastFeedbacksRepository.save({ consumerId: null, consumerName: "France Travail", - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, requestParams: { conventionId: convention.id, conventionStatus: convention.status, diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts index b2ec41c121..7fe5bbcc61 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts @@ -10,7 +10,7 @@ import { reasonableSchedule, } from "shared"; import { toAgencyWithRights } from "../../../../utils/agency"; -import { broadcastToPeServiceName } from "../../../core/saved-errors/ports/BroadcastFeedbacksRepository"; +import { broadcastToFtServiceName } from "../../../core/saved-errors/ports/BroadcastFeedbacksRepository"; import { CustomTimeGateway } from "../../../core/time-gateway/adapters/CustomTimeGateway"; import { InMemoryUowPerformer } from "../../../core/unit-of-work/adapters/InMemoryUowPerformer"; import { @@ -115,7 +115,7 @@ describe("Broadcasts events to France Travail", () => { { consumerId: null, consumerName: "France Travail", - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, requestParams: { conventionId: conventionLinkedToFTWithoutFederatedIdentity.id, conventionStatus: conventionLinkedToFTWithoutFederatedIdentity.status, @@ -148,7 +148,7 @@ describe("Broadcasts events to France Travail", () => { { consumerId: null, consumerName: "France Travail", - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, requestParams: { conventionId: conventionLinkedToFTWithoutFederatedIdentity.id, conventionStatus: conventionLinkedToFTWithoutFederatedIdentity.status, diff --git a/back/src/domains/convention/use-cases/partners-errored-convention/MarkPartnersErroredConventionAsHandled.unit.test.ts b/back/src/domains/convention/use-cases/partners-errored-convention/MarkPartnersErroredConventionAsHandled.unit.test.ts index cc878df038..6a1c2cebb3 100644 --- a/back/src/domains/convention/use-cases/partners-errored-convention/MarkPartnersErroredConventionAsHandled.unit.test.ts +++ b/back/src/domains/convention/use-cases/partners-errored-convention/MarkPartnersErroredConventionAsHandled.unit.test.ts @@ -15,7 +15,7 @@ import { } from "../../../core/events/ports/EventBus"; import { BroadcastFeedback, - broadcastToPeServiceName, + broadcastToFtServiceName, } from "../../../core/saved-errors/ports/BroadcastFeedbacksRepository"; import { CustomTimeGateway } from "../../../core/time-gateway/adapters/CustomTimeGateway"; import { InMemoryUowPerformer } from "../../../core/unit-of-work/adapters/InMemoryUowPerformer"; @@ -80,7 +80,7 @@ describe("mark partners errored convention as handled", () => { it("Mark partner errored convention as handled", async () => { const savedErrorConvention: BroadcastFeedback = { - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, consumerName: "Yolo", consumerId: "yolo-id", requestParams: { @@ -154,7 +154,7 @@ describe("mark partners errored convention as handled", () => { const broadcastFeedbacksRepository = uow.broadcastFeedbacksRepository; const savedHandledErrorConvention: BroadcastFeedback = { - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, consumerId: "my-consumer-id", consumerName: "My consumer name", requestParams: { diff --git a/back/src/domains/core/saved-errors/adapters/PgBroadcastFeedbacksRepository.integration.test.ts b/back/src/domains/core/saved-errors/adapters/PgBroadcastFeedbacksRepository.integration.test.ts index c282470c09..5ce7b96a8d 100644 --- a/back/src/domains/core/saved-errors/adapters/PgBroadcastFeedbacksRepository.integration.test.ts +++ b/back/src/domains/core/saved-errors/adapters/PgBroadcastFeedbacksRepository.integration.test.ts @@ -19,7 +19,7 @@ import { BroadcastFeedback, BroadcastFeedbackResponse, ConventionBroadcastRequestParams, - broadcastToPeServiceName, + broadcastToFtServiceName, } from "../ports/BroadcastFeedbacksRepository"; import { PgBroadcastFeedbacksRepository } from "./PgBroadcastFeedbacksRepository"; @@ -210,13 +210,13 @@ describe("PgBroadcastFeedbacksRepository", () => { const conventionId2 = "someId"; const broadcastFeedback1 = await makeBroadcastFeedback({ conventionId: conventionId1, - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, kind: "error", errorMode: "response-error", }); const broadcastFeedback2 = await makeBroadcastFeedback({ conventionId: conventionId1, - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, kind: "error", errorMode: "response-error", }); @@ -228,7 +228,7 @@ describe("PgBroadcastFeedbacksRepository", () => { }); const broadcastFeedback4 = await makeBroadcastFeedback({ conventionId: conventionId2, - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, kind: "error", errorMode: "response-error", }); @@ -315,7 +315,7 @@ describe("PgBroadcastFeedbacksRepository", () => { it("Throw when the saved error is already mark as handle", async () => { const broadcastFeedback1 = await makeBroadcastFeedback({ conventionId: conventionId1, - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, kind: "error", errorMode: "response-error", handledByAgency: true, @@ -348,13 +348,13 @@ describe("PgBroadcastFeedbacksRepository", () => { const firstBroadcast = await makeBroadcastFeedback({ conventionId, - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, kind: "error", occurredAt: new Date("2024-07-01"), }); const lastBroadcast = await makeBroadcastFeedback({ conventionId, - serviceName: broadcastToPeServiceName, + serviceName: broadcastToFtServiceName, kind: "error", occurredAt: new Date("2024-07-31"), }); diff --git a/back/src/domains/core/saved-errors/ports/BroadcastFeedbacksRepository.ts b/back/src/domains/core/saved-errors/ports/BroadcastFeedbacksRepository.ts index a6e902b7ff..06cf268bdd 100644 --- a/back/src/domains/core/saved-errors/ports/BroadcastFeedbacksRepository.ts +++ b/back/src/domains/core/saved-errors/ports/BroadcastFeedbacksRepository.ts @@ -31,8 +31,8 @@ export type BroadcastFeedback = { export const broadcastToPartnersServiceName = "BroadcastToPartnersOnConventionUpdates"; -export const broadcastToPeServiceName = - "PoleEmploiGateway.notifyOnConventionUpdated"; +export const broadcastToFtServiceName = + "FranceTravailGateway.notifyOnConventionUpdated"; export interface BroadcastFeedbacksRepository { save: (broadcastFeedback: BroadcastFeedback) => Promise; From 04efc16eb80373e2444e7c328f3fd937fdc179a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Burkard?= Date: Wed, 15 Jan 2025 11:20:59 +0100 Subject: [PATCH 5/5] rename Pe to Ft --- .../addConventionAndSendMails.e2e.test.ts | 10 +- .../createFtConnectRouter.ts} | 16 +- back/src/config/bootstrap/createGateways.ts | 16 +- back/src/config/bootstrap/createUseCases.ts | 2 +- back/src/config/bootstrap/server.ts | 4 +- .../helpers/createAxiosSharedClients.ts | 2 +- .../helpers/createFetchSharedClients.ts | 2 +- back/src/config/pg/kysely/model/database.ts | 4 +- .../HttpFtAgenciesReferential.manual.test.ts} | 10 +- .../HttpFtAgenciesReferential.ts} | 14 +- .../HttpRome3Gateway.manual.test.ts | 4 +- .../HttpRome3Gateway.ts | 4 +- .../HttpRome4Gateway.manual.test.ts | 4 +- .../HttpRome4Gateway.ts | 6 +- .../InMemoryFtAgenciesReferential.ts | 16 ++ .../InMemoryPeAgenciesReferential.ts | 16 -- ...PgConventionRepository.integration.test.ts | 20 +-- .../FrancetTravailRoutes.ts | 10 +- .../HttpFranceTravailGateway.manual.test.ts | 24 +-- .../convention/ports/FranceTravailGateway.ts | 4 +- .../use-cases/GetConvention.unit.test.ts | 14 +- ... => ResyncOldConventionsToFt.unit.test.ts} | 40 ++--- ...nceTravailOnConventionUpdates.unit.test.ts | 14 +- ...ifyAllActorsOfFinalConventionValidation.ts | 10 +- ...rsOfFinalConventionValidation.unit.test.ts | 10 +- ...otifyNewConventionNeedsReview.unit.test.ts | 148 +++++++++--------- ...fyToAgencyConventionSubmitted.unit.test.ts | 32 ++-- ...onventionFranceTravailAdvisorRepository.ts | 8 +- ...availAdvisorRepository.integration.test.ts | 12 +- .../HttpFtConnectGateway.manual.test.ts | 122 +++++++-------- .../HttpFtConnectGateway.ts | 78 +++++---- ...Gateway.ts => InMemoryFtConnectGateway.ts} | 8 +- .../ft-connect-gateway/ftConnectApi.error.ts | 22 +-- .../ft-connect-gateway/ftConnectApi.routes.ts | 56 +++---- .../ft-connect-gateway/ftConnectApi.schema.ts | 16 +- .../ft-connect/dto/FtConnect.dto.ts | 2 +- .../BindConventionToFederatedIdentity.ts | 8 +- ...ConventionToFederatedIdentity.unit.test.ts | 32 ++-- ...ceTravailAdvisorAndRedirectToConvention.ts | 8 +- ...dvisorAndRedirectToConvention.unit.test.ts | 20 +-- ...availUserAdvisorOnConventionFullySigned.ts | 12 +- ...dvisorOnConventionFullySigned.unit.test.ts | 8 +- .../HttpLaBonneBoiteGateway.manual.test.ts | 4 +- ...eferential.ts => FtAgenciesReferential.ts} | 6 +- .../triggerResyncOldConventionsToPe.ts | 4 +- back/src/scripts/triggerUpdateLegacyRomeV3.ts | 6 +- back/src/scripts/triggerUpdateRomeData.ts | 6 +- back/src/utils/buildTestApp.ts | 4 +- back/src/utils/logger.ts | 2 +- .../forms/convention/ConventionForm.tsx | 8 +- .../convention/ConventionImmersionPage.tsx | 4 +- .../convention/InitiateConventionPage.tsx | 4 +- .../src/app/routes/routeParams/convention.ts | 4 +- shared/src/convention/ConventionDtoBuilder.ts | 4 +- shared/src/convention/convention.dto.ts | 4 +- .../federatedIdentity.dto.ts | 14 +- .../federatedIdentity.schema.ts | 4 +- shared/src/routes/routes.ts | 4 +- 58 files changed, 472 insertions(+), 478 deletions(-) rename back/src/adapters/primary/routers/{peConnect/createPeConnectRouter.ts => ftConnect/createFtConnectRouter.ts} (68%) rename back/src/domains/agency/adapters/{pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts => ft-agencies-referential/HttpFtAgenciesReferential.manual.test.ts} (76%) rename back/src/domains/agency/adapters/{pe-agencies-referential/HttpPeAgenciesReferential.ts => ft-agencies-referential/HttpFtAgenciesReferential.ts} (77%) rename back/src/domains/agency/adapters/{pe-agencies-referential => ft-agencies-referential}/HttpRome3Gateway.manual.test.ts (94%) rename back/src/domains/agency/adapters/{pe-agencies-referential => ft-agencies-referential}/HttpRome3Gateway.ts (94%) rename back/src/domains/agency/adapters/{pe-agencies-referential => ft-agencies-referential}/HttpRome4Gateway.manual.test.ts (95%) rename back/src/domains/agency/adapters/{pe-agencies-referential => ft-agencies-referential}/HttpRome4Gateway.ts (93%) create mode 100644 back/src/domains/agency/adapters/ft-agencies-referential/InMemoryFtAgenciesReferential.ts delete mode 100644 back/src/domains/agency/adapters/pe-agencies-referential/InMemoryPeAgenciesReferential.ts rename back/src/domains/convention/use-cases/{ResyncOldConventionsToPe.unit.test.ts => ResyncOldConventionsToFt.unit.test.ts} (93%) rename back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/{InMemoryPeConnectGateway.ts => InMemoryFtConnectGateway.ts} (84%) rename back/src/domains/establishment/ports/{PeAgenciesReferential.ts => FtAgenciesReferential.ts} (76%) diff --git a/back/src/adapters/primary/routers/convention/addConventionAndSendMails.e2e.test.ts b/back/src/adapters/primary/routers/convention/addConventionAndSendMails.e2e.test.ts index 8d4a22ba9f..95761fe4ce 100644 --- a/back/src/adapters/primary/routers/convention/addConventionAndSendMails.e2e.test.ts +++ b/back/src/adapters/primary/routers/convention/addConventionAndSendMails.e2e.test.ts @@ -221,11 +221,11 @@ describe("Add Convention Notifications, then checks the mails are sent (trigerre await processEventsForEmailToBeSent(eventCrawler); expect(inMemoryUow.notificationRepository.notifications).toHaveLength(3); - const peNotification = gateways.franceTravailGateway.notifications[0]; - expect(peNotification.id).toBe(externalId); - expectToEqual(peNotification.statut, "DEMANDE_A_SIGNER"); - expect(peNotification.originalId).toBe(convention.id); - expect(peNotification.email).toBe(convention.signatories.beneficiary.email); + const ftNotification = gateways.franceTravailGateway.notifications[0]; + expect(ftNotification.id).toBe(externalId); + expectToEqual(ftNotification.statut, "DEMANDE_A_SIGNER"); + expect(ftNotification.originalId).toBe(convention.id); + expect(ftNotification.email).toBe(convention.signatories.beneficiary.email); const sentEmails = gateways.notification.getSentEmails(); expect(sentEmails).toHaveLength(numberOfEmailInitialySent - 1); expectArraysToEqualIgnoringOrder( diff --git a/back/src/adapters/primary/routers/peConnect/createPeConnectRouter.ts b/back/src/adapters/primary/routers/ftConnect/createFtConnectRouter.ts similarity index 68% rename from back/src/adapters/primary/routers/peConnect/createPeConnectRouter.ts rename to back/src/adapters/primary/routers/ftConnect/createFtConnectRouter.ts index fe266f490c..eed82d139c 100644 --- a/back/src/adapters/primary/routers/peConnect/createPeConnectRouter.ts +++ b/back/src/adapters/primary/routers/ftConnect/createFtConnectRouter.ts @@ -1,24 +1,24 @@ import { Router } from "express"; -import { ManagedRedirectError, loginPeConnect, peConnect } from "shared"; +import { ManagedRedirectError, ftConnect, loginFtConnect } from "shared"; import { AppDependencies } from "../../../../config/bootstrap/createAppDependencies"; import { sendRedirectResponseWithManagedErrors } from "../../../../config/helpers/sendRedirectResponseWithManagedErrors"; -import { makePeConnectLoginPageUrl } from "../../../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes"; +import { makeFtConnectLoginPageUrl } from "../../../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes"; -export const createPeConnectRouter = (deps: AppDependencies) => { - const peConnectRouter = Router({ mergeParams: true }); +export const createFtConnectRouter = (deps: AppDependencies) => { + const ftConnectRouter = Router({ mergeParams: true }); - peConnectRouter.route(`/${loginPeConnect}`).get(async (req, res) => + ftConnectRouter.route(`/${loginFtConnect}`).get(async (req, res) => sendRedirectResponseWithManagedErrors( req, res, - async () => makePeConnectLoginPageUrl(deps.config), + async () => makeFtConnectLoginPageUrl(deps.config), deps.errorHandlers.handleManagedRedirectResponseError, deps.errorHandlers.handleRawRedirectResponseError, ), ); - peConnectRouter.route(`/${peConnect}`).get(async (req, res) => + ftConnectRouter.route(`/${ftConnect}`).get(async (req, res) => sendRedirectResponseWithManagedErrors( req, res, @@ -35,5 +35,5 @@ export const createPeConnectRouter = (deps: AppDependencies) => { ), ); - return peConnectRouter; + return ftConnectRouter; }; diff --git a/back/src/config/bootstrap/createGateways.ts b/back/src/config/bootstrap/createGateways.ts index 84b2267752..accdde5cae 100644 --- a/back/src/config/bootstrap/createGateways.ts +++ b/back/src/config/bootstrap/createGateways.ts @@ -13,8 +13,8 @@ import { InMemoryAddressGateway } from "../../domains/core/address/adapters/InMe import { HttpSubscribersGateway } from "../../domains/core/api-consumer/adapters/HttpSubscribersGateway"; import { InMemorySubscribersGateway } from "../../domains/core/api-consumer/adapters/InMemorySubscribersGateway"; import { HttpFtConnectGateway } from "../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway"; -import { InMemoryPeConnectGateway } from "../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway"; -import { makePeConnectExternalRoutes } from "../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes"; +import { InMemoryFtConnectGateway } from "../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryFtConnectGateway"; +import { makeFtConnectExternalRoutes } from "../../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes"; import { FtConnectGateway } from "../../domains/core/authentication/ft-connect/port/FtConnectGateway"; import { HttpOAuthGateway } from "../../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/HttpOAuthGateway"; import { InMemoryOAuthGateway } from "../../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/InMemoryOAuthGateway"; @@ -188,14 +188,14 @@ export const createGateways = async ( const { withCache, disconnectCache } = await getWithCache(config); - const peConnectGateway: FtConnectGateway = + const ftConnectGateway: FtConnectGateway = config.ftConnectGateway === "HTTPS" ? new HttpFtConnectGateway( createLegacyAxiosHttpClientForExternalAPIs({ partnerName: partnerNames.franceTravailConnect, - routes: makePeConnectExternalRoutes({ - peApiUrl: config.ftApiUrl, - peAuthCandidatUrl: config.ftAuthCandidatUrl, + routes: makeFtConnectExternalRoutes({ + ftApiUrl: config.ftApiUrl, + ftAuthCandidatUrl: config.ftAuthCandidatUrl, }), }), { @@ -204,7 +204,7 @@ export const createGateways = async ( franceTravailClientSecret: config.franceTravailClientSecret, }, ) - : new InMemoryPeConnectGateway(); + : new InMemoryFtConnectGateway(); const oAuthGateway: OAuthGateway = config.inclusionConnectGateway === "HTTPS" @@ -412,7 +412,7 @@ export const createGateways = async ( ? new HttpPassEmploiGateway(config.passEmploiUrl, config.passEmploiKey) : new InMemoryPassEmploiGateway(), pdfGeneratorGateway: createPdfGeneratorGateway(), - peConnectGateway, + ftConnectGateway, franceTravailGateway, timeGateway, establishmentMarketingGateway: diff --git a/back/src/config/bootstrap/createUseCases.ts b/back/src/config/bootstrap/createUseCases.ts index 5a833898d6..c977754c8d 100644 --- a/back/src/config/bootstrap/createUseCases.ts +++ b/back/src/config/bootstrap/createUseCases.ts @@ -281,7 +281,7 @@ export const createUseCases = ( linkFranceTravailAdvisorAndRedirectToConvention: new LinkFranceTravailAdvisorAndRedirectToConvention( uowPerformer, - gateways.peConnectGateway, + gateways.ftConnectGateway, config.immersionFacileBaseUrl, ), diff --git a/back/src/config/bootstrap/server.ts b/back/src/config/bootstrap/server.ts index 829ffa95f8..d0474d2f4a 100644 --- a/back/src/config/bootstrap/server.ts +++ b/back/src/config/bootstrap/server.ts @@ -10,10 +10,10 @@ import { createConventionRouter } from "../../adapters/primary/routers/conventio import { createEstablishmentRouter } from "../../adapters/primary/routers/establishment/createEstablishmentRouter"; import { createEstablishmentLeadRouter } from "../../adapters/primary/routers/establishmentLead/createEstablishmentLeadRouter"; import { createFormCompletionRouter } from "../../adapters/primary/routers/formCompletion/createFormCompletionRouter"; +import { createFtConnectRouter } from "../../adapters/primary/routers/ftConnect/createFtConnectRouter"; import { createInclusionConnectRouter } from "../../adapters/primary/routers/inclusionConnect/createInclusionConnectRouter"; import { createInclusionConnectedAllowedRouter } from "../../adapters/primary/routers/inclusionConnect/createInclusionConnectedAllowedRouter"; import { createMagicLinkRouter } from "../../adapters/primary/routers/magicLink/createMagicLinkRouter"; -import { createPeConnectRouter } from "../../adapters/primary/routers/peConnect/createPeConnectRouter"; import { createRootApiRouter } from "../../adapters/primary/routers/rootApi/createRootApiRouter"; import { createSearchRouter } from "../../adapters/primary/routers/search/createSearchRouter"; import { createTechnicalRouter } from "../../adapters/primary/routers/technical/createTechnicalRouter"; @@ -90,7 +90,7 @@ export const createApp = async ( app.use(createAddressRouter(deps)); app.use(createConventionRouter(deps)); app.use(createAgenciesRouter(deps)); - app.use(createPeConnectRouter(deps)); + app.use(createFtConnectRouter(deps)); app.use(createInclusionConnectRouter(deps)); // Auth issues below this last router app.use(createEstablishmentRouter(deps)); diff --git a/back/src/config/helpers/createAxiosSharedClients.ts b/back/src/config/helpers/createAxiosSharedClients.ts index 6e1ac4020c..9f93f3429d 100644 --- a/back/src/config/helpers/createAxiosSharedClients.ts +++ b/back/src/config/helpers/createAxiosSharedClients.ts @@ -3,7 +3,7 @@ import { createAxiosSharedClient } from "shared-routes/axios"; import { createFranceTravailRoutes } from "../../domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes"; import { AppConfig } from "../bootstrap/appConfig"; -export const createPeAxiosSharedClient = ( +export const createFtAxiosSharedClient = ( config: AppConfig, axiosInstance = axios.create({ timeout: config.externalAxiosTimeout }), ) => { diff --git a/back/src/config/helpers/createFetchSharedClients.ts b/back/src/config/helpers/createFetchSharedClients.ts index 9017b54f0d..2ed5bad8ab 100644 --- a/back/src/config/helpers/createFetchSharedClients.ts +++ b/back/src/config/helpers/createFetchSharedClients.ts @@ -2,7 +2,7 @@ import { createFetchSharedClient } from "shared-routes/fetch"; import { createFranceTravailRoutes } from "../../domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes"; import { AppConfig } from "../bootstrap/appConfig"; -export const createPeFetchSharedClient = (config: AppConfig) => { +export const createFtFetchSharedClient = (config: AppConfig) => { const franceTravailRoutes = createFranceTravailRoutes(config.ftApiUrl); return createFetchSharedClient(franceTravailRoutes, fetch); }; diff --git a/back/src/config/pg/kysely/model/database.ts b/back/src/config/pg/kysely/model/database.ts index 270a03a3e8..13fd7b7a94 100644 --- a/back/src/config/pg/kysely/model/database.ts +++ b/back/src/config/pg/kysely/model/database.ts @@ -47,7 +47,7 @@ export interface Database { outbox_failures: OutboxFailures; outbox_publications: OutboxPublications; outbox: Outbox; - partners_pe_connect: PartnersPeConnect; + partners_pe_connect: PartnersFtConnect; public_appellations_data: PublicAppellationsData; public_department_region: PublicDepartmentRegion; public_naf_classes_2008: PublicNafClasses2008; @@ -276,7 +276,7 @@ interface Actors { id: Generated; } -interface PartnersPeConnect { +interface PartnersFtConnect { user_pe_external_id: string; convention_id: Generated; firstname: string | null; diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts b/back/src/domains/agency/adapters/ft-agencies-referential/HttpFtAgenciesReferential.manual.test.ts similarity index 76% rename from back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts rename to back/src/domains/agency/adapters/ft-agencies-referential/HttpFtAgenciesReferential.manual.test.ts index 7062e20866..edcc324364 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.manual.test.ts +++ b/back/src/domains/agency/adapters/ft-agencies-referential/HttpFtAgenciesReferential.manual.test.ts @@ -2,17 +2,17 @@ import { AccessTokenResponse, AppConfig, } from "../../../../config/bootstrap/appConfig"; -import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; +import { createFtAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; import { HttpFranceTravailGateway } from "../../../convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; -import { HttpPeAgenciesReferential } from "./HttpPeAgenciesReferential"; +import { HttpFtAgenciesReferential } from "./HttpFtAgenciesReferential"; const config = AppConfig.createFromEnv(); -const axiosHttpClient = createPeAxiosSharedClient(config); +const axiosHttpClient = createFtAxiosSharedClient(config); -const referencielAgencesPE = new HttpPeAgenciesReferential( +const referencielAgencesPE = new HttpFtAgenciesReferential( config.ftApiUrl, new HttpFranceTravailGateway( axiosHttpClient, @@ -29,7 +29,7 @@ const referencielAgencesPE = new HttpPeAgenciesReferential( describe("HttpReferencielAgencesPe", () => { it("Should return PE agencies", async () => { - const a = await referencielAgencesPE.getPeAgencies(); + const a = await referencielAgencesPE.getFtAgencies(); expect(a.length).toBeGreaterThan(10); }); }); diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts b/back/src/domains/agency/adapters/ft-agencies-referential/HttpFtAgenciesReferential.ts similarity index 77% rename from back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts rename to back/src/domains/agency/adapters/ft-agencies-referential/HttpFtAgenciesReferential.ts index 59aee38dac..393a7d933b 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpPeAgenciesReferential.ts +++ b/back/src/domains/agency/adapters/ft-agencies-referential/HttpFtAgenciesReferential.ts @@ -4,27 +4,27 @@ import { createAxiosInstance } from "../../../../utils/axiosUtils"; import { createLogger } from "../../../../utils/logger"; import { FranceTravailGateway } from "../../../convention/ports/FranceTravailGateway"; import { - PeAgenciesReferential, - PeAgencyFromReferenciel, -} from "../../../establishment/ports/PeAgenciesReferential"; + FtAgenciesReferential, + FtAgencyFromReferential, +} from "../../../establishment/ports/FtAgenciesReferential"; const logger = createLogger(__filename); -export class HttpPeAgenciesReferential implements PeAgenciesReferential { +export class HttpFtAgenciesReferential implements FtAgenciesReferential { #axios: AxiosInstance; readonly #referencielAgenceUrl: AbsoluteUrl; constructor( - peApiUrl: AbsoluteUrl, + ftApiUrl: AbsoluteUrl, private readonly franceTravailGateway: FranceTravailGateway, private readonly franceTravailClientId: string, ) { this.#axios = createAxiosInstance(logger); - this.#referencielAgenceUrl = `${peApiUrl}/partenaire/referentielagences/v1/agences`; + this.#referencielAgenceUrl = `${ftApiUrl}/partenaire/referentielagences/v1/agences`; } - public async getPeAgencies(): Promise { + public async getFtAgencies(): Promise { const accessToken = await this.franceTravailGateway.getAccessToken( `application_${this.franceTravailClientId} api_referentielagencesv1 organisationpe`, ); diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts b/back/src/domains/agency/adapters/ft-agencies-referential/HttpRome3Gateway.manual.test.ts similarity index 94% rename from back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts rename to back/src/domains/agency/adapters/ft-agencies-referential/HttpRome3Gateway.manual.test.ts index fdce038c84..7690fbd6e1 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.manual.test.ts +++ b/back/src/domains/agency/adapters/ft-agencies-referential/HttpRome3Gateway.manual.test.ts @@ -5,7 +5,7 @@ import { AccessTokenResponse, AppConfig, } from "../../../../config/bootstrap/appConfig"; -import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; +import { createFtAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; import { HttpFranceTravailGateway } from "../../../convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; @@ -21,7 +21,7 @@ describe("HttpRome3Gateway", () => { ); const franceTravailGateway = new HttpFranceTravailGateway( - createPeAxiosSharedClient(config), + createFtAxiosSharedClient(config), cachingGateway, config.ftApiUrl, config.franceTravailAccessTokenConfig, diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts b/back/src/domains/agency/adapters/ft-agencies-referential/HttpRome3Gateway.ts similarity index 94% rename from back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts rename to back/src/domains/agency/adapters/ft-agencies-referential/HttpRome3Gateway.ts index 1a19573b2b..700187954f 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway.ts +++ b/back/src/domains/agency/adapters/ft-agencies-referential/HttpRome3Gateway.ts @@ -12,11 +12,11 @@ interface Rome3Gateway { } type Rome4Routes = ReturnType; -export const makeRome3Routes = (peApiUrl: AbsoluteUrl) => +export const makeRome3Routes = (ftApiUrl: AbsoluteUrl) => defineRoutes({ getAppellations: defineRoute({ method: "get", - url: `${peApiUrl}/partenaire/rome/v1/appellation?champs=code,libelle,libelleCourt,metier(code)`, + url: `${ftApiUrl}/partenaire/rome/v1/appellation?champs=code,libelle,libelleCourt,metier(code)`, ...withAuthorizationHeaders, responses: { 200: z.array( diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts b/back/src/domains/agency/adapters/ft-agencies-referential/HttpRome4Gateway.manual.test.ts similarity index 95% rename from back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts rename to back/src/domains/agency/adapters/ft-agencies-referential/HttpRome4Gateway.manual.test.ts index e075eba3e7..4ecb4c569d 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.manual.test.ts +++ b/back/src/domains/agency/adapters/ft-agencies-referential/HttpRome4Gateway.manual.test.ts @@ -5,7 +5,7 @@ import { AccessTokenResponse, AppConfig, } from "../../../../config/bootstrap/appConfig"; -import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; +import { createFtAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; import { HttpFranceTravailGateway } from "../../../convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; @@ -21,7 +21,7 @@ describe("HttpRome4Gateway", () => { ); const franceTravailGateway = new HttpFranceTravailGateway( - createPeAxiosSharedClient(config), + createFtAxiosSharedClient(config), cachingGateway, config.ftApiUrl, config.franceTravailAccessTokenConfig, diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts b/back/src/domains/agency/adapters/ft-agencies-referential/HttpRome4Gateway.ts similarity index 93% rename from back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts rename to back/src/domains/agency/adapters/ft-agencies-referential/HttpRome4Gateway.ts index b141ef85e0..d44e47e35b 100644 --- a/back/src/domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway.ts +++ b/back/src/domains/agency/adapters/ft-agencies-referential/HttpRome4Gateway.ts @@ -19,11 +19,11 @@ interface Rome4Gateway { } type Rome4Routes = ReturnType; -export const makeRome4Routes = (peApiUrl: AbsoluteUrl) => +export const makeRome4Routes = (ftApiUrl: AbsoluteUrl) => defineRoutes({ getRomes: defineRoute({ method: "get", - url: `${peApiUrl}/partenaire/rome-metiers/v1/metiers/metier?champs=code,libelle`, + url: `${ftApiUrl}/partenaire/rome-metiers/v1/metiers/metier?champs=code,libelle`, ...withAuthorizationHeaders, responses: { 200: z.array(z.object({ code: z.string(), libelle: z.string() })), @@ -31,7 +31,7 @@ export const makeRome4Routes = (peApiUrl: AbsoluteUrl) => }), getAppellations: defineRoute({ method: "get", - url: `${peApiUrl}/partenaire/rome-metiers/v1/metiers/appellation?champs=code,libelle,libelleCourt,metier(code)`, + url: `${ftApiUrl}/partenaire/rome-metiers/v1/metiers/appellation?champs=code,libelle,libelleCourt,metier(code)`, ...withAuthorizationHeaders, responses: { 200: z.array( diff --git a/back/src/domains/agency/adapters/ft-agencies-referential/InMemoryFtAgenciesReferential.ts b/back/src/domains/agency/adapters/ft-agencies-referential/InMemoryFtAgenciesReferential.ts new file mode 100644 index 0000000000..da6026aeef --- /dev/null +++ b/back/src/domains/agency/adapters/ft-agencies-referential/InMemoryFtAgenciesReferential.ts @@ -0,0 +1,16 @@ +import { + FtAgenciesReferential, + FtAgencyFromReferential, +} from "../../../establishment/ports/FtAgenciesReferential"; + +export class InMemoryFtAgenciesReferential implements FtAgenciesReferential { + #peAgencies: FtAgencyFromReferential[] = []; + + public async getFtAgencies(): Promise { + return this.#peAgencies; + } + + public setFtAgencies(peAgencies: FtAgencyFromReferential[]) { + this.#peAgencies = peAgencies; + } +} diff --git a/back/src/domains/agency/adapters/pe-agencies-referential/InMemoryPeAgenciesReferential.ts b/back/src/domains/agency/adapters/pe-agencies-referential/InMemoryPeAgenciesReferential.ts deleted file mode 100644 index 0649b88df1..0000000000 --- a/back/src/domains/agency/adapters/pe-agencies-referential/InMemoryPeAgenciesReferential.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { - PeAgenciesReferential, - PeAgencyFromReferenciel, -} from "../../../establishment/ports/PeAgenciesReferential"; - -export class InMemoryPeAgenciesReferential implements PeAgenciesReferential { - #peAgencies: PeAgencyFromReferenciel[] = []; - - public async getPeAgencies(): Promise { - return this.#peAgencies; - } - - public setPeAgencies(peAgencies: PeAgencyFromReferenciel[]) { - this.#peAgencies = peAgencies; - } -} diff --git a/back/src/domains/convention/adapters/PgConventionRepository.integration.test.ts b/back/src/domains/convention/adapters/PgConventionRepository.integration.test.ts index e249a17b47..b724e06da6 100644 --- a/back/src/domains/convention/adapters/PgConventionRepository.integration.test.ts +++ b/back/src/domains/convention/adapters/PgConventionRepository.integration.test.ts @@ -33,7 +33,7 @@ describe("PgConventionRepository", () => { phone: "+33112233445", }; - const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; + const userFtExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; const styliste: AppellationAndRomeDto = { romeCode: "B1805", @@ -269,7 +269,7 @@ describe("PgConventionRepository", () => { }) .withFederatedIdentity({ provider: "peConnect", - token: userPeExternalId, + token: userFtExternalId, payload: { advisor: { email: "john@mail.com", @@ -284,7 +284,7 @@ describe("PgConventionRepository", () => { await db .insertInto("partners_pe_connect") .values({ - user_pe_external_id: userPeExternalId, + user_pe_external_id: userFtExternalId, convention_id: convention.id, email: "john@mail.com", firstname: "John", @@ -303,7 +303,7 @@ describe("PgConventionRepository", () => { conventionRetreived?.signatories.beneficiary.federatedIdentity, ).toStrictEqual({ provider: "peConnect", - token: userPeExternalId, + token: userFtExternalId, payload: { advisor: { email: "john@mail.com", @@ -331,14 +331,14 @@ describe("PgConventionRepository", () => { }) .withFederatedIdentity({ provider: "peConnect", - token: userPeExternalId, + token: userFtExternalId, }) .build(); await db .insertInto("partners_pe_connect") .values({ - user_pe_external_id: userPeExternalId, + user_pe_external_id: userFtExternalId, convention_id: convention.id, email: null, firstname: null, @@ -357,7 +357,7 @@ describe("PgConventionRepository", () => { conventionRetreived?.signatories.beneficiary.federatedIdentity, ).toStrictEqual({ provider: "peConnect", - token: userPeExternalId, + token: userFtExternalId, }); }); @@ -428,11 +428,11 @@ describe("PgConventionRepository", () => { }); it("Retrieves federated identity if exists", async () => { - const peConnectId: FtConnectToken = "bbbbac99-9c0b-bbbb-bb6d-6bb9bd38bbbb"; + const ftConnectId: FtConnectToken = "bbbbac99-9c0b-bbbb-bb6d-6bb9bd38bbbb"; const convention = conventionStylisteBuilder .withFederatedIdentity({ provider: "peConnect", - token: peConnectId, + token: ftConnectId, payload: { advisor: { email: "john@mail.com", @@ -447,7 +447,7 @@ describe("PgConventionRepository", () => { await db .insertInto("partners_pe_connect") .values({ - user_pe_external_id: peConnectId, + user_pe_external_id: ftConnectId, convention_id: convention.id, email: "john@mail.com", firstname: "John", diff --git a/back/src/domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes.ts b/back/src/domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes.ts index 1997b18303..9baab8be92 100644 --- a/back/src/domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes.ts +++ b/back/src/domains/convention/adapters/france-travail-gateway/FrancetTravailRoutes.ts @@ -3,8 +3,8 @@ import { defineRoute, defineRoutes } from "shared-routes"; import { z } from "zod"; import { FranceTravailConvention } from "../../ports/FranceTravailGateway"; -export const getFtTestPrefix = (peApiUrl: AbsoluteUrl) => - ["https://api.peio.pe-qvr.fr", "https://api-r.es-qvr.fr"].includes(peApiUrl) +export const getFtTestPrefix = (ftApiUrl: AbsoluteUrl) => + ["https://api.peio.pe-qvr.fr", "https://api-r.es-qvr.fr"].includes(ftApiUrl) ? "test" : ""; @@ -12,13 +12,13 @@ export type FrancetTravailRoutes = ReturnType; const franceTravailConventionSchema: z.Schema = z.any(); -export const createFranceTravailRoutes = (peApiUrl: AbsoluteUrl) => { - const ftTestPrefix = getFtTestPrefix(peApiUrl); +export const createFranceTravailRoutes = (ftApiUrl: AbsoluteUrl) => { + const ftTestPrefix = getFtTestPrefix(ftApiUrl); return defineRoutes({ broadcastConvention: defineRoute({ method: "post", - url: `${peApiUrl}/partenaire/${ftTestPrefix}immersion-pro/v2/demandes-immersion`, + url: `${ftApiUrl}/partenaire/${ftTestPrefix}immersion-pro/v2/demandes-immersion`, requestBodySchema: franceTravailConventionSchema, ...withAuthorizationHeaders, responses: { diff --git a/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts b/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts index 2cd648e0fb..078719e991 100644 --- a/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts +++ b/back/src/domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway.manual.test.ts @@ -7,7 +7,7 @@ import { AccessTokenResponse, AppConfig, } from "../../../../config/bootstrap/appConfig"; -import { createPeAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; +import { createFtAxiosSharedClient } from "../../../../config/helpers/createAxiosSharedClients"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; import { RealTimeGateway } from "../../../core/time-gateway/adapters/RealTimeGateway"; @@ -58,7 +58,7 @@ describe("HttpFranceTravailGateway", () => { "Should have status $expected.status when $testMessage", async ({ fields, expected }) => { const httpFranceTravailGateway = new HttpFranceTravailGateway( - createPeAxiosSharedClient(config), + createFtAxiosSharedClient(config), cachingGateway, config.ftApiUrl, config.franceTravailAccessTokenConfig, @@ -113,7 +113,7 @@ describe("HttpFranceTravailGateway", () => { "Should have status $expected.status when $testMessage", async ({ fields, expected }) => { const httpFranceTravailGateway = new HttpFranceTravailGateway( - createPeAxiosSharedClient(config), + createFtAxiosSharedClient(config), cachingGateway, config.ftApiUrl, config.franceTravailAccessTokenConfig, @@ -134,9 +134,9 @@ describe("HttpFranceTravailGateway", () => { ); it("error feedback axios timeout", async () => { - const peApiUrl = "https://fake-pe.fr"; - const peEnterpriseUrl = "https://fake-pe-enterprise.fr"; - const routes = createFranceTravailRoutes(peApiUrl); + const ftApiUrl = "https://fake-ft.fr"; + const ftEnterpriseUrl = "https://fake-ft-enterprise.fr"; + const routes = createFranceTravailRoutes(ftApiUrl); const httpClient = createAxiosSharedClient(routes, axios, { skipResponseValidation: true, @@ -149,9 +149,9 @@ describe("HttpFranceTravailGateway", () => { const accessTokenConfig: AccessTokenConfig = { immersionFacileBaseUrl: "https://", - ftApiUrl: peApiUrl, + ftApiUrl, ftAuthCandidatUrl: "https://", - ftEnterpriseUrl: peEnterpriseUrl, + ftEnterpriseUrl, clientId: "", clientSecret: "", }; @@ -159,7 +159,7 @@ describe("HttpFranceTravailGateway", () => { const franceTravailGateway = new HttpFranceTravailGateway( httpClient, cachingGateway, - peApiUrl, + ftApiUrl, accessTokenConfig, noRetries, ); @@ -168,7 +168,7 @@ describe("HttpFranceTravailGateway", () => { mock .onPost( - `${peEnterpriseUrl}/connexion/oauth2/access_token?realm=%2Fpartenaire`, + `${ftEnterpriseUrl}/connexion/oauth2/access_token?realm=%2Fpartenaire`, ) .reply(200, { access_token: "yolo" }) .onPost(routes.broadcastConvention.url) @@ -187,8 +187,8 @@ describe("HttpFranceTravailGateway", () => { }); it("error feedback on bad response code", async () => { - const peApiUrl = "https://fake-pe.fr"; - const peEnterpriseUrl = "https://fake-pe-enterprise.fr"; + const peApiUrl = "https://fake-ft.fr"; + const peEnterpriseUrl = "https://fake-ft-enterprise.fr"; const routes = createFranceTravailRoutes(peApiUrl); const httpClient = createAxiosSharedClient(routes, axios, { diff --git a/back/src/domains/convention/ports/FranceTravailGateway.ts b/back/src/domains/convention/ports/FranceTravailGateway.ts index fb0159ef51..367cafad5b 100644 --- a/back/src/domains/convention/ports/FranceTravailGateway.ts +++ b/back/src/domains/convention/ports/FranceTravailGateway.ts @@ -33,7 +33,7 @@ type ConventionStatusToFtStatus = typeof conventionStatusToFranceTravailStatus; type FtConventionStatus = ConventionStatusToFtStatus[keyof ConventionStatusToFtStatus]; -export type AgencyKindForPe = +export type AgencyKindForFt = | Exclude | "france-travail"; @@ -67,7 +67,7 @@ export type FranceTravailConvention = { competencesObservees: string; signatureBeneficiaire: boolean; signatureEntreprise: boolean; - typeAgence: AgencyKindForPe; + typeAgence: AgencyKindForFt; nomAgence: string; prenomValidateurRenseigne?: string; nomValidateurRenseigne?: string; diff --git a/back/src/domains/convention/use-cases/GetConvention.unit.test.ts b/back/src/domains/convention/use-cases/GetConvention.unit.test.ts index 4c2fa42c13..e9ba8e1498 100644 --- a/back/src/domains/convention/use-cases/GetConvention.unit.test.ts +++ b/back/src/domains/convention/use-cases/GetConvention.unit.test.ts @@ -442,15 +442,15 @@ describe("Get Convention", () => { }); }); - it("user is a PeAdvisor", async () => { - const peAdvisorEmail = "pe-advisor@mail.fr"; - const peConnectedConvention = new ConventionDtoBuilder(convention) + it("user is a FtAdvisor", async () => { + const ftAdvisorEmail = "ft-advisor@mail.fr"; + const ftConnectedConvention = new ConventionDtoBuilder(convention) .withFederatedIdentity({ provider: "peConnect", token: "some-id", payload: { advisor: { - email: peAdvisorEmail, + email: ftAdvisorEmail, firstName: "john", lastName: "doe", type: "PLACEMENT", @@ -458,10 +458,10 @@ describe("Get Convention", () => { }, }) .build(); - uow.conventionRepository.setConventions([peConnectedConvention]); + uow.conventionRepository.setConventions([ftConnectedConvention]); const payload: ConventionJwtPayload = { role: "validator", - emailHash: makeEmailHash(peAdvisorEmail), + emailHash: makeEmailHash(ftAdvisorEmail), applicationId: convention.id, iat: 1, version: 1, @@ -473,7 +473,7 @@ describe("Get Convention", () => { ); expectToEqual(conventionResult, { - ...peConnectedConvention, + ...ftConnectedConvention, agencyName: agency.name, agencyDepartment: agency.address.departmentCode, agencyKind: agency.kind, diff --git a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts b/back/src/domains/convention/use-cases/ResyncOldConventionsToFt.unit.test.ts similarity index 93% rename from back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts rename to back/src/domains/convention/use-cases/ResyncOldConventionsToFt.unit.test.ts index aa9a43df50..8c1909ead5 100644 --- a/back/src/domains/convention/use-cases/ResyncOldConventionsToPe.unit.test.ts +++ b/back/src/domains/convention/use-cases/ResyncOldConventionsToFt.unit.test.ts @@ -43,16 +43,16 @@ describe("ResyncOldConventionsToPe use case", () => { let uow: InMemoryUnitOfWork; let useCase: ResyncOldConventionsToFt; let timeGateway: CustomTimeGateway; - let peGateway: InMemoryFranceTravailGateway; + let ftGateway: InMemoryFranceTravailGateway; beforeEach(() => { uow = createInMemoryUow(); timeGateway = new CustomTimeGateway(); - peGateway = new InMemoryFranceTravailGateway(); + ftGateway = new InMemoryFranceTravailGateway(); useCase = new ResyncOldConventionsToFt( new InMemoryUowPerformer(uow), - peGateway, + ftGateway, timeGateway, 100, ); @@ -75,7 +75,7 @@ describe("ResyncOldConventionsToPe use case", () => { status: "TO_PROCESS", }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); const report = await useCase.execute(); @@ -95,7 +95,7 @@ describe("ResyncOldConventionsToPe use case", () => { processDate: timeGateway.now(), }, ]); - expectToEqual(peGateway.notifications, [ + expectToEqual(ftGateway.notifications, [ conventionToConventionNotification(conventionToSync1, agencyPE), conventionToConventionNotification(conventionToSync2, agencyPE), ]); @@ -115,7 +115,7 @@ describe("ResyncOldConventionsToPe use case", () => { status: "TO_PROCESS", }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); const report = await useCase.execute(); @@ -127,7 +127,7 @@ describe("ResyncOldConventionsToPe use case", () => { processDate: timeGateway.now(), }, ]); - expectToEqual(peGateway.notifications, [ + expectToEqual(ftGateway.notifications, [ conventionToConventionNotification(conventionToSync1, agencyPE), ]); expectToEqual(report, { @@ -139,13 +139,13 @@ describe("ResyncOldConventionsToPe use case", () => { it("no convention to sync", async () => { uow.conventionsToSyncRepository.setForTesting([]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); const report = await useCase.execute(); expectToEqual(uow.conventionRepository.conventions, []); expectToEqual(uow.conventionsToSyncRepository.conventionsToSync, []); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); expectToEqual(report, { success: 0, skips: {}, @@ -166,7 +166,7 @@ describe("ResyncOldConventionsToPe use case", () => { status: "TO_PROCESS", }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); const report = await useCase.execute(); @@ -179,7 +179,7 @@ describe("ResyncOldConventionsToPe use case", () => { reason: "Agency is not of kind pole-emploi", }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); expectToEqual(report, { success: 0, skips: { @@ -220,7 +220,7 @@ describe("ResyncOldConventionsToPe use case", () => { processDate: subDays(timeGateway.now(), 1), }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); const report = await useCase.execute(); @@ -253,7 +253,7 @@ describe("ResyncOldConventionsToPe use case", () => { processDate: subDays(timeGateway.now(), 1), }, ]); - expectToEqual(peGateway.notifications, [ + expectToEqual(ftGateway.notifications, [ conventionToConventionNotification(conventionToSync1, agencyPE), conventionToConventionNotification(conventionToSync2, agencyPE), ]); @@ -280,11 +280,11 @@ describe("ResyncOldConventionsToPe use case", () => { status: "TO_PROCESS", }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); const report = await new ResyncOldConventionsToFt( new InMemoryUowPerformer(uow), - peGateway, + ftGateway, timeGateway, 1, ).execute(); @@ -304,7 +304,7 @@ describe("ResyncOldConventionsToPe use case", () => { status: "TO_PROCESS", }, ]); - expectToEqual(peGateway.notifications, [ + expectToEqual(ftGateway.notifications, [ conventionToConventionNotification(conventionToSync1, agencyPE), ]); expectToEqual(report, { @@ -324,7 +324,7 @@ describe("ResyncOldConventionsToPe use case", () => { status: "TO_PROCESS", }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); const report = await useCase.execute(); @@ -339,7 +339,7 @@ describe("ResyncOldConventionsToPe use case", () => { }).message, }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); expectToEqual(report, { success: 0, skips: {}, @@ -359,7 +359,7 @@ describe("ResyncOldConventionsToPe use case", () => { status: "TO_PROCESS", }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); const report = await useCase.execute(); @@ -372,7 +372,7 @@ describe("ResyncOldConventionsToPe use case", () => { reason: errors.agency.notFound({ agencyId: agencyPE.id }).message, }, ]); - expectToEqual(peGateway.notifications, []); + expectToEqual(ftGateway.notifications, []); expectToEqual(report, { success: 0, skips: {}, diff --git a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts index 7fe5bbcc61..2fa38341cb 100644 --- a/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts +++ b/back/src/domains/convention/use-cases/broadcast/BroadcastToFranceTravailOnConventionUpdates.unit.test.ts @@ -18,7 +18,7 @@ import { createInMemoryUow, } from "../../../core/unit-of-work/adapters/createInMemoryUow"; import { InMemoryFranceTravailGateway } from "../../adapters/france-travail-gateway/InMemoryFranceTravailGateway"; -import { AgencyKindForPe } from "../../ports/FranceTravailGateway"; +import { AgencyKindForFt } from "../../ports/FranceTravailGateway"; import { BroadcastToFranceTravailOnConventionUpdates } from "./BroadcastToFranceTravailOnConventionUpdates"; describe("Broadcasts events to France Travail", () => { @@ -301,7 +301,7 @@ describe("Broadcasts events to France Travail", () => { describe.each([ { - agencyKind: "mission-locale" as AgencyKindForPe, + agencyKind: "mission-locale" as AgencyKindForFt, featureFlag: { enableBroadcastOfMissionLocaleToFT: { kind: "boolean", @@ -311,7 +311,7 @@ describe("Broadcasts events to France Travail", () => { ...createAgencyAndLinkedConvention("mission-locale"), }, { - agencyKind: "conseil-departemental" as AgencyKindForPe, + agencyKind: "conseil-departemental" as AgencyKindForFt, featureFlag: { enableBroadcastOfConseilDepartementalToFT: { kind: "boolean", @@ -321,7 +321,7 @@ describe("Broadcasts events to France Travail", () => { ...createAgencyAndLinkedConvention("conseil-departemental"), }, { - agencyKind: "cap-emploi" as AgencyKindForPe, + agencyKind: "cap-emploi" as AgencyKindForFt, featureFlag: { enableBroadcastOfCapEmploiToFT: { kind: "boolean", @@ -401,15 +401,15 @@ describe("Broadcasts events to France Travail", () => { describe.each([ { - agencyKind: "mission-locale" as AgencyKindForPe, + agencyKind: "mission-locale" as AgencyKindForFt, ...createAgencyAndLinkedConvention("mission-locale"), }, { - agencyKind: "conseil-departemental" as AgencyKindForPe, + agencyKind: "conseil-departemental" as AgencyKindForFt, ...createAgencyAndLinkedConvention("conseil-departemental"), }, { - agencyKind: "cap-emploi" as AgencyKindForPe, + agencyKind: "cap-emploi" as AgencyKindForFt, ...createAgencyAndLinkedConvention("cap-emploi"), }, ])( diff --git a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts index c94fef14c0..7b32b2088d 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.ts @@ -96,7 +96,7 @@ export class NotifyAllActorsOfFinalConventionValidation extends TransactionalUse email: validatorEmail, }), ), - ...getPeAdvisorEmailAndRoleIfExist( + ...getFtAdvisorEmailAndRoleIfExist( await uow.conventionFranceTravailAdvisorRepository.getByConventionId( convention.id, ), @@ -186,9 +186,9 @@ export class NotifyAllActorsOfFinalConventionValidation extends TransactionalUse } } -const getPeAdvisorEmailAndRoleIfExist = ( - conventionPeUserAdvisor: ConventionFtUserAdvisorEntity | undefined, +const getFtAdvisorEmailAndRoleIfExist = ( + conventionFtUserAdvisor: ConventionFtUserAdvisorEntity | undefined, ): [{ role: Role; email: Email }] | [] => - conventionPeUserAdvisor?.advisor?.email - ? [{ role: "validator", email: conventionPeUserAdvisor.advisor.email }] + conventionFtUserAdvisor?.advisor?.email + ? [{ role: "validator", email: conventionFtUserAdvisor.advisor.email }] : []; diff --git a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts index 9ccb0c20d5..03d57447f1 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyAllActorsOfFinalConventionValidation.unit.test.ts @@ -37,7 +37,7 @@ describe("NotifyAllActorsOfFinalApplicationValidation", () => { "establishment-representativ@gmail.com"; const beneficiaryCurrentEmployerEmail = "current@employer.com"; const beneficiaryRepresentativeEmail = "beneficiary@representative.fr"; - const peAdvisorEmail = "pe-advisor@pole-emploi.net"; + const peAdvisorEmail = "ft-advisor@pole-emploi.net"; const counsellor = new InclusionConnectedUserBuilder() .withId("counsellor") .withEmail("counsellor@email.fr") @@ -468,7 +468,7 @@ describe("NotifyAllActorsOfFinalApplicationValidation", () => { shortlinkId: "shortLinkId_2", }, ]; - const userPeExternalId = "i-am-an-external-id"; + const userFtExternalId = "i-am-an-external-id"; const userConventionAdvisor: ConventionFtUserAdvisorEntity = { _entityName: "ConventionFranceTravailAdvisor", advisor: { @@ -477,7 +477,7 @@ describe("NotifyAllActorsOfFinalApplicationValidation", () => { lastName: "Oldenburg", type: "CAPEMPLOI", }, - peExternalId: userPeExternalId, + peExternalId: userFtExternalId, conventionId: validConvention.id, }; @@ -559,11 +559,11 @@ describe("NotifyAllActorsOfFinalApplicationValidation", () => { shortlinkId: "shortLinkId_6", }, ]; - const userPeExternalId = "i-am-an-external-id"; + const userFtExternalId = "i-am-an-external-id"; const userConventionAdvisor: ConventionFtUserAdvisorEntity = { _entityName: "ConventionFranceTravailAdvisor", advisor: undefined, - peExternalId: userPeExternalId, + peExternalId: userFtExternalId, conventionId: validConvention.id, }; diff --git a/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.unit.test.ts b/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.unit.test.ts index 4973ae4740..1ffb57df5d 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.unit.test.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyNewConventionNeedsReview.unit.test.ts @@ -2,8 +2,8 @@ import { AgencyDtoBuilder, ConventionDto, ConventionDtoBuilder, + FtConnectIdentity, InclusionConnectedUserBuilder, - PeConnectIdentity, expectToEqual, frontRoutes, } from "shared"; @@ -70,8 +70,8 @@ describe("NotifyConventionNeedsReview", () => { }, ); - const peAdvisorEmail = "pe-advisor@gmail.com"; - const peIdentity: PeConnectIdentity = { + const ftAdvisorEmail = "ft-advisor@gmail.com"; + const ftIdentity: FtConnectIdentity = { provider: "peConnect", token: "123", }; @@ -269,11 +269,11 @@ describe("NotifyConventionNeedsReview", () => { it("sends notification to counsellors (when they exist), even if there is a peAdvisor", async () => { uow.agencyRepository.agencies = [agencyWithCounsellorsAndValidators]; - const conventionInReviewWithPeAdvisor = new ConventionDtoBuilder( + const conventionInReviewWithFtAdvisor = new ConventionDtoBuilder( defaultConvention, ) .withStatus("IN_REVIEW") - .withFederatedIdentity(peIdentity) + .withFederatedIdentity(ftIdentity) .build(); const shortLinkIds = [ @@ -287,13 +287,13 @@ describe("NotifyConventionNeedsReview", () => { const userConventionAdvisor: ConventionFtUserAdvisorEntity = { _entityName: "ConventionFranceTravailAdvisor", advisor: { - email: peAdvisorEmail, + email: ftAdvisorEmail, firstName: "Elsa", lastName: "Oldenburg", type: "CAPEMPLOI", }, - peExternalId: peIdentity.token, - conventionId: conventionInReviewWithPeAdvisor.id, + peExternalId: ftIdentity.token, + conventionId: conventionInReviewWithFtAdvisor.id, }; uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( @@ -301,7 +301,7 @@ describe("NotifyConventionNeedsReview", () => { ); await notifyNewConventionNeedsReview.execute({ - convention: conventionInReviewWithPeAdvisor, + convention: conventionInReviewWithFtAdvisor, }); expectSavedNotificationsAndEvents({ @@ -310,15 +310,15 @@ describe("NotifyConventionNeedsReview", () => { kind: "NEW_CONVENTION_REVIEW_FOR_ELIGIBILITY_OR_VALIDATION", recipients: [councellor2.email], params: { - conventionId: conventionInReviewWithPeAdvisor.id, - internshipKind: conventionInReviewWithPeAdvisor.internshipKind, + conventionId: conventionInReviewWithFtAdvisor.id, + internshipKind: conventionInReviewWithFtAdvisor.internshipKind, beneficiaryFirstName: - conventionInReviewWithPeAdvisor.signatories.beneficiary + conventionInReviewWithFtAdvisor.signatories.beneficiary .firstName, beneficiaryLastName: - conventionInReviewWithPeAdvisor.signatories.beneficiary + conventionInReviewWithFtAdvisor.signatories.beneficiary .lastName, - businessName: conventionInReviewWithPeAdvisor.businessName, + businessName: conventionInReviewWithFtAdvisor.businessName, magicLink: makeShortLinkUrl(config, shortLinkIds[1]), conventionStatusLink: makeShortLinkUrl(config, shortLinkIds[0]), possibleRoleAction: "en vérifier l'éligibilité", @@ -344,23 +344,23 @@ describe("NotifyConventionNeedsReview", () => { ]; shortLinkIdGeneratorGateway.addMoreShortLinkIds(shortLinkIds); - const conventionInReviewWithPeAdvisor = new ConventionDtoBuilder( + const conventionInReviewWithFtAdvisor = new ConventionDtoBuilder( defaultConvention, ) .withStatus("IN_REVIEW") - .withFederatedIdentity(peIdentity) + .withFederatedIdentity(ftIdentity) .build(); const userConventionAdvisor: ConventionFtUserAdvisorEntity = { _entityName: "ConventionFranceTravailAdvisor", advisor: { - email: peAdvisorEmail, + email: ftAdvisorEmail, firstName: "Elsa", lastName: "Oldenburg", type: "CAPEMPLOI", }, - peExternalId: peIdentity.token, - conventionId: conventionInReviewWithPeAdvisor.id, + peExternalId: ftIdentity.token, + conventionId: conventionInReviewWithFtAdvisor.id, }; uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( @@ -368,47 +368,47 @@ describe("NotifyConventionNeedsReview", () => { ); await notifyNewConventionNeedsReview.execute({ - convention: conventionInReviewWithPeAdvisor, + convention: conventionInReviewWithFtAdvisor, }); expectToEqual(uow.shortLinkQuery.getShortLinks(), { [shortLinkIds[0]]: fakeGenerateMagicLinkUrlFn({ - id: conventionInReviewWithPeAdvisor.id, + id: conventionInReviewWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.conventionStatusDashboard, - email: peAdvisorEmail, + email: ftAdvisorEmail, now: timeGateway.now(), }), [shortLinkIds[1]]: fakeGenerateMagicLinkUrlFn({ - id: conventionInReviewWithPeAdvisor.id, + id: conventionInReviewWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.conventionStatusDashboard, email: validator1.email, now: timeGateway.now(), }), [shortLinkIds[2]]: fakeGenerateMagicLinkUrlFn({ - id: conventionInReviewWithPeAdvisor.id, + id: conventionInReviewWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.conventionStatusDashboard, email: validator2.email, now: timeGateway.now(), }), [shortLinkIds[3]]: fakeGenerateMagicLinkUrlFn({ - id: conventionInReviewWithPeAdvisor.id, + id: conventionInReviewWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.manageConvention, - email: peAdvisorEmail, + email: ftAdvisorEmail, now: timeGateway.now(), }), [shortLinkIds[4]]: fakeGenerateMagicLinkUrlFn({ - id: conventionInReviewWithPeAdvisor.id, + id: conventionInReviewWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.manageConvention, email: validator1.email, now: timeGateway.now(), }), [shortLinkIds[5]]: fakeGenerateMagicLinkUrlFn({ - id: conventionInReviewWithPeAdvisor.id, + id: conventionInReviewWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.manageConvention, email: validator2.email, @@ -420,17 +420,17 @@ describe("NotifyConventionNeedsReview", () => { emails: [ { kind: "NEW_CONVENTION_REVIEW_FOR_ELIGIBILITY_OR_VALIDATION", - recipients: [peAdvisorEmail], + recipients: [ftAdvisorEmail], params: { - conventionId: conventionInReviewWithPeAdvisor.id, - internshipKind: conventionInReviewWithPeAdvisor.internshipKind, + conventionId: conventionInReviewWithFtAdvisor.id, + internshipKind: conventionInReviewWithFtAdvisor.internshipKind, beneficiaryFirstName: - conventionInReviewWithPeAdvisor.signatories.beneficiary + conventionInReviewWithFtAdvisor.signatories.beneficiary .firstName, beneficiaryLastName: - conventionInReviewWithPeAdvisor.signatories.beneficiary + conventionInReviewWithFtAdvisor.signatories.beneficiary .lastName, - businessName: conventionInReviewWithPeAdvisor.businessName, + businessName: conventionInReviewWithFtAdvisor.businessName, magicLink: makeShortLinkUrl(config, shortLinkIds[3]), conventionStatusLink: makeShortLinkUrl(config, shortLinkIds[0]), possibleRoleAction: "en considérer la validation", @@ -447,15 +447,15 @@ describe("NotifyConventionNeedsReview", () => { kind: "NEW_CONVENTION_REVIEW_FOR_ELIGIBILITY_OR_VALIDATION", recipients: [validator1.email], params: { - conventionId: conventionInReviewWithPeAdvisor.id, - internshipKind: conventionInReviewWithPeAdvisor.internshipKind, + conventionId: conventionInReviewWithFtAdvisor.id, + internshipKind: conventionInReviewWithFtAdvisor.internshipKind, beneficiaryFirstName: - conventionInReviewWithPeAdvisor.signatories.beneficiary + conventionInReviewWithFtAdvisor.signatories.beneficiary .firstName, beneficiaryLastName: - conventionInReviewWithPeAdvisor.signatories.beneficiary + conventionInReviewWithFtAdvisor.signatories.beneficiary .lastName, - businessName: conventionInReviewWithPeAdvisor.businessName, + businessName: conventionInReviewWithFtAdvisor.businessName, magicLink: makeShortLinkUrl(config, shortLinkIds[4]), conventionStatusLink: makeShortLinkUrl(config, shortLinkIds[1]), possibleRoleAction: "en considérer la validation", @@ -472,15 +472,15 @@ describe("NotifyConventionNeedsReview", () => { kind: "NEW_CONVENTION_REVIEW_FOR_ELIGIBILITY_OR_VALIDATION", recipients: [validator2.email], params: { - conventionId: conventionInReviewWithPeAdvisor.id, - internshipKind: conventionInReviewWithPeAdvisor.internshipKind, + conventionId: conventionInReviewWithFtAdvisor.id, + internshipKind: conventionInReviewWithFtAdvisor.internshipKind, beneficiaryFirstName: - conventionInReviewWithPeAdvisor.signatories.beneficiary + conventionInReviewWithFtAdvisor.signatories.beneficiary .firstName, beneficiaryLastName: - conventionInReviewWithPeAdvisor.signatories.beneficiary + conventionInReviewWithFtAdvisor.signatories.beneficiary .lastName, - businessName: conventionInReviewWithPeAdvisor.businessName, + businessName: conventionInReviewWithFtAdvisor.businessName, magicLink: makeShortLinkUrl(config, shortLinkIds[5]), conventionStatusLink: makeShortLinkUrl(config, shortLinkIds[2]), possibleRoleAction: "en considérer la validation", @@ -614,22 +614,22 @@ describe("NotifyConventionNeedsReview", () => { ]; shortLinkIdGeneratorGateway.addMoreShortLinkIds(shortLinkIds); - const conventionAcceptedByCounsellorWithPeAdvisor = + const conventionAcceptedByCounsellorWithFtAdvisor = new ConventionDtoBuilder(defaultConvention) .withStatus("ACCEPTED_BY_COUNSELLOR") - .withFederatedIdentity(peIdentity) + .withFederatedIdentity(ftIdentity) .build(); const userConventionAdvisor: ConventionFtUserAdvisorEntity = { _entityName: "ConventionFranceTravailAdvisor", advisor: { - email: peAdvisorEmail, + email: ftAdvisorEmail, firstName: "Elsa", lastName: "Oldenburg", type: "CAPEMPLOI", }, - peExternalId: peIdentity.token, - conventionId: conventionAcceptedByCounsellorWithPeAdvisor.id, + peExternalId: ftIdentity.token, + conventionId: conventionAcceptedByCounsellorWithFtAdvisor.id, }; uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( @@ -637,47 +637,47 @@ describe("NotifyConventionNeedsReview", () => { ); await notifyNewConventionNeedsReview.execute({ - convention: conventionAcceptedByCounsellorWithPeAdvisor, + convention: conventionAcceptedByCounsellorWithFtAdvisor, }); expectToEqual(uow.shortLinkQuery.getShortLinks(), { [shortLinkIds[0]]: fakeGenerateMagicLinkUrlFn({ - id: conventionAcceptedByCounsellorWithPeAdvisor.id, + id: conventionAcceptedByCounsellorWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.conventionStatusDashboard, - email: peAdvisorEmail, + email: ftAdvisorEmail, now: timeGateway.now(), }), [shortLinkIds[1]]: fakeGenerateMagicLinkUrlFn({ - id: conventionAcceptedByCounsellorWithPeAdvisor.id, + id: conventionAcceptedByCounsellorWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.conventionStatusDashboard, email: validator1.email, now: timeGateway.now(), }), [shortLinkIds[2]]: fakeGenerateMagicLinkUrlFn({ - id: conventionAcceptedByCounsellorWithPeAdvisor.id, + id: conventionAcceptedByCounsellorWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.conventionStatusDashboard, email: validator2.email, now: timeGateway.now(), }), [shortLinkIds[3]]: fakeGenerateMagicLinkUrlFn({ - id: conventionAcceptedByCounsellorWithPeAdvisor.id, + id: conventionAcceptedByCounsellorWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.manageConvention, - email: peAdvisorEmail, + email: ftAdvisorEmail, now: timeGateway.now(), }), [shortLinkIds[4]]: fakeGenerateMagicLinkUrlFn({ - id: conventionAcceptedByCounsellorWithPeAdvisor.id, + id: conventionAcceptedByCounsellorWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.manageConvention, email: validator1.email, now: timeGateway.now(), }), [shortLinkIds[5]]: fakeGenerateMagicLinkUrlFn({ - id: conventionAcceptedByCounsellorWithPeAdvisor.id, + id: conventionAcceptedByCounsellorWithFtAdvisor.id, role: "validator", targetRoute: frontRoutes.manageConvention, email: validator2.email, @@ -689,19 +689,19 @@ describe("NotifyConventionNeedsReview", () => { emails: [ { kind: "NEW_CONVENTION_REVIEW_FOR_ELIGIBILITY_OR_VALIDATION", - recipients: [peAdvisorEmail], + recipients: [ftAdvisorEmail], params: { - conventionId: conventionAcceptedByCounsellorWithPeAdvisor.id, + conventionId: conventionAcceptedByCounsellorWithFtAdvisor.id, internshipKind: - conventionAcceptedByCounsellorWithPeAdvisor.internshipKind, + conventionAcceptedByCounsellorWithFtAdvisor.internshipKind, beneficiaryFirstName: - conventionAcceptedByCounsellorWithPeAdvisor.signatories + conventionAcceptedByCounsellorWithFtAdvisor.signatories .beneficiary.firstName, beneficiaryLastName: - conventionAcceptedByCounsellorWithPeAdvisor.signatories + conventionAcceptedByCounsellorWithFtAdvisor.signatories .beneficiary.lastName, businessName: - conventionAcceptedByCounsellorWithPeAdvisor.businessName, + conventionAcceptedByCounsellorWithFtAdvisor.businessName, magicLink: makeShortLinkUrl(config, shortLinkIds[3]), conventionStatusLink: makeShortLinkUrl(config, shortLinkIds[0]), possibleRoleAction: "en considérer la validation", @@ -718,17 +718,17 @@ describe("NotifyConventionNeedsReview", () => { kind: "NEW_CONVENTION_REVIEW_FOR_ELIGIBILITY_OR_VALIDATION", recipients: [validator1.email], params: { - conventionId: conventionAcceptedByCounsellorWithPeAdvisor.id, + conventionId: conventionAcceptedByCounsellorWithFtAdvisor.id, internshipKind: - conventionAcceptedByCounsellorWithPeAdvisor.internshipKind, + conventionAcceptedByCounsellorWithFtAdvisor.internshipKind, beneficiaryFirstName: - conventionAcceptedByCounsellorWithPeAdvisor.signatories + conventionAcceptedByCounsellorWithFtAdvisor.signatories .beneficiary.firstName, beneficiaryLastName: - conventionAcceptedByCounsellorWithPeAdvisor.signatories + conventionAcceptedByCounsellorWithFtAdvisor.signatories .beneficiary.lastName, businessName: - conventionAcceptedByCounsellorWithPeAdvisor.businessName, + conventionAcceptedByCounsellorWithFtAdvisor.businessName, magicLink: makeShortLinkUrl(config, shortLinkIds[4]), conventionStatusLink: makeShortLinkUrl(config, shortLinkIds[1]), possibleRoleAction: "en considérer la validation", @@ -745,17 +745,17 @@ describe("NotifyConventionNeedsReview", () => { kind: "NEW_CONVENTION_REVIEW_FOR_ELIGIBILITY_OR_VALIDATION", recipients: [validator2.email], params: { - conventionId: conventionAcceptedByCounsellorWithPeAdvisor.id, + conventionId: conventionAcceptedByCounsellorWithFtAdvisor.id, internshipKind: - conventionAcceptedByCounsellorWithPeAdvisor.internshipKind, + conventionAcceptedByCounsellorWithFtAdvisor.internshipKind, beneficiaryFirstName: - conventionAcceptedByCounsellorWithPeAdvisor.signatories + conventionAcceptedByCounsellorWithFtAdvisor.signatories .beneficiary.firstName, beneficiaryLastName: - conventionAcceptedByCounsellorWithPeAdvisor.signatories + conventionAcceptedByCounsellorWithFtAdvisor.signatories .beneficiary.lastName, businessName: - conventionAcceptedByCounsellorWithPeAdvisor.businessName, + conventionAcceptedByCounsellorWithFtAdvisor.businessName, magicLink: makeShortLinkUrl(config, shortLinkIds[5]), conventionStatusLink: makeShortLinkUrl(config, shortLinkIds[2]), possibleRoleAction: "en considérer la validation", diff --git a/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts b/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts index ba842926f0..c22d855c83 100644 --- a/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts +++ b/back/src/domains/convention/use-cases/notifications/NotifyToAgencyConventionSubmitted.unit.test.ts @@ -3,8 +3,8 @@ import { AgencyWithUsersRights, ConventionDto, ConventionDtoBuilder, + FtConnectIdentity, InclusionConnectedUserBuilder, - PeConnectIdentity, expectToEqual, frontRoutes, } from "shared"; @@ -89,7 +89,7 @@ describe("NotifyToAgencyConventionSubmitted", () => { }, }, ); - const agencyPeWithCouncellors = toAgencyWithRights( + const agencyFtWithCounsellors = toAgencyWithRights( AgencyDtoBuilder.create("agency-pe-with-councellors") .withKind("pole-emploi") @@ -134,7 +134,7 @@ describe("NotifyToAgencyConventionSubmitted", () => { uow.agencyRepository.agencies = [ agencyWithOnlyValidator, agencyWithConsellorsAndValidator, - agencyPeWithCouncellors, + agencyFtWithCounsellors, ]; uow.userRepository.users = [validator, councellor1, councellor2]; expectSavedNotificationsAndEvents = makeExpectSavedNotificationsAndEvents( @@ -299,20 +299,20 @@ describe("NotifyToAgencyConventionSubmitted", () => { "shortlink4", ]; shortLinkIdGeneratorGateway.addMoreShortLinkIds(shortLinkIds); - const peIdentity: PeConnectIdentity = { + const ftIdentity: FtConnectIdentity = { provider: "peConnect", token: "123", }; const validConvention = new ConventionDtoBuilder() - .withAgencyId(agencyPeWithCouncellors.id) - .withFederatedIdentity(peIdentity) + .withAgencyId(agencyFtWithCounsellors.id) + .withFederatedIdentity(ftIdentity) .build(); uow.conventionFranceTravailAdvisorRepository.setConventionFranceTravailUsersAdvisor( [ { conventionId: validConvention.id, - peExternalId: peIdentity.token, + peExternalId: ftIdentity.token, _entityName: "ConventionFranceTravailAdvisor", advisor: undefined, }, @@ -398,26 +398,26 @@ describe("NotifyToAgencyConventionSubmitted", () => { const shortLinkIds = ["shortlink1", "shortlink2"]; shortLinkIdGeneratorGateway.addMoreShortLinkIds(shortLinkIds); - const peAdvisorEmail = "pe-advisor@gmail.com"; - const peIdentity: PeConnectIdentity = { + const ftAdvisorEmail = "ft-advisor@gmail.com"; + const ftIdentity: FtConnectIdentity = { provider: "peConnect", token: "123", }; const validConvention = new ConventionDtoBuilder() - .withAgencyId(agencyPeWithCouncellors.id) - .withFederatedIdentity(peIdentity) + .withAgencyId(agencyFtWithCounsellors.id) + .withFederatedIdentity(ftIdentity) .build(); const userConventionAdvisor: ConventionFtUserAdvisorEntity = { _entityName: "ConventionFranceTravailAdvisor", advisor: { - email: peAdvisorEmail, + email: ftAdvisorEmail, firstName: "Elsa", lastName: "Oldenburg", type: "CAPEMPLOI", }, - peExternalId: peIdentity.token, + peExternalId: ftIdentity.token, conventionId: validConvention.id, }; @@ -434,14 +434,14 @@ describe("NotifyToAgencyConventionSubmitted", () => { id: validConvention.id, role: "validator", targetRoute: frontRoutes.manageConvention, - email: peAdvisorEmail, + email: ftAdvisorEmail, now: timeGateway.now(), }), [shortLinkIds[1]]: fakeGenerateMagicLinkUrlFn({ id: validConvention.id, role: "validator", targetRoute: frontRoutes.conventionStatusDashboard, - email: peAdvisorEmail, + email: ftAdvisorEmail, now: timeGateway.now(), }), }); @@ -450,7 +450,7 @@ describe("NotifyToAgencyConventionSubmitted", () => { emails: [ { kind: "NEW_CONVENTION_AGENCY_NOTIFICATION", - recipients: [peAdvisorEmail], + recipients: [ftAdvisorEmail], params: { internshipKind: validConvention.internshipKind, warning: undefined, diff --git a/back/src/domains/core/authentication/ft-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts b/back/src/domains/core/authentication/ft-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts index 097a906028..53c4d89436 100644 --- a/back/src/domains/core/authentication/ft-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/InMemoryConventionFranceTravailAdvisorRepository.ts @@ -67,7 +67,7 @@ export class InMemoryConventionFranceTravailAdvisorRepository ): Promise { const entity: ConventionFtUserAdvisorEntity | undefined = this.#conventionFranceTravailUsersAdvisors - .filter(matchPeExternalId(peExternalId)) + .filter(matchFtExternalId(peExternalId)) .find(isOpenEntity); if (entity) return entity; throw errors.convention.missingFTAdvisor({ ftExternalId: peExternalId }); @@ -86,10 +86,10 @@ export class InMemoryConventionFranceTravailAdvisorRepository export const CONVENTION_ID_DEFAULT_UUID = "00000000-0000-0000-0000-000000000000"; -const matchPeExternalId = - (peExternalId: string) => +const matchFtExternalId = + (ftExternalId: string) => (conventionFranceTravailUserAdvisor: ConventionFtUserAdvisorEntity) => - conventionFranceTravailUserAdvisor.peExternalId === peExternalId; + conventionFranceTravailUserAdvisor.peExternalId === ftExternalId; const matchConventionId = (conventionId: string) => diff --git a/back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts b/back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts index 78189128f0..11e5cc5c43 100644 --- a/back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/PgConventionFranceTravailAdvisorRepository.integration.test.ts @@ -23,7 +23,7 @@ import { FtConnectUserDto } from "../dto/FtConnectUserDto"; import { PgConventionFranceTravailAdvisorRepository } from "./PgConventionFranceTravailAdvisorRepository"; const conventionId = "88401348-bad9-4933-87c6-405b8a8fe4cc"; -const userPeExternalId = "92f44bbf-103d-4312-bd74-217c7d79f618"; +const userFtExternalId = "92f44bbf-103d-4312-bd74-217c7d79f618"; const convention = new ConventionDtoBuilder().withId(conventionId).build(); @@ -32,7 +32,7 @@ const user: FtConnectUserDto = { firstName: "", isJobseeker: true, lastName: "", - peExternalId: userPeExternalId, + peExternalId: userFtExternalId, }; const placementAdvisor: FtConnectImmersionAdvisorDto = { firstName: "Jean", @@ -172,7 +172,7 @@ describe("PgConventionFranceTravailAdvisorRepository", () => { await expect( conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( conventionId, - userPeExternalId, + userFtExternalId, ), ).rejects.toThrow( new Error( @@ -187,7 +187,7 @@ describe("PgConventionFranceTravailAdvisorRepository", () => { ); await conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( conventionId, - userPeExternalId, + userFtExternalId, ); expectToEqual( @@ -223,7 +223,7 @@ describe("PgConventionFranceTravailAdvisorRepository", () => { ); await conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( conventionId, - userPeExternalId, + userFtExternalId, ); const conventionAdvisor: ConventionFtUserAdvisorEntity | undefined = @@ -245,7 +245,7 @@ describe("PgConventionFranceTravailAdvisorRepository", () => { ); await conventionFranceTravailAdvisorRepository.associateConventionAndUserAdvisor( conventionId, - userPeExternalId, + userFtExternalId, ); const conventionAdvisor: ConventionFtUserAdvisorEntity | undefined = diff --git a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.manual.test.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.manual.test.ts index d27a8a39d7..e0efd1050b 100644 --- a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.manual.test.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.manual.test.ts @@ -16,24 +16,24 @@ import { ExternalFtConnectUser, } from "./ftConnectApi.dto"; import { - makePeConnectExternalRoutes, - toPeConnectAdvisorDto, - toPeConnectUserDto, + makeFtConnectExternalRoutes, + toFtConnectAdvisorDto, + toFtConnectUserDto, } from "./ftConnectApi.routes"; const unhandledStatusCode = 201; -describe("HttpPeConnectGateway", () => { - const routes = makePeConnectExternalRoutes({ - peApiUrl: "https://fake-pe.fr", - peAuthCandidatUrl: "https://fake-pe.fr/auth/candidat", +describe("HttpFtConnectGateway", () => { + const routes = makeFtConnectExternalRoutes({ + ftApiUrl: "https://fake-ft.fr", + ftAuthCandidatUrl: "https://fake-ft.fr/auth/candidat", }); const httpClient = createAxiosSharedClient(routes, axios, { skipResponseValidation: true, }); - const peConnectGateway = new HttpFtConnectGateway(httpClient, { + const ftConnectGateway = new HttpFtConnectGateway(httpClient, { immersionFacileBaseUrl: "https://fake-immersion.fr", franceTravailClientId: "pe-client-id", franceTravailClientSecret: "pe-client-secret", @@ -48,7 +48,7 @@ describe("HttpPeConnectGateway", () => { idIdentiteExterne: "617cd5a3-2cbd-477c-96a0-85d34381f815", sub: "617cd5a3-2cbd-477c-96a0-85d34381f815", }; - const peExternalAdvisorCapemploi: ExternalFtConnectAdvisor = { + const ftExternalAdvisorCapemploi: ExternalFtConnectAdvisor = { type: "CAPEMPLOI", civilite: "1", mail: "capEmploiAdvisor@pe.fr", @@ -62,13 +62,13 @@ describe("HttpPeConnectGateway", () => { nom: "prost", prenom: "alain", }; - const peConnectUser = (isUserJobseeker: boolean) => - toPeConnectUserDto({ ...peExternalUser, isUserJobseeker }); - const peConnectAdvisorPlacement = toPeConnectAdvisorDto( + const ftConnectUser = (isUserJobseeker: boolean) => + toFtConnectUserDto({ ...peExternalUser, isUserJobseeker }); + const ftConnectAdvisorPlacement = toFtConnectAdvisorDto( peExternalAdvisorPlacement, ); - const peConnectAdvisorCapEmploi = toPeConnectAdvisorDto( - peExternalAdvisorCapemploi, + const ftConnectAdvisorCapEmploi = toFtConnectAdvisorDto( + ftExternalAdvisorCapemploi, ); const accessToken = { @@ -86,7 +86,7 @@ describe("HttpPeConnectGateway", () => { mock .onPost(routes.exchangeCodeForAccessToken.url) .reply(200, expectedResponse); - expectObjectsToMatch(await peConnectGateway.getAccessToken(""), { + expectObjectsToMatch(await ftConnectGateway.getAccessToken(""), { expiresIn: expectedResponse.expires_in, value: expectedResponse.access_token, }); @@ -101,7 +101,7 @@ describe("HttpPeConnectGateway", () => { error: "invalid_grant", }); await expectPromiseToFailWithError( - peConnectGateway.getAccessToken(""), + ftConnectGateway.getAccessToken(""), new ManagedRedirectError( "peConnectInvalidGrant", new Error("Request failed with status code 400"), @@ -112,7 +112,7 @@ describe("HttpPeConnectGateway", () => { it("request aborted -> ManagedRedirectError kind peConnectConnectionAborted", async () => { mock.onPost(routes.exchangeCodeForAccessToken.url).abortRequest(); await testManagedRedirectError( - () => peConnectGateway.getAccessToken(""), + () => ftConnectGateway.getAccessToken(""), new ManagedRedirectError("peConnectConnectionAborted", new Error()), ); }); @@ -134,18 +134,18 @@ describe("HttpPeConnectGateway", () => { }); expectObjectsToMatch( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), { - advisors: [peConnectAdvisorPlacement], - user: peConnectUser(true), + advisors: [ftConnectAdvisorPlacement], + user: ftConnectUser(true), }, ); }); - it(`OK with ${peExternalUser.email} user and ${peExternalAdvisorCapemploi.mail} advisor`, async () => { + it(`OK with ${peExternalUser.email} user and ${ftExternalAdvisorCapemploi.mail} advisor`, async () => { mock .onGet(routes.getAdvisorsInfo.url) - .reply(200, [peExternalAdvisorCapemploi]) + .reply(200, [ftExternalAdvisorCapemploi]) .onGet(routes.getUserInfo.url) .reply(200, peExternalUser) .onGet(routes.getUserStatutInfo.url) @@ -155,10 +155,10 @@ describe("HttpPeConnectGateway", () => { }); expectObjectsToMatch( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), { - advisors: [peConnectAdvisorCapEmploi], - user: peConnectUser(true), + advisors: [ftConnectAdvisorCapEmploi], + user: ftConnectUser(true), }, ); }); @@ -174,10 +174,10 @@ describe("HttpPeConnectGateway", () => { }); expectObjectsToMatch( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), { advisors: [], - user: peConnectUser(false), + user: ftConnectUser(false), }, ); }); @@ -188,7 +188,7 @@ describe("HttpPeConnectGateway", () => { // it(`Timeout on getUserInfo -> Retry`, async () => { // mock // .onGet(peConnectTargets(appConfig).getAdvisorsInfo.url) - // .reply(200, [peExternalAdvisorCapemploi]) + // .reply(200, [ftExternalAdvisorCapemploi]) // .onGet(peConnectTargets(appConfig).getUserInfo.url) // .timeout() // /* .onGet(peConnectTargets(appConfig).getUserInfo.url) @@ -198,9 +198,9 @@ describe("HttpPeConnectGateway", () => { // codeStatutIndividu: "1", // libelleStatutIndividu: "Demandeur d’emploi", // }); - // expectObjectsToMatch(await peConnectGateway.getUserAndAdvisors(accessToken), { - // advisors: [peConnectAdvisorCapEmploi], - // user: peConnectUser(true), + // expectObjectsToMatch(await ftConnectGateway.getUserAndAdvisors(accessToken), { + // advisors: [ftConnectAdvisorCapEmploi], + // user: ftConnectUser(true), // }); // }); @@ -216,14 +216,14 @@ describe("HttpPeConnectGateway", () => { libelleStatutIndividu: "Demandeur d’emploi", }); expect( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), ).toBeUndefined(); }); it("Bad status code -> OK with undefined", async () => { mock .onGet(routes.getAdvisorsInfo.url) - .reply(200, [peExternalAdvisorCapemploi]) + .reply(200, [ftExternalAdvisorCapemploi]) .onGet(routes.getUserInfo.url) .reply(unhandledStatusCode, peExternalUser) .onGet(routes.getUserStatutInfo.url) @@ -232,7 +232,7 @@ describe("HttpPeConnectGateway", () => { libelleStatutIndividu: "Demandeur d’emploi", }); expect( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), ).toBeUndefined(); }); @@ -243,7 +243,7 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserInfo.url) .abortRequest(); await expectPromiseToFailWithError( - peConnectGateway.getUserAndAdvisors(accessToken), + ftConnectGateway.getUserAndAdvisors(accessToken), new ManagedRedirectError( "peConnectConnectionAborted", new Error("Request aborted"), @@ -258,7 +258,7 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserInfo.url) .networkError(); await testRawRedirectError( - () => peConnectGateway.getUserAndAdvisors(accessToken), + () => ftConnectGateway.getUserAndAdvisors(accessToken), new RawRedirectError( "Une erreur est survenue - Erreur réseau", "Nous n’avons pas réussi à joindre pôle emploi connect.", @@ -274,7 +274,7 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserInfo.url) .reply(401); await expectPromiseToFailWithError( - peConnectGateway.getUserAndAdvisors(accessToken), + ftConnectGateway.getUserAndAdvisors(accessToken), new ManagedRedirectError( "peConnectGetUserInfoForbiddenAccess", new Error("Request failed with status code 401"), @@ -289,7 +289,7 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserInfo.url) .reply(500); await testRawRedirectError( - () => peConnectGateway.getUserAndAdvisors(accessToken), + () => ftConnectGateway.getUserAndAdvisors(accessToken), new RawRedirectError( "Une erreur est survenue - 500", "Nous n’avons pas réussi à récupérer vos informations personnelles pôle emploi connect.", @@ -307,15 +307,15 @@ describe("HttpPeConnectGateway", () => { // /* .onGet(peConnectTargets(appConfig).getUserInfo.url) // .reply(200, peExternalUser)*/ // .onGet(peConnectTargets(appConfig).getAdvisorsInfo.url) - // .reply(200, [peExternalAdvisorCapemploi]) + // .reply(200, [ftExternalAdvisorCapemploi]) // .onGet(peConnectTargets(appConfig).getUserStatutInfo.url) // .reply(200, { // codeStatutIndividu: "1", // libelleStatutIndividu: "Demandeur d’emploi", // }); - // expectObjectsToMatch(await peConnectGateway.getUserAndAdvisors(accessToken), { - // advisors: [peConnectAdvisorCapEmploi], - // user: peConnectUser(true), + // expectObjectsToMatch(await ftConnectGateway.getUserAndAdvisors(accessToken), { + // advisors: [ftConnectAdvisorCapEmploi], + // user: ftConnectUser(true), // }); // }); @@ -331,10 +331,10 @@ describe("HttpPeConnectGateway", () => { libelleStatutIndividu: "Demandeur d’emploi", }); expectObjectsToMatch( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), { advisors: [], - user: peConnectUser(true), + user: ftConnectUser(true), }, ); }); @@ -342,7 +342,7 @@ describe("HttpPeConnectGateway", () => { it("Bad status code -> OK with No advisors", async () => { mock .onGet(routes.getAdvisorsInfo.url) - .reply(unhandledStatusCode, [peExternalAdvisorCapemploi]) + .reply(unhandledStatusCode, [ftExternalAdvisorCapemploi]) .onGet(routes.getUserInfo.url) .reply(200, peExternalUser) .onGet(routes.getUserStatutInfo.url) @@ -351,10 +351,10 @@ describe("HttpPeConnectGateway", () => { libelleStatutIndividu: "Demandeur d’emploi", }); expectObjectsToMatch( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), { advisors: [], - user: peConnectUser(true), + user: ftConnectUser(true), }, ); }); @@ -371,7 +371,7 @@ describe("HttpPeConnectGateway", () => { libelleStatutIndividu: "Demandeur d’emploi", }); await testManagedRedirectError( - () => peConnectGateway.getUserAndAdvisors(accessToken), + () => ftConnectGateway.getUserAndAdvisors(accessToken), new ManagedRedirectError("peConnectConnectionAborted", new Error()), ); }); @@ -388,7 +388,7 @@ describe("HttpPeConnectGateway", () => { libelleStatutIndividu: "Demandeur d’emploi", }); await testRawRedirectError( - () => peConnectGateway.getUserAndAdvisors(accessToken), + () => ftConnectGateway.getUserAndAdvisors(accessToken), new RawRedirectError( "Une erreur est survenue - Erreur réseau", "Nous n’avons pas réussi à joindre pôle emploi connect.", @@ -409,7 +409,7 @@ describe("HttpPeConnectGateway", () => { libelleStatutIndividu: "Demandeur d’emploi", }); await testManagedRedirectError( - () => peConnectGateway.getUserAndAdvisors(accessToken), + () => ftConnectGateway.getUserAndAdvisors(accessToken), new ManagedRedirectError( "peConnectAdvisorForbiddenAccess", new Error(), @@ -429,10 +429,10 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getAdvisorsInfo.url) .reply(500); await expectObjectsToMatch( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), { advisors: [], - user: peConnectUser(true), + user: ftConnectUser(true), }, ); }); @@ -448,10 +448,10 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserStatutInfo.url) .reply(200, "UNSUPPORTED RESPONSE"); expectObjectsToMatch( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), { advisors: [], - user: peConnectUser(false), + user: ftConnectUser(false), }, ); }); @@ -459,7 +459,7 @@ describe("HttpPeConnectGateway", () => { it("Bad status code -> OK with No advisors and not jobseeker", async () => { mock .onGet(routes.getAdvisorsInfo.url) - .reply(200, [peExternalAdvisorCapemploi]) + .reply(200, [ftExternalAdvisorCapemploi]) .onGet(routes.getUserInfo.url) .reply(200, peExternalUser) .onGet(routes.getUserStatutInfo.url) @@ -468,10 +468,10 @@ describe("HttpPeConnectGateway", () => { libelleStatutIndividu: "Demandeur d’emploi", }); expectObjectsToMatch( - await peConnectGateway.getUserAndAdvisors(accessToken), + await ftConnectGateway.getUserAndAdvisors(accessToken), { advisors: [], - user: peConnectUser(false), + user: ftConnectUser(false), }, ); }); @@ -485,7 +485,7 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserStatutInfo.url) .abortRequest(); await expectPromiseToFailWithError( - peConnectGateway.getUserAndAdvisors(accessToken), + ftConnectGateway.getUserAndAdvisors(accessToken), new ManagedRedirectError( "peConnectConnectionAborted", new Error("Request aborted"), @@ -502,7 +502,7 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserStatutInfo.url) .networkError(); await testRawRedirectError( - () => peConnectGateway.getUserAndAdvisors(accessToken), + () => ftConnectGateway.getUserAndAdvisors(accessToken), new RawRedirectError( "Une erreur est survenue - Erreur réseau", "Nous n’avons pas réussi à joindre pôle emploi connect.", @@ -520,7 +520,7 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserStatutInfo.url) .reply(401); await expectPromiseToFailWithError( - peConnectGateway.getUserAndAdvisors(accessToken), + ftConnectGateway.getUserAndAdvisors(accessToken), new ManagedRedirectError( "peConnectGetUserStatusInfoForbiddenAccess", new Error("Request failed with status code 401"), @@ -537,7 +537,7 @@ describe("HttpPeConnectGateway", () => { .onGet(routes.getUserStatutInfo.url) .reply(500); await testRawRedirectError( - () => peConnectGateway.getUserAndAdvisors(accessToken), + () => ftConnectGateway.getUserAndAdvisors(accessToken), new RawRedirectError( "Une erreur est survenue - 500", "Nous n’avons pas réussi à récupérer votre status pôle emploi connect.", diff --git a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.ts index 1be4527d93..6ba94a102e 100644 --- a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/HttpFtConnectGateway.ts @@ -22,17 +22,17 @@ import { FtConnectHeaders, FtConnectOauthConfig, } from "./ftConnectApi.dto"; -import { peConnectErrorStrategy as peConnectAxiosErrorStrategy } from "./ftConnectApi.error"; +import { ftConnectErrorStrategy } from "./ftConnectApi.error"; import { - PeConnectExternalRoutes, + FtConnectExternalRoutes, toAccessToken, - toPeConnectAdvisorDto, - toPeConnectUserDto, + toFtConnectAdvisorDto, + toFtConnectUserDto, } from "./ftConnectApi.routes"; import { - externalPeConnectAdvisorsSchema, - externalPeConnectUserSchema, - externalPeConnectUserStatutSchema, + externalFtConnectAdvisorsSchema, + externalFtConnectUserSchema, + externalFtConnectUserStatutSchema, } from "./ftConnectApi.schema"; const logger = createLogger(__filename); @@ -44,7 +44,7 @@ type CounterType = | "exchangeCodeForAccessToken"; const counterApiKind = "peConnect"; -const makePeConnectLogger = ( +const makeFtConnectLogger = ( logger: OpacifiedLogger, counterType: CounterType, ) => ({ @@ -68,16 +68,16 @@ const makePeConnectLogger = ( }), }); -const getUserStatutInfoLogger = makePeConnectLogger( +const getUserStatutInfoLogger = makeFtConnectLogger( logger, "getUserStatutInfo", ); -const getAdvisorsInfoLogger = makePeConnectLogger(logger, "getAdvisorsInfo"); +const getAdvisorsInfoLogger = makeFtConnectLogger(logger, "getAdvisorsInfo"); -const getUserInfoLogger = makePeConnectLogger(logger, "getUserInfo"); +const getUserInfoLogger = makeFtConnectLogger(logger, "getUserInfo"); -const exchangeCodeForAccessTokenLogger = makePeConnectLogger( +const exchangeCodeForAccessTokenLogger = makeFtConnectLogger( logger, "exchangeCodeForAccessToken", ); @@ -85,9 +85,9 @@ const exchangeCodeForAccessTokenLogger = makePeConnectLogger( const ftConnectMaxRequestsPerInterval = 1; const rate_ms = 1250; -// TODO GERER LE RETRY POUR L'ENSEMBLE DES APPELS PE +// TODO GERER LE RETRY POUR L'ENSEMBLE DES APPELS FT export class HttpFtConnectGateway implements FtConnectGateway { - // PE Connect limit rate at 1 call per 1.2s + // FT Connect limit rate at 1 call per 1.2s #limiter = new Bottleneck({ reservoir: ftConnectMaxRequestsPerInterval, reservoirRefreshInterval: rate_ms, // number of ms @@ -97,7 +97,7 @@ export class HttpFtConnectGateway implements FtConnectGateway { }); constructor( - private httpClient: HttpClient, + private httpClient: HttpClient, private configs: FtConnectOauthConfig, ) {} @@ -143,7 +143,7 @@ export class HttpFtConnectGateway implements FtConnectGateway { }, (payload) => notifyDiscordOnNotError(payload), ); - return managePeConnectError(error, "exchangeCodeForAccessToken", { + return manageFtConnectError(error, "exchangeCodeForAccessToken", { authorization: authorizationCode, }); } @@ -162,19 +162,19 @@ export class HttpFtConnectGateway implements FtConnectGateway { Authorization: `Bearer ${accessToken.value}`, }; - const externalPeUser = await this.#getUserInfo(headers); + const externalFtUser = await this.#getUserInfo(headers); const isUserJobseeker = await this.#userIsJobseeker( headers, - externalPeUser?.idIdentiteExterne, + externalFtUser?.idIdentiteExterne, ); - return externalPeUser + return externalFtUser ? { - user: toPeConnectUserDto({ ...externalPeUser, isUserJobseeker }), + user: toFtConnectUserDto({ ...externalFtUser, isUserJobseeker }), advisors: (isUserJobseeker ? await this.#getAdvisorsInfo(headers) : [] - ).map(toPeConnectAdvisorDto), + ).map(toFtConnectAdvisorDto), } : undefined; } @@ -199,13 +199,13 @@ export class HttpFtConnectGateway implements FtConnectGateway { }); return false; } - const externalPeConnectStatut = parseZodSchemaAndLogErrorOnParsingFailure( - externalPeConnectUserStatutSchema, + const externalFtConnectStatut = parseZodSchemaAndLogErrorOnParsingFailure( + externalFtConnectUserStatutSchema, response.body, logger, ); const isJobSeeker = isJobSeekerFromStatus( - externalPeConnectStatut.codeStatutIndividu, + externalFtConnectStatut.codeStatutIndividu, ); log.success({ ftConnect: { peExternalId, isJobSeeker } }); return isJobSeeker; @@ -219,7 +219,7 @@ export class HttpFtConnectGateway implements FtConnectGateway { ); return error instanceof ZodError ? false - : managePeConnectError(error, "getUserStatutInfo", { + : manageFtConnectError(error, "getUserStatutInfo", { authorization: headers.Authorization, }); } @@ -243,13 +243,13 @@ export class HttpFtConnectGateway implements FtConnectGateway { }); return undefined; } - const externalPeConnectUser = parseZodSchemaAndLogErrorOnParsingFailure( - externalPeConnectUserSchema, + const externalFtConnectUser = parseZodSchemaAndLogErrorOnParsingFailure( + externalFtConnectUserSchema, response.body, logger, ); log.success({}); - return externalPeConnectUser; + return externalFtConnectUser; } catch (error) { errorChecker( error, @@ -259,7 +259,7 @@ export class HttpFtConnectGateway implements FtConnectGateway { (payload) => notifyDiscordOnNotError(payload), ); if (error instanceof ZodError) return undefined; - return managePeConnectError(error, "getUserInfo", { + return manageFtConnectError(error, "getUserInfo", { authorization: headers.Authorization, }); } @@ -283,14 +283,14 @@ export class HttpFtConnectGateway implements FtConnectGateway { }); return []; } - const externalPeConnectAdvisors = + const externalFtConnectAdvisors = parseZodSchemaAndLogErrorOnParsingFailure( - externalPeConnectAdvisorsSchema, + externalFtConnectAdvisorsSchema, response.body, logger, ); log.success({}); - return externalPeConnectAdvisors; + return externalFtConnectAdvisors; } catch (error) { errorChecker( error, @@ -307,16 +307,16 @@ export class HttpFtConnectGateway implements FtConnectGateway { }); return []; } - return managePeConnectError(error, "getAdvisorsInfo", { + return manageFtConnectError(error, "getAdvisorsInfo", { authorization: headers.Authorization, }); } } } -const managePeConnectError = ( +const manageFtConnectError = ( error: unknown, - routeName: keyof PeConnectExternalRoutes, + routeName: keyof FtConnectExternalRoutes, context: Record, ): never => { if (!(error instanceof Error)) @@ -326,12 +326,10 @@ const managePeConnectError = ( ); if (axios.isAxiosError(error)) { logger.error({ - message: `PE CONNECT ERROR - ${routeName}`, + message: `FT CONNECT ERROR - ${routeName}`, error, }); - const handledError = peConnectAxiosErrorStrategy(error, routeName).get( - true, - ); + const handledError = ftConnectErrorStrategy(error, routeName).get(true); if (handledError) throw handledError; throw new UnhandledError("Erreur axios non gérée", error); } @@ -358,7 +356,7 @@ const notifyDiscordOnNotError = (payload: unknown): void => const isJobSeekerFromStatus = (codeStatutIndividu: "0" | "1"): boolean => codeStatutIndividu === "1"; -/** Should not occur if PE apis respect contract => a jobseeker OAuth should have advisors */ +/** Should not occur if FT apis respect contract => a jobseeker OAuth should have advisors */ const isJobseekerButNoAdvisorsResponse = (error: unknown) => axios.isAxiosError(error) && error.response?.status === HTTP_STATUS.INTERNAL_SERVER_ERROR; diff --git a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryFtConnectGateway.ts similarity index 84% rename from back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway.ts rename to back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryFtConnectGateway.ts index 994ff03e9e..657d947654 100644 --- a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryFtConnectGateway.ts @@ -3,7 +3,7 @@ import { FtConnectAdvisorDto } from "../../dto/FtConnectAdvisor.dto"; import { FtConnectUserDto } from "../../dto/FtConnectUserDto"; import { FtConnectGateway } from "../../port/FtConnectGateway"; -export class InMemoryPeConnectGateway implements FtConnectGateway { +export class InMemoryFtConnectGateway implements FtConnectGateway { #accessToken: AccessTokenDto | undefined = undefined; #advisors: FtConnectAdvisorDto[] = []; @@ -24,14 +24,10 @@ export class InMemoryPeConnectGateway implements FtConnectGateway { | undefined > { if (!this.#user) return undefined; - const peUserAndAdvisor: { - user: FtConnectUserDto; - advisors: FtConnectAdvisorDto[]; - } = { + return { advisors: this.#advisors, user: this.#user, }; - return peUserAndAdvisor; } public setAccessToken(accessToken: AccessTokenDto) { diff --git a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.error.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.error.ts index 2eb842d0a0..261398cb9e 100644 --- a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.error.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.error.ts @@ -1,9 +1,9 @@ import { AxiosError } from "axios"; import { HTTP_STATUS, ManagedRedirectError, RawRedirectError } from "shared"; import { UnhandledError } from "../../../../../../config/helpers/handleHttpJsonResponseError"; -import { PeConnectExternalRoutes } from "./ftConnectApi.routes"; +import { FtConnectExternalRoutes } from "./ftConnectApi.routes"; -type PeConnectTargetsKind = keyof PeConnectExternalRoutes; +type FtConnectTargetsKind = keyof FtConnectExternalRoutes; class ConnectionRefusedError extends Error { constructor( @@ -18,9 +18,9 @@ class ConnectionRefusedError extends Error { } // ! In a map the highest priority is given to the lasted entry -export const peConnectErrorStrategy = ( +export const ftConnectErrorStrategy = ( error: AxiosError, - context: PeConnectTargetsKind, + context: FtConnectTargetsKind, ) => new Map([ // Generic catch all Http errors @@ -102,7 +102,7 @@ export const peConnectErrorStrategy = ( ]); const isInvalidGrantError = ( - context: PeConnectTargetsKind, + context: FtConnectTargetsKind, error: AxiosError, ) => context === "exchangeCodeForAccessToken" && @@ -116,21 +116,21 @@ const rawRedirectTitle = (error: AxiosError) => `Une erreur est survenue - ${error.response?.status ?? error.code}`; const isGetUserInfoServerInternalError = ( - context: PeConnectTargetsKind, + context: FtConnectTargetsKind, error: AxiosError, ) => context === "getUserInfo" && error.response?.status === HTTP_STATUS.INTERNAL_SERVER_ERROR; const isGetUserStatusInfoServerInternalError = ( - context: PeConnectTargetsKind, + context: FtConnectTargetsKind, error: AxiosError, ) => context === "getUserStatutInfo" && error.response?.status === HTTP_STATUS.INTERNAL_SERVER_ERROR; const isAdvisorsServerInternalError = ( - context: PeConnectTargetsKind, + context: FtConnectTargetsKind, error: AxiosError, ) => context === "getAdvisorsInfo" && @@ -147,21 +147,21 @@ const makeRawRedirectError = ( const isAdvisorForbiddenError = ( error: AxiosError, - context: PeConnectTargetsKind, + context: FtConnectTargetsKind, ): boolean => error.response?.status === HTTP_STATUS.UNAUTHORIZED && context === "getAdvisorsInfo"; const isGetUserInfoForbiddenError = ( error: AxiosError, - context: PeConnectTargetsKind, + context: FtConnectTargetsKind, ): boolean => error.response?.status === HTTP_STATUS.UNAUTHORIZED && context === "getUserInfo"; const isGetUserStatusInfoForbiddenError = ( error: AxiosError, - context: PeConnectTargetsKind, + context: FtConnectTargetsKind, ): boolean => error.response?.status === HTTP_STATUS.UNAUTHORIZED && context === "getUserStatutInfo"; diff --git a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes.ts index 5f69746423..bb06f84671 100644 --- a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.routes.ts @@ -12,9 +12,9 @@ import { ExternalFtConnectUser, ftConnectAccessTokenHeadersSchema, } from "./ftConnectApi.dto"; -import { peConnectHeadersSchema } from "./ftConnectApi.schema"; +import { ftConnectHeadersSchema } from "./ftConnectApi.schema"; -const peConnectNeededScopesForAllUsedApi = (clientId: string): string => +const ftConnectNeededScopesForAllUsedApi = (clientId: string): string => [ `application_${clientId}`, "api_peconnect-individuv1", @@ -27,13 +27,13 @@ const peConnectNeededScopesForAllUsedApi = (clientId: string): string => "statut", ].join(" "); -type PeConnectRoutesConfig = { - peApiUrl: AbsoluteUrl; - peAuthCandidatUrl: AbsoluteUrl; +type FtConnectRoutesConfig = { + ftApiUrl: AbsoluteUrl; + ftAuthCandidatUrl: AbsoluteUrl; }; -export type PeConnectExternalRoutes = ReturnType< - typeof makePeConnectExternalRoutes +export type FtConnectExternalRoutes = ReturnType< + typeof makeFtConnectExternalRoutes >; const _forceUnknownResponseBody = (responseBody: unknown): unknown => @@ -42,45 +42,45 @@ const _forceUnknownResponseBody = (responseBody: unknown): unknown => // TODO : move the validation here, and adapt the gateways // explicitely : replace forceUnknownResponseBody by validation code made actually on adapter -export const makePeConnectExternalRoutes = ({ - peApiUrl, - peAuthCandidatUrl, -}: PeConnectRoutesConfig) => +export const makeFtConnectExternalRoutes = ({ + ftApiUrl, + ftAuthCandidatUrl, +}: FtConnectRoutesConfig) => defineRoutes({ getAdvisorsInfo: defineRoute({ method: "get", - url: `${peApiUrl}/partenaire/peconnect-conseillers/v1/contactspe/conseillers`, - headersSchema: peConnectHeadersSchema, + url: `${ftApiUrl}/partenaire/peconnect-conseillers/v1/contactspe/conseillers`, + headersSchema: ftConnectHeadersSchema, responses: { 200: z.any() }, }), getUserInfo: defineRoute({ method: "get", - url: `${peApiUrl}/partenaire/peconnect-individu/v1/userinfo`, - headersSchema: peConnectHeadersSchema, + url: `${ftApiUrl}/partenaire/peconnect-individu/v1/userinfo`, + headersSchema: ftConnectHeadersSchema, responses: { 200: z.any() }, }), getUserStatutInfo: defineRoute({ method: "get", - url: `${peApiUrl}/partenaire/peconnect-statut/v1/statut`, - headersSchema: peConnectHeadersSchema, + url: `${ftApiUrl}/partenaire/peconnect-statut/v1/statut`, + headersSchema: ftConnectHeadersSchema, responses: { 200: z.any() }, }), exchangeCodeForAccessToken: defineRoute({ method: "post", - url: `${peAuthCandidatUrl}/connexion/oauth2/access_token?realm=%2Findividu`, + url: `${ftAuthCandidatUrl}/connexion/oauth2/access_token?realm=%2Findividu`, requestBodySchema: z.string(), headersSchema: ftConnectAccessTokenHeadersSchema, responses: { 200: z.any() }, }), }); -export const makePeConnectLoginPageUrl = (appConfig: AppConfig): AbsoluteUrl => +export const makeFtConnectLoginPageUrl = (appConfig: AppConfig): AbsoluteUrl => makeOauthGetAuthorizationCodeRedirectUrl(appConfig.ftAuthCandidatUrl, { response_type: "code", client_id: appConfig.franceTravailClientId, realm: "/individu", redirect_uri: `${appConfig.immersionFacileBaseUrl}/api/pe-connect`, - scope: peConnectNeededScopesForAllUsedApi(appConfig.franceTravailClientId), + scope: ftConnectNeededScopesForAllUsedApi(appConfig.franceTravailClientId), }); const makeOauthGetAuthorizationCodeRedirectUrl = ( @@ -91,7 +91,7 @@ const makeOauthGetAuthorizationCodeRedirectUrl = ( authorizationCodePayload, )}`; -export const toPeConnectAdvisorDto = ( +export const toFtConnectAdvisorDto = ( fromApi: ExternalFtConnectAdvisor, ): FtConnectAdvisorDto => ({ email: fromApi.mail, @@ -100,14 +100,14 @@ export const toPeConnectAdvisorDto = ( type: fromApi.type, }); -export const toPeConnectUserDto = ( - externalPeConnectUser: ExternalFtConnectUser & { isUserJobseeker: boolean }, +export const toFtConnectUserDto = ( + externalFtConnectUser: ExternalFtConnectUser & { isUserJobseeker: boolean }, ): FtConnectUserDto => ({ - isJobseeker: externalPeConnectUser.isUserJobseeker, - email: externalPeConnectUser.email, - firstName: externalPeConnectUser.given_name, - lastName: externalPeConnectUser.family_name, - peExternalId: externalPeConnectUser.idIdentiteExterne, + isJobseeker: externalFtConnectUser.isUserJobseeker, + email: externalFtConnectUser.email, + firstName: externalFtConnectUser.given_name, + lastName: externalFtConnectUser.family_name, + peExternalId: externalFtConnectUser.idIdentiteExterne, }); export const toAccessToken = ( diff --git a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.schema.ts b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.schema.ts index 2143390284..987fc34531 100644 --- a/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.schema.ts +++ b/back/src/domains/core/authentication/ft-connect/adapters/ft-connect-gateway/ftConnectApi.schema.ts @@ -12,7 +12,7 @@ import { FtConnectHeaders, } from "./ftConnectApi.dto"; -export const externalPeConnectUserSchema: z.Schema = +export const externalFtConnectUserSchema: z.Schema = z.object({ email: emailSchema.optional(), family_name: zStringMinLength1, @@ -22,7 +22,7 @@ export const externalPeConnectUserSchema: z.Schema = sub: zStringMinLength1, }); -export const externalPeConnectUserStatutSchema: z.Schema = +export const externalFtConnectUserStatutSchema: z.Schema = z.object({ codeStatutIndividu: z.enum(["0", "1"]), libelleStatutIndividu: z.enum([ @@ -31,25 +31,25 @@ export const externalPeConnectUserStatutSchema: z.Schema = +const ftAdvisorKindSchema: z.Schema = z.enum(ftAdvisorKinds); -const externalPeConnectAdvisorSchema: z.Schema = +const externalftConnectAdvisorSchema: z.Schema = z.object({ nom: zStringMinLength1, prenom: zStringMinLength1, civilite: z.enum(["1", "2"]), mail: emailSchema, - type: peAdvisorKindSchema, + type: ftAdvisorKindSchema, }); -export const externalPeConnectAdvisorsSchema: z.Schema< +export const externalFtConnectAdvisorsSchema: z.Schema< ExternalFtConnectAdvisor[] -> = z.array(externalPeConnectAdvisorSchema); +> = z.array(externalftConnectAdvisorSchema); const bearerSchema = z.string().regex(/^Bearer .+$/) as z.Schema; -export const peConnectHeadersSchema: z.Schema = z +export const ftConnectHeadersSchema: z.Schema = z .object({ "Content-Type": z.literal("application/json"), Accept: z.literal("application/json"), diff --git a/back/src/domains/core/authentication/ft-connect/dto/FtConnect.dto.ts b/back/src/domains/core/authentication/ft-connect/dto/FtConnect.dto.ts index be419b347a..4a32c5dec3 100644 --- a/back/src/domains/core/authentication/ft-connect/dto/FtConnect.dto.ts +++ b/back/src/domains/core/authentication/ft-connect/dto/FtConnect.dto.ts @@ -36,7 +36,7 @@ export type FtUserAndAdvisor = { user: FtConnectUserDto; }; -export const toPartialConventionDtoWithPeIdentity = ( +export const toPartialConventionDtoWithFtIdentity = ( ftConnectUserInfo: FtConnectUserDto, ): ConventionFtConnectFields => ({ email: ftConnectUserInfo.email || "", diff --git a/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.ts b/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.ts index 2097a1867a..d7881b3bda 100644 --- a/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.ts @@ -1,9 +1,9 @@ import { ConventionDto, - PeConnectIdentity, + FtConnectIdentity, WithConventionDto, authFailed, - isPeConnectIdentity, + isFtConnectIdentity, withConventionSchema, } from "shared"; import { TransactionalUseCase } from "../../../UseCase"; @@ -32,7 +32,7 @@ export class BindConventionToFederatedIdentity extends TransactionalUseCase { try { diff --git a/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts b/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts index 393ae9b092..62a1f99ec6 100644 --- a/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/BindConventionToFederatedIdentity.unit.test.ts @@ -21,8 +21,8 @@ import { FtUserAndAdvisor } from "../dto/FtConnect.dto"; import { conventionFranceTravailUserAdvisorFromDto } from "../entities/ConventionFranceTravailAdvisorEntity"; import { BindConventionToFederatedIdentity } from "./BindConventionToFederatedIdentity"; -describe("AssociatePeConnectFederatedIdentity", () => { - let associatePeConnectFederatedIdentity: BindConventionToFederatedIdentity; +describe("AssociateFtConnectFederatedIdentity", () => { + let associateFtConnectFederatedIdentity: BindConventionToFederatedIdentity; let uowPerformer: InMemoryUowPerformer; let conventionFranceTravailAdvisorRepo: InMemoryConventionFranceTravailAdvisorRepository; let outboxRepo: InMemoryOutboxRepository; @@ -40,7 +40,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { uuidGenerator, }); - associatePeConnectFederatedIdentity = new BindConventionToFederatedIdentity( + associateFtConnectFederatedIdentity = new BindConventionToFederatedIdentity( uowPerformer, createNewEvent, ); @@ -55,7 +55,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { topic: "FederatedIdentityNotBoundToConvention", payload: { convention: conventionDtoFromEvent, triggeredBy: null }, }); - await associatePeConnectFederatedIdentity.execute({ + await associateFtConnectFederatedIdentity.execute({ convention: conventionDtoFromEvent, }); @@ -71,7 +71,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { .withFederatedIdentity({ provider: "peConnect", token: authFailed }) .build(); - await associatePeConnectFederatedIdentity.execute({ + await associateFtConnectFederatedIdentity.execute({ convention: conventionDtoFromEvent, }); @@ -97,10 +97,10 @@ describe("AssociatePeConnectFederatedIdentity", () => { const conventionDtoFromEvent = new ConventionDtoBuilder() .withId(conventionId) - .withFederatedIdentity({ provider: "peConnect", token: userPeExternalId }) + .withFederatedIdentity({ provider: "peConnect", token: userFtExternalId }) .build(); - await associatePeConnectFederatedIdentity.execute({ + await associateFtConnectFederatedIdentity.execute({ convention: conventionDtoFromEvent, }); @@ -114,7 +114,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { ).toBe(conventionId); }); - it("should save event PeConnectFederatedIdentityAssociated", async () => { + it("should save event FtConnectFederatedIdentityAssociated", async () => { conventionFranceTravailAdvisorRepo.setConventionFranceTravailUsersAdvisor([ conventionFranceTravailUserAdvisorFromDto( userAdvisorDto, @@ -124,10 +124,10 @@ describe("AssociatePeConnectFederatedIdentity", () => { const conventionDtoFromEvent = new ConventionDtoBuilder() .withId(conventionId) - .withFederatedIdentity({ provider: "peConnect", token: userPeExternalId }) + .withFederatedIdentity({ provider: "peConnect", token: userFtExternalId }) .build(); - await associatePeConnectFederatedIdentity.execute({ + await associateFtConnectFederatedIdentity.execute({ convention: conventionDtoFromEvent, }); @@ -156,10 +156,10 @@ describe("AssociatePeConnectFederatedIdentity", () => { const conventionDtoFromEvent = new ConventionDtoBuilder() .withId(conventionId) - .withFederatedIdentity({ provider: "peConnect", token: userPeExternalId }) + .withFederatedIdentity({ provider: "peConnect", token: userFtExternalId }) .build(); - await associatePeConnectFederatedIdentity.execute({ + await associateFtConnectFederatedIdentity.execute({ convention: conventionDtoFromEvent, }); @@ -182,10 +182,10 @@ describe("AssociatePeConnectFederatedIdentity", () => { const conventionDtoFromEvent = new ConventionDtoBuilder() .withId(conventionId) - .withFederatedIdentity({ provider: "peConnect", token: userPeExternalId }) + .withFederatedIdentity({ provider: "peConnect", token: userFtExternalId }) .build(); - await associatePeConnectFederatedIdentity.execute({ + await associateFtConnectFederatedIdentity.execute({ convention: conventionDtoFromEvent, }); @@ -204,7 +204,7 @@ describe("AssociatePeConnectFederatedIdentity", () => { }); const conventionId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; -const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; +const userFtExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; const userAdvisorDto: FtUserAndAdvisor = { advisor: { email: "elsa.oldenburg@pole-emploi.net", @@ -213,7 +213,7 @@ const userAdvisorDto: FtUserAndAdvisor = { type: "CAPEMPLOI", }, user: { - peExternalId: userPeExternalId, + peExternalId: userFtExternalId, email: "", firstName: "", isJobseeker: true, diff --git a/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.ts b/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.ts index d7abf585a6..0faebe3527 100644 --- a/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.ts @@ -12,7 +12,7 @@ import { AccessTokenDto } from "../dto/AccessToken.dto"; import { ConventionFtConnectFields, FtUserAndAdvisor, - toPartialConventionDtoWithPeIdentity, + toPartialConventionDtoWithFtIdentity, } from "../dto/FtConnect.dto"; import { chooseValidAdvisor } from "../entities/ConventionFranceTravailAdvisorEntity"; import { FtConnectGateway } from "../port/FtConnectGateway"; @@ -29,13 +29,13 @@ export class LinkFranceTravailAdvisorAndRedirectToConvention extends Transaction constructor( uowPerformer: UnitOfWorkPerformer, - peConnectGateway: FtConnectGateway, + ftConnectGateway: FtConnectGateway, baseUrlForRedirect: AbsoluteUrl, ) { super(uowPerformer); this.#baseUrlForRedirect = baseUrlForRedirect; - this.#ftConnectGateway = peConnectGateway; + this.#ftConnectGateway = ftConnectGateway; } protected async _execute( @@ -80,6 +80,6 @@ export class LinkFranceTravailAdvisorAndRedirectToConvention extends Transaction peUserAndAdvisor, ); - return this.#makeRedirectUrl(toPartialConventionDtoWithPeIdentity(user)); + return this.#makeRedirectUrl(toPartialConventionDtoWithFtIdentity(user)); } } diff --git a/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.unit.test.ts b/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.unit.test.ts index c36874a0f9..a6d6d3e507 100644 --- a/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.unit.test.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/LinkFranceTravailAdvisorAndRedirectToConvention.unit.test.ts @@ -5,7 +5,7 @@ import { createInMemoryUow, } from "../../../unit-of-work/adapters/createInMemoryUow"; import { CONVENTION_ID_DEFAULT_UUID } from "../adapters/InMemoryConventionFranceTravailAdvisorRepository"; -import { InMemoryPeConnectGateway } from "../adapters/ft-connect-gateway/InMemoryPeConnectGateway"; +import { InMemoryFtConnectGateway } from "../adapters/ft-connect-gateway/InMemoryFtConnectGateway"; import { AccessTokenDto } from "../dto/AccessToken.dto"; import { FtConnectAdvisorDto, @@ -18,15 +18,15 @@ import { LinkFranceTravailAdvisorAndRedirectToConvention } from "./LinkFranceTra describe("LinkFranceTravailAdvisorAndRedirectToConvention", () => { let uow: InMemoryUnitOfWork; let linkFtAdvisorAndRedirectToConvention: LinkFranceTravailAdvisorAndRedirectToConvention; - let ftConnectGateway: InMemoryPeConnectGateway; + let ftConnectGateway: InMemoryFtConnectGateway; const baseurl = "https://plop"; - const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; + const userFtExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; const authorizationCode = "123"; beforeEach(() => { uow = createInMemoryUow(); - ftConnectGateway = new InMemoryPeConnectGateway(); + ftConnectGateway = new InMemoryFtConnectGateway(); linkFtAdvisorAndRedirectToConvention = new LinkFranceTravailAdvisorAndRedirectToConvention( new InMemoryUowPerformer(uow), @@ -35,7 +35,7 @@ describe("LinkFranceTravailAdvisorAndRedirectToConvention", () => { ); }); - describe("Pe Connect correctly identify OAuth", () => { + describe("Ft Connect correctly identify OAuth", () => { it("the returned conventionAdvisor gets stored", async () => { ftConnectGateway.setAccessToken(accessToken); ftConnectGateway.setUser(ftJobseekerUser); @@ -96,13 +96,13 @@ describe("LinkFranceTravailAdvisorAndRedirectToConvention", () => { await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); expect(urlWithQueryParams).toBe( - `${baseurl}/demande-immersion?email=john.doe@gmail.com&firstName=John&lastName=Doe&fedId=${userPeExternalId}&fedIdProvider=peConnect`, + `${baseurl}/demande-immersion?email=john.doe@gmail.com&firstName=John&lastName=Doe&fedId=${userFtExternalId}&fedIdProvider=peConnect`, ); }); }); describe("Wrong path", () => { - it("On PeConnect auth failure", async () => { + it("On FtConnect auth failure", async () => { const urlWithQueryParams = await linkFtAdvisorAndRedirectToConvention.execute(authorizationCode); @@ -116,7 +116,7 @@ describe("LinkFranceTravailAdvisorAndRedirectToConvention", () => { ); }); - it("On PeConnect not user info", async () => { + it("On FtConnect not user info", async () => { ftConnectGateway.setAccessToken(accessToken); ftConnectGateway.setUser(undefined); ftConnectGateway.setAdvisors([ftPlacementAdvisor]); @@ -133,7 +133,7 @@ describe("LinkFranceTravailAdvisorAndRedirectToConvention", () => { ); }); - it("On PeConnected and is not jobseeker should not open slot and provide convention url with notJobSeeker peConnect mode", async () => { + it("On FtConnected and is not jobseeker should not open slot and provide convention url with notJobSeeker peConnect mode", async () => { ftConnectGateway.setAccessToken(accessToken); ftConnectGateway.setUser(ftNotJobseekerUser); @@ -151,7 +151,7 @@ describe("LinkFranceTravailAdvisorAndRedirectToConvention", () => { }); }); - it("On PeConnected and is jobseeker but no advisors should open slot", async () => { + it("On FtConnected and is jobseeker but no advisors should open slot", async () => { ftConnectGateway.setAccessToken(accessToken); ftConnectGateway.setUser(ftJobseekerUser); diff --git a/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.ts b/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.ts index 67668b26c2..b7c26ebee4 100644 --- a/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.ts @@ -32,7 +32,7 @@ export class NotifyFranceTravailUserAdvisorOnConventionFullySigned extends Trans { convention: conventionFromEvent }: WithConventionDto, uow: UnitOfWork, ): Promise { - const [conventionPeAdvisor, convention] = await Promise.all([ + const [conventionFtAdvisor, convention] = await Promise.all([ uow.conventionFranceTravailAdvisorRepository.getByConventionId( conventionFromEvent.id, ), @@ -43,15 +43,15 @@ export class NotifyFranceTravailUserAdvisorOnConventionFullySigned extends Trans const [agency] = await uow.agencyRepository.getByIds([convention.agencyId]); - if (conventionPeAdvisor?.advisor && agency) + if (conventionFtAdvisor?.advisor && agency) await this.#saveNotificationAndRelatedEvent(uow, { kind: "email", templatedContent: { kind: "POLE_EMPLOI_ADVISOR_ON_CONVENTION_FULLY_SIGNED", - recipients: [conventionPeAdvisor.advisor.email], + recipients: [conventionFtAdvisor.advisor.email], params: { - advisorFirstName: conventionPeAdvisor.advisor.firstName, - advisorLastName: conventionPeAdvisor.advisor.lastName, + advisorFirstName: conventionFtAdvisor.advisor.firstName, + advisorLastName: conventionFtAdvisor.advisor.lastName, agencyLogoUrl: agency.logoUrl ?? undefined, beneficiaryFirstName: convention.signatories.beneficiary.firstName, beneficiaryLastName: convention.signatories.beneficiary.lastName, @@ -65,7 +65,7 @@ export class NotifyFranceTravailUserAdvisorOnConventionFullySigned extends Trans id: convention.id, role: "validator", targetRoute: frontRoutes.manageConvention, - email: conventionPeAdvisor.advisor.email, + email: conventionFtAdvisor.advisor.email, now: this.#timeGateway.now(), }), }, diff --git a/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.unit.test.ts b/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.unit.test.ts index 672b03f42e..20b5906fdf 100644 --- a/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.unit.test.ts +++ b/back/src/domains/core/authentication/ft-connect/use-cases/NotifyFranceTravailUserAdvisorOnConventionFullySigned.unit.test.ts @@ -24,7 +24,7 @@ import { NotifyFranceTravailUserAdvisorOnConventionFullySigned } from "./NotifyF describe("NotifyFranceTravailUserAdvisorOnConventionFullySigned", () => { const conventionId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; - const userPeExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; + const userFtExternalId = "749dd14f-c82a-48b1-b1bb-fffc5467e4d4"; const advisor: FtConnectImmersionAdvisorDto = { email: "elsa.oldenburg@pole-emploi.net", firstName: "Elsa", @@ -34,7 +34,7 @@ describe("NotifyFranceTravailUserAdvisorOnConventionFullySigned", () => { const userAdvisorDto: FtUserAndAdvisor = { advisor, user: { - peExternalId: userPeExternalId, + peExternalId: userFtExternalId, email: "", firstName: "", isJobseeker: true, @@ -87,7 +87,7 @@ describe("NotifyFranceTravailUserAdvisorOnConventionFullySigned", () => { const conventionDtoFromEvent = new ConventionDtoBuilder() .withId(conventionId) .withAgencyId(agency.id) - .withFederatedIdentity({ provider: "peConnect", token: userPeExternalId }) + .withFederatedIdentity({ provider: "peConnect", token: userFtExternalId }) .withBeneficiaryFirstName("John") .withBeneficiaryLastName("Doe") .withBeneficiaryEmail("john.doe@plop.fr") @@ -154,7 +154,7 @@ describe("NotifyFranceTravailUserAdvisorOnConventionFullySigned", () => { const conventionDtoFromEvent = new ConventionDtoBuilder() .withId(conventionId) .withAgencyId(agency.id) - .withFederatedIdentity({ provider: "peConnect", token: userPeExternalId }) + .withFederatedIdentity({ provider: "peConnect", token: userFtExternalId }) .withBeneficiaryFirstName("John") .withBeneficiaryLastName("Doe") .withBeneficiaryEmail("john.doe@plop.fr") diff --git a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts index 559b25c795..d5587e1cfc 100644 --- a/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts +++ b/back/src/domains/establishment/adapters/la-bonne-boite/HttpLaBonneBoiteGateway.manual.test.ts @@ -4,7 +4,7 @@ import { AccessTokenResponse, AppConfig, } from "../../../../config/bootstrap/appConfig"; -import { createPeFetchSharedClient } from "../../../../config/helpers/createFetchSharedClients"; +import { createFtFetchSharedClient } from "../../../../config/helpers/createFetchSharedClients"; import { HttpFranceTravailGateway } from "../../../convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../../../core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../../../core/retry-strategy/ports/RetryStrategy"; @@ -51,7 +51,7 @@ describe("HttpLaBonneBoiteGateway", () => { beforeEach(() => { const config = AppConfig.createFromEnv(); - const peFetchSharedClient = createPeFetchSharedClient(config); + const peFetchSharedClient = createFtFetchSharedClient(config); laBonneBoiteGateway = new HttpLaBonneBoiteGateway( createFetchSharedClient(createLbbRoutes(config.ftApiUrl), fetch), new HttpFranceTravailGateway( diff --git a/back/src/domains/establishment/ports/PeAgenciesReferential.ts b/back/src/domains/establishment/ports/FtAgenciesReferential.ts similarity index 76% rename from back/src/domains/establishment/ports/PeAgenciesReferential.ts rename to back/src/domains/establishment/ports/FtAgenciesReferential.ts index 30148e32f5..f10ab619f9 100644 --- a/back/src/domains/establishment/ports/PeAgenciesReferential.ts +++ b/back/src/domains/establishment/ports/FtAgenciesReferential.ts @@ -1,8 +1,8 @@ -export interface PeAgenciesReferential { - getPeAgencies: () => Promise; +export interface FtAgenciesReferential { + getFtAgencies: () => Promise; } -export type PeAgencyFromReferenciel = { +export type FtAgencyFromReferential = { code: string; codeSafir: string; libelle: string; diff --git a/back/src/scripts/triggerResyncOldConventionsToPe.ts b/back/src/scripts/triggerResyncOldConventionsToPe.ts index 40787b835b..a99d9e9aeb 100644 --- a/back/src/scripts/triggerResyncOldConventionsToPe.ts +++ b/back/src/scripts/triggerResyncOldConventionsToPe.ts @@ -1,6 +1,6 @@ import { AccessTokenResponse, AppConfig } from "../config/bootstrap/appConfig"; import { createGetPgPoolFn } from "../config/bootstrap/createGateways"; -import { createPeAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; +import { createFtAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; import { HttpFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { ResyncOldConventionsToFt } from "../domains/convention/use-cases/ResyncOldConventionsToFt"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; @@ -16,7 +16,7 @@ const config = AppConfig.createFromEnv(); const executeUsecase = async () => { const timeGateway = new RealTimeGateway(); - const peAxiosHttpClient = createPeAxiosSharedClient(config); + const peAxiosHttpClient = createFtAxiosSharedClient(config); const httpFranceTravailGateway = new HttpFranceTravailGateway( peAxiosHttpClient, diff --git a/back/src/scripts/triggerUpdateLegacyRomeV3.ts b/back/src/scripts/triggerUpdateLegacyRomeV3.ts index 861b32680d..d413aba232 100644 --- a/back/src/scripts/triggerUpdateLegacyRomeV3.ts +++ b/back/src/scripts/triggerUpdateLegacyRomeV3.ts @@ -5,7 +5,7 @@ import { map, splitEvery } from "ramda"; import { AppellationCode, RomeCode, pipeWithValue } from "shared"; import { createAxiosSharedClient } from "shared-routes/axios"; import { AccessTokenResponse, AppConfig } from "../config/bootstrap/appConfig"; -import { createPeAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; +import { createFtAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; import { KyselyDb, makeKyselyDb, @@ -14,7 +14,7 @@ import { import { HttpRome3Gateway, makeRome3Routes, -} from "../domains/agency/adapters/pe-agencies-referential/HttpRome3Gateway"; +} from "../domains/agency/adapters/ft-agencies-referential/HttpRome3Gateway"; import { HttpFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; @@ -38,7 +38,7 @@ const main = async () => { ); const franceTravailGateway = new HttpFranceTravailGateway( - createPeAxiosSharedClient(config), + createFtAxiosSharedClient(config), cachingGateway, config.ftApiUrl, config.franceTravailAccessTokenConfig, diff --git a/back/src/scripts/triggerUpdateRomeData.ts b/back/src/scripts/triggerUpdateRomeData.ts index f591378d1c..653b7acc45 100644 --- a/back/src/scripts/triggerUpdateRomeData.ts +++ b/back/src/scripts/triggerUpdateRomeData.ts @@ -5,13 +5,13 @@ import { map, splitEvery } from "ramda"; import { pipeWithValue, removeDiacritics, sleep } from "shared"; import { createAxiosSharedClient } from "shared-routes/axios"; import { AccessTokenResponse, AppConfig } from "../config/bootstrap/appConfig"; -import { createPeAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; +import { createFtAxiosSharedClient } from "../config/helpers/createAxiosSharedClients"; import { KyselyDb, makeKyselyDb } from "../config/pg/kysely/kyselyUtils"; import { AppellationWithShortLabel, HttpRome4Gateway, makeRome4Routes, -} from "../domains/agency/adapters/pe-agencies-referential/HttpRome4Gateway"; +} from "../domains/agency/adapters/ft-agencies-referential/HttpRome4Gateway"; import { HttpFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/HttpFranceTravailGateway"; import { InMemoryCachingGateway } from "../domains/core/caching-gateway/adapters/InMemoryCachingGateway"; import { noRetries } from "../domains/core/retry-strategy/ports/RetryStrategy"; @@ -38,7 +38,7 @@ const main = async () => { ); const franceTravailGateway = new HttpFranceTravailGateway( - createPeAxiosSharedClient(config), + createFtAxiosSharedClient(config), cachingGateway, config.ftApiUrl, config.franceTravailAccessTokenConfig, diff --git a/back/src/utils/buildTestApp.ts b/back/src/utils/buildTestApp.ts index e5a9e42bf8..7d67bc1ca5 100644 --- a/back/src/utils/buildTestApp.ts +++ b/back/src/utils/buildTestApp.ts @@ -6,7 +6,7 @@ import { createApp } from "../config/bootstrap/server"; import { InMemoryFranceTravailGateway } from "../domains/convention/adapters/france-travail-gateway/InMemoryFranceTravailGateway"; import { InMemoryAddressGateway } from "../domains/core/address/adapters/InMemoryAddressGateway"; import { InMemorySubscribersGateway } from "../domains/core/api-consumer/adapters/InMemorySubscribersGateway"; -import { InMemoryPeConnectGateway } from "../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryPeConnectGateway"; +import { InMemoryFtConnectGateway } from "../domains/core/authentication/ft-connect/adapters/ft-connect-gateway/InMemoryFtConnectGateway"; import { InMemoryOAuthGateway } from "../domains/core/authentication/inclusion-connect/adapters/oauth-gateway/InMemoryOAuthGateway"; import { StubDashboardGateway } from "../domains/core/dashboard/adapters/StubDashboardGateway"; import { InMemoryEmailValidationGateway } from "../domains/core/email-validation/adapters/InMemoryEmailValidationGateway"; @@ -35,7 +35,7 @@ import { toAgencyWithRights } from "./agency"; export type InMemoryGateways = { disconnectCache: () => Promise; notification: InMemoryNotificationGateway; - peConnectGateway: InMemoryPeConnectGateway; + ftConnectGateway: InMemoryFtConnectGateway; siret: InMemorySiretGateway; pdfGeneratorGateway: InMemoryPdfGeneratorGateway; laBonneBoiteGateway: InMemoryLaBonneBoiteGateway; diff --git a/back/src/utils/logger.ts b/back/src/utils/logger.ts index beb4001b0e..a60c31d9bf 100644 --- a/back/src/utils/logger.ts +++ b/back/src/utils/logger.ts @@ -223,7 +223,7 @@ export const createLogger = (filename: string): OpacifiedLogger => { events: sanitizeEvents(events), nodeProcessReport, notificationId, - ftConnect: ftConnect, + ftConnect, reportContent, request, requestId, diff --git a/front/src/app/components/forms/convention/ConventionForm.tsx b/front/src/app/components/forms/convention/ConventionForm.tsx index 1a711d6f46..4089d2193b 100644 --- a/front/src/app/components/forms/convention/ConventionForm.tsx +++ b/front/src/app/components/forms/convention/ConventionForm.tsx @@ -33,7 +33,7 @@ import { hasBeneficiaryCurrentEmployer, isBeneficiaryMinor, isEstablishmentTutorIsEstablishmentRepresentative, - isPeConnectIdentity, + isFtConnectIdentity, keys, notJobSeeker, } from "shared"; @@ -291,7 +291,7 @@ export const ConventionForm = ({ const shouldLockToPeAgencies = !!( route.name === "conventionImmersion" && route.params.jwt && - isPeConnectIdentity( + isFtConnectIdentity( conventionValues?.signatories.beneficiary.federatedIdentity, ) ); @@ -612,7 +612,7 @@ const makeListAgencyOptionsKindFilter = ({ }): AgencyKindFilter => { if (internshipKind === "mini-stage-cci") return "miniStageOnly"; if (shouldListAll) return "miniStageExcluded"; - return federatedIdentity && isPeConnectIdentity(federatedIdentity) + return federatedIdentity && isFtConnectIdentity(federatedIdentity) ? "immersionPeOnly" : "miniStageExcluded"; }; @@ -623,7 +623,7 @@ const makeInitialBenefiaryForm = ( ): Beneficiary<"immersion" | "mini-stage-cci"> => { const { federatedIdentity, ...beneficiaryOtherProperties } = beneficiary; const peConnectIdentity = - federatedIdentityWithUser && isPeConnectIdentity(federatedIdentityWithUser) + federatedIdentityWithUser && isFtConnectIdentity(federatedIdentityWithUser) ? federatedIdentityWithUser : undefined; const federatedIdentityValue = federatedIdentity ?? peConnectIdentity; diff --git a/front/src/app/pages/convention/ConventionImmersionPage.tsx b/front/src/app/pages/convention/ConventionImmersionPage.tsx index 325f18acf0..37dd13497f 100644 --- a/front/src/app/pages/convention/ConventionImmersionPage.tsx +++ b/front/src/app/pages/convention/ConventionImmersionPage.tsx @@ -4,7 +4,7 @@ import { keys } from "ramda"; import React, { useEffect, useMemo, useRef, useState } from "react"; import { Loader, MainWrapper, PageHeader } from "react-design-system"; import { useDispatch } from "react-redux"; -import { FederatedIdentityProvider, loginPeConnect } from "shared"; +import { FederatedIdentityProvider, loginFtConnect } from "shared"; import { Breadcrumbs } from "src/app/components/Breadcrumbs"; import { ConventionFormMode, @@ -215,7 +215,7 @@ const SharedConventionMessage = ({

{/* biome-ignore lint/a11y/useValidAnchor: This is a trusted source */} { storeConventionRouteParamsOnDevice(route.params); }} diff --git a/front/src/app/pages/convention/InitiateConventionPage.tsx b/front/src/app/pages/convention/InitiateConventionPage.tsx index 32e256e5de..d508f8dd40 100644 --- a/front/src/app/pages/convention/InitiateConventionPage.tsx +++ b/front/src/app/pages/convention/InitiateConventionPage.tsx @@ -1,7 +1,7 @@ import { fr } from "@codegouvfr/react-dsfr/fr"; import { useState } from "react"; import { MainWrapper, NavCard, PageHeader } from "react-design-system"; -import { domElementIds, loginPeConnect } from "shared"; +import { domElementIds, loginFtConnect } from "shared"; import { Breadcrumbs } from "src/app/components/Breadcrumbs"; import { HeaderFooterLayout } from "src/app/components/layout/HeaderFooterLayout"; import { routes, useRoute } from "src/app/routes/routes"; @@ -120,7 +120,7 @@ export const InitiateConventionPage = () => { total={1} id={domElementIds.initiateConvention.ftConnectButton} link={{ - href: `/api/${loginPeConnect}`, + href: `/api/${loginFtConnect}`, }} alternateTitle="Je suis accompagné(e) par mon conseiller France Travail et je peux me connecter via FranceConnect" withBorder diff --git a/front/src/app/routes/routeParams/convention.ts b/front/src/app/routes/routeParams/convention.ts index 3dd7e7b06b..effa1cf94c 100644 --- a/front/src/app/routes/routeParams/convention.ts +++ b/front/src/app/routes/routeParams/convention.ts @@ -6,10 +6,10 @@ import { BeneficiaryCurrentEmployer, BeneficiaryRepresentative, ConventionDto, + FtConnectIdentity, ImmersionObjective, InternshipKind, LevelOfEducation, - PeConnectIdentity, ScheduleDto, addressDtoToString, addressStringToDto, @@ -440,7 +440,7 @@ const conventionPresentationFromParams = ( ...(params.fedId && params.fedIdProvider ? { federatedIdentity: { - provider: params.fedIdProvider as PeConnectIdentity["provider"], + provider: params.fedIdProvider as FtConnectIdentity["provider"], token: params.fedId, }, } diff --git a/shared/src/convention/ConventionDtoBuilder.ts b/shared/src/convention/ConventionDtoBuilder.ts index b7ff8723d3..73740873ec 100644 --- a/shared/src/convention/ConventionDtoBuilder.ts +++ b/shared/src/convention/ConventionDtoBuilder.ts @@ -1,7 +1,7 @@ import { Builder } from "../Builder"; import { WithAcquisition } from "../acquisition.dto"; import { AgencyId } from "../agency/agency.dto"; -import { PeConnectIdentity } from "../federatedIdentities/federatedIdentity.dto"; +import { FtConnectIdentity } from "../federatedIdentities/federatedIdentity.dto"; import { AppellationAndRomeDto } from "../romeAndAppellationDtos/romeAndAppellation.dto"; import { DateIntervalDto, @@ -543,7 +543,7 @@ export class ConventionDtoBuilder implements Builder { } public withFederatedIdentity( - federatedIdentity: PeConnectIdentity | undefined, + federatedIdentity: FtConnectIdentity | undefined, ): ConventionDtoBuilder { return this.withBeneficiary({ ...this.#beneficiary, diff --git a/shared/src/convention/convention.dto.ts b/shared/src/convention/convention.dto.ts index 57e589f347..3a18604596 100644 --- a/shared/src/convention/convention.dto.ts +++ b/shared/src/convention/convention.dto.ts @@ -3,7 +3,7 @@ import { WithAcquisition } from "../acquisition.dto"; import { AddressDto, Postcode } from "../address/address.dto"; import { AgencyId, AgencyKind } from "../agency/agency.dto"; import { Email } from "../email/email.dto"; -import { PeConnectIdentity } from "../federatedIdentities/federatedIdentity.dto"; +import { FtConnectIdentity } from "../federatedIdentities/federatedIdentity.dto"; import { AgencyRole, InclusionConnectedUser, @@ -236,7 +236,7 @@ export type Beneficiary = emergencyContact?: string; emergencyContactPhone?: string; emergencyContactEmail?: Email; - federatedIdentity?: PeConnectIdentity; + federatedIdentity?: FtConnectIdentity; financiaryHelp?: string; birthdate: string; // Date iso string isRqth?: boolean; diff --git a/shared/src/federatedIdentities/federatedIdentity.dto.ts b/shared/src/federatedIdentities/federatedIdentity.dto.ts index de050317c1..b958e5380c 100644 --- a/shared/src/federatedIdentities/federatedIdentity.dto.ts +++ b/shared/src/federatedIdentities/federatedIdentity.dto.ts @@ -30,9 +30,9 @@ type GenericFederatedIdentity< export const authFailed = "AuthFailed"; export const notJobSeeker = "NotJobSeeker"; -export type FtExternalId = Flavor; +export type FtExternalId = Flavor; -type PeConnectAdvisorForBeneficiary = { +type FtConnectAdvisorForBeneficiary = { advisor: { email: string; firstName: string; @@ -46,14 +46,14 @@ export type FtConnectToken = | typeof authFailed | typeof notJobSeeker; -export type PeConnectIdentity = GenericFederatedIdentity< +export type FtConnectIdentity = GenericFederatedIdentity< "peConnect", FtConnectToken, - PeConnectAdvisorForBeneficiary + FtConnectAdvisorForBeneficiary >; -export const isPeConnectIdentity = ( +export const isFtConnectIdentity = ( federatedIdentity: FederatedIdentity | undefined, -): federatedIdentity is PeConnectIdentity => +): federatedIdentity is FtConnectIdentity => federatedIdentity?.provider === "peConnect"; export type InclusionConnectIdentity = GenericFederatedIdentity< @@ -61,4 +61,4 @@ export type InclusionConnectIdentity = GenericFederatedIdentity< InclusionConnectJwt >; -export type FederatedIdentity = InclusionConnectIdentity | PeConnectIdentity; +export type FederatedIdentity = InclusionConnectIdentity | FtConnectIdentity; diff --git a/shared/src/federatedIdentities/federatedIdentity.schema.ts b/shared/src/federatedIdentities/federatedIdentity.schema.ts index f692512b49..92c5f5508a 100644 --- a/shared/src/federatedIdentities/federatedIdentity.schema.ts +++ b/shared/src/federatedIdentities/federatedIdentity.schema.ts @@ -1,7 +1,7 @@ import { z } from "zod"; -import { PeConnectIdentity } from "./federatedIdentity.dto"; +import { FtConnectIdentity } from "./federatedIdentity.dto"; -export const peConnectIdentitySchema: z.Schema = z.object({ +export const peConnectIdentitySchema: z.Schema = z.object({ provider: z.literal("peConnect"), token: z.string(), payload: z diff --git a/shared/src/routes/routes.ts b/shared/src/routes/routes.ts index 1cff41b1a6..e76e12e7fe 100644 --- a/shared/src/routes/routes.ts +++ b/shared/src/routes/routes.ts @@ -41,7 +41,7 @@ export const frontRoutes = { unsubscribeEstablishmentLead: "desinscription-prospect", }; -export const loginPeConnect = "login-pe-connect"; -export const peConnect = "pe-connect"; +export const loginFtConnect = "login-pe-connect"; +export const ftConnect = "pe-connect"; export const uploadFileRoute = "upload-file";