Skip to content

Commit 4a2dc88

Browse files
committed
add advisor email notification case
1 parent bae1cf9 commit 4a2dc88

2 files changed

Lines changed: 81 additions & 8 deletions

File tree

back/src/domains/establishment/use-cases/notifications/NotifyEstablishmentUsersAndBeneficiariesThatEstablishmentIsBanned.ts

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
withSiretSchema,
1111
} from "shared";
1212
import { agencyWithRightToAgencyDto } from "../../../../utils/agency";
13+
import type { ConventionFtUserAdvisorEntity } from "../../../core/authentication/ft-connect/dto/FtConnect.dto";
1314
import type { SaveNotificationAndRelatedEvent } from "../../../core/notifications/helpers/Notification";
1415
import type { TimeGateway } from "../../../core/time-gateway/ports/TimeGateway";
1516
import type { UnitOfWork } from "../../../core/unit-of-work/ports/UnitOfWork";
@@ -188,6 +189,34 @@ const notifyValidatorsAndPreValidators = async (
188189
if (!agency)
189190
throw errors.agency.notFound({ agencyId: convention.agencyId });
190191

192+
const ftUserAdvisor: ConventionFtUserAdvisorEntity | undefined =
193+
await uow.conventionFranceTravailAdvisorRepository.getByConventionId(
194+
convention.id,
195+
);
196+
197+
if (ftUserAdvisor?.advisor) {
198+
await saveNotificationAndRelatedEvent(uow, {
199+
kind: "email",
200+
templatedContent: {
201+
kind: "ESTABLISHMENT_BANNED_NOTIFICATION_TO_VALIDATOR_AND_PREVALIDATOR",
202+
recipients: [ftUserAdvisor.advisor.email],
203+
params: {
204+
businessName: bannedEstablishment.establishment.name,
205+
beneficiaryFirstName: convention.signatories.beneficiary.firstName,
206+
beneficiaryLastName: convention.signatories.beneficiary.lastName,
207+
immersionBaseUrl: immersionBaseUrl,
208+
conventionId: convention.id,
209+
},
210+
},
211+
followedIds: {
212+
establishmentSiret: bannedEstablishment.establishment.siret,
213+
conventionId: convention.id,
214+
},
215+
});
216+
217+
return;
218+
}
219+
191220
const agencyWithUserEmailNotificationActivated =
192221
await agencyWithRightToAgencyDto(uow, agency);
193222

back/src/domains/establishment/use-cases/notifications/NotifyEstablishmentUsersAndBeneficiariesThatEstablishmentIsBanned.unit.test.ts

Lines changed: 52 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ import {
1414
type ExpectSavedNotificationsAndEvents,
1515
makeExpectSavedNotificationsAndEvents,
1616
} from "../../../../utils/makeExpectSavedNotificationAndEvent.helpers";
17+
import type { FtConnectImmersionAdvisorDto } from "../../../core/authentication/ft-connect/dto/FtConnectAdvisor.dto";
18+
import type { FtConnectUserDto } from "../../../core/authentication/ft-connect/dto/FtConnectUserDto";
1719
import {
1820
makeSaveNotificationAndRelatedEvent,
1921
type SaveNotificationAndRelatedEvent,
@@ -483,7 +485,52 @@ describe("NotifyEstablishmentUsersAndBeneficiariesThatEstablishmentIsBanned", ()
483485
});
484486

485487
it("sends email only to FT advisor when present", async () => {
486-
uow.conventionRepository.setConventions([validatedConvention]);
488+
const ftConnectedBeneficiary: FtConnectUserDto = {
489+
firstName: "Jean",
490+
lastName: "Bénéficiaire",
491+
isJobseeker: true,
492+
peExternalId: "beneficiary-external-id",
493+
email: "jean@beneficiaire.com",
494+
birthdate: "2000-02-02",
495+
};
496+
const ftConnectImmersionAdvisor: FtConnectImmersionAdvisorDto = {
497+
email: "jean@advisor.com",
498+
firstName: "Jean",
499+
lastName: "Advisor",
500+
type: "PLACEMENT",
501+
};
502+
503+
const conventionWithFtConnectUsers: ConventionDto = {
504+
...validatedConvention,
505+
internshipKind: "immersion",
506+
signatories: {
507+
...validatedConvention.signatories,
508+
beneficiary: {
509+
...validatedConvention.signatories.beneficiary,
510+
...ftConnectedBeneficiary,
511+
},
512+
},
513+
validators: {
514+
...validatedConvention.validators,
515+
agencyCounsellor: {
516+
firstname: ftConnectImmersionAdvisor.firstName,
517+
lastname: ftConnectImmersionAdvisor.lastName,
518+
},
519+
},
520+
};
521+
522+
uow.conventionRepository.setConventions([conventionWithFtConnectUsers]);
523+
uow.conventionFranceTravailAdvisorRepository.ftConnectedUsers = {
524+
[ftConnectedBeneficiary.peExternalId]: {
525+
advisor: ftConnectImmersionAdvisor,
526+
user: ftConnectedBeneficiary,
527+
},
528+
};
529+
uow.conventionFranceTravailAdvisorRepository.conventionFranceTravailUsers =
530+
{
531+
[conventionWithFtConnectUsers.id]:
532+
ftConnectedBeneficiary.peExternalId,
533+
};
487534

488535
await notifyEstablishmentUsersAndBeneficiariesThatEstablishmentIsBanned.execute(
489536
{ siret },
@@ -503,22 +550,19 @@ describe("NotifyEstablishmentUsersAndBeneficiariesThatEstablishmentIsBanned", ()
503550
},
504551
{
505552
kind: "ESTABLISHMENT_BANNED_NOTIFICATION_TO_VALIDATOR_AND_PREVALIDATOR",
506-
recipients: [agency.contactEmail],
553+
recipients: [ftConnectImmersionAdvisor.email],
507554
params: {
508555
businessName,
509-
conventionId: validatedConvention.id,
556+
conventionId: conventionWithFtConnectUsers.id,
510557
beneficiaryFirstName:
511-
validatedConvention.signatories.beneficiary.firstName,
558+
conventionWithFtConnectUsers.signatories.beneficiary.firstName,
512559
beneficiaryLastName:
513-
validatedConvention.signatories.beneficiary.lastName,
560+
conventionWithFtConnectUsers.signatories.beneficiary.lastName,
514561
immersionBaseUrl,
515562
},
516563
},
517564
],
518565
});
519-
throw new Error(
520-
"Use repo when conventionFranceTravailAdvisorRepository is updated",
521-
);
522566
});
523567

524568
it("sends email to agency validators when convention is validated and agency has no refersToAgency", async () => {

0 commit comments

Comments
 (0)