Skip to content

Commit 8057688

Browse files
authored
fix(backend): add referrer from creation step (#3912)
1 parent 555a857 commit 8057688

File tree

8 files changed

+113
-50
lines changed

8 files changed

+113
-50
lines changed
0 Bytes
Binary file not shown.

packages/backend/src/modules/sms/services/message-sms-sender.service.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ export class MessageSmsSenderService {
1818

1919
public async sendSms(message: SmsToSend): Promise<void> {
2020
const parsedValue = phoneUtil.parse(message.phoneNumber);
21-
22-
console.log({ parsedValue });
2321
if (!phoneUtil.isValidNumber(parsedValue)) {
2422
appLogger.warn(`[SMS] phone number is invalid ${message.phoneNumber}`);
2523
captureMessage(

packages/backend/src/usagers/controllers/security-tests/usagers.controller.security-tests.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
AppTestHttpClientSecurityTestDef,
55
expectedResponseStatusBuilder,
66
} from "../../../_tests";
7+
import CREATE_USAGER_DTO from "../../services/tests/CREATE_USAGER_DTO.const";
78

89
////////////////// IMPORTANT //////////////////
910
//
@@ -37,4 +38,24 @@ export const UsagersControllerSecurityTests: AppTestHttpClientSecurityTestDef[]
3738
),
3839
}),
3940
},
41+
{
42+
label: `${CONTROLLER}.createUsager`,
43+
query: async (context: AppTestContext) => ({
44+
response: await AppTestHttpClient.post("/usagers", {
45+
context,
46+
body: {
47+
...CREATE_USAGER_DTO,
48+
referrerId: 10000, // Fake referrerId
49+
},
50+
}),
51+
expectedStatus: expectedResponseStatusBuilder.allowStructureOnly(
52+
context.user,
53+
{
54+
validExpectedResponseStatus: HttpStatus.BAD_REQUEST,
55+
invalidStructureIdExpectedResponseStatus: HttpStatus.BAD_REQUEST,
56+
roles: ["simple", "responsable", "admin"],
57+
}
58+
),
59+
}),
60+
},
4061
];

packages/backend/src/usagers/controllers/tests/usagers.controller.spec.ts

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,11 @@ describe("Usagers Controller", () => {
7575
context,
7676
body: POST_USAGER.payload,
7777
});
78-
expect(response.status).toBe(201);
78+
expect(response.status).toBe(200);
7979
expect(response.body).toBeDefined();
8080

8181
const usager: Usager = response.body;
82+
8283
const exceptedResponse: Usager = POST_USAGER.response;
8384
// Test des dates
8485
expect(new Date(usager.decision.dateDebut)).toEqual(new Date());
@@ -131,7 +132,7 @@ describe("Usagers Controller", () => {
131132
context,
132133
body: OK_DATAS_SUPP,
133134
});
134-
expect(response.status).toBe(201);
135+
expect(response.status).toBe(200);
135136
expect(response.body).toBeDefined();
136137

137138
const usager: Usager = response.body;
@@ -153,6 +154,17 @@ describe("Usagers Controller", () => {
153154
expect(responseDelete.body).toBeDefined();
154155
});
155156

157+
it("❌ Référent qui n'existe pas", async () => {
158+
const response = await AppTestHttpClient.post(ENDPOINT, {
159+
context,
160+
body: { ...POST_USAGER.payload, referrerId: 1000292 },
161+
});
162+
163+
expect(response.status).toBe(400);
164+
expect(response.body).toBeDefined();
165+
expect(response.body?.message).toEqual("CANNOT_FIND_REFERRER");
166+
});
167+
156168
it("❌ Données manquantes", async () => {
157169
const NOT_OK = { ...POST_USAGER.payload };
158170
delete NOT_OK.prenom;
@@ -191,27 +203,29 @@ describe("Usagers Controller", () => {
191203
});
192204

193205
it("✅ Patch Infos générales OK", async () => {
206+
const editDto: any = {
207+
ayantsDroits: [],
208+
customRef: "265",
209+
dateNaissance: "1995-06-01",
210+
email: "",
211+
langue: "",
212+
nom: "Rami",
213+
telephone: { countryCode: "fr", numero: "0600000001" },
214+
prenom: "Phill",
215+
sexe: "homme",
216+
surnom: "",
217+
contactByPhone: false,
218+
villeNaissance: "Pakistan",
219+
referrerId: null,
220+
numeroDistribution: null,
221+
nationalite: null,
222+
};
223+
194224
const response = await AppTestHttpClient.patch(
195225
ENDPOINT + "/" + usagerPatch.ref,
196226
{
197227
context,
198-
body: {
199-
ayantsDroits: [],
200-
ayantsDroitsExist: false,
201-
customRef: "265",
202-
dateNaissance: "1995-06-01",
203-
email: "",
204-
ref: 265,
205-
langue: "",
206-
nom: "Rami",
207-
telephone: { countryCode: "fr", numero: "0600000001" },
208-
prenom: "Phill",
209-
sexe: "homme",
210-
surnom: "",
211-
contactByPhone: false,
212-
villeNaissance: "Pakistan",
213-
etapeDemande: 3,
214-
},
228+
body: { ...editDto },
215229
}
216230
);
217231

@@ -224,7 +238,7 @@ describe("Usagers Controller", () => {
224238
expect(updatedUsager.ayantsDroits.length).toEqual(0);
225239
});
226240

227-
it("✅ Patch Infos générales OK", async () => {
241+
it("✅ Patch Infos générales OK: ajout d'ayants-droit", async () => {
228242
const response = await AppTestHttpClient.patch(
229243
ENDPOINT + "/" + usagerPatch.ref,
230244
{

packages/backend/src/usagers/controllers/usagers.controller.ts

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@ import {
3434
USAGER_LIGHT_ATTRIBUTES,
3535
} from "../../database";
3636

37-
import { anonymizeFullName, cleanPath, getPhoneString } from "../../util";
37+
import {
38+
anonymizeFullName,
39+
appLogger,
40+
cleanPath,
41+
getPhoneString,
42+
} from "../../util";
3843
import {
3944
UserStructureAuthenticated,
4045
USER_STRUCTURE_ROLE_ALL,
@@ -77,11 +82,35 @@ export class UsagersController {
7782
) {}
7883

7984
@Post()
80-
public createUsager(
85+
public async createUsager(
8186
@Body() usagerDto: CreateUsagerDto,
82-
@CurrentUser() user: UserStructureAuthenticated
87+
@CurrentUser() currentUser: UserStructureAuthenticated,
88+
@Res() res: ExpressResponse
8389
) {
84-
return this.usagersService.create(usagerDto, user);
90+
try {
91+
// Check referrer
92+
if (usagerDto?.referrerId) {
93+
const user = await userStructureRepository.findOneBy({
94+
id: usagerDto.referrerId,
95+
structureId: currentUser.structureId,
96+
});
97+
98+
if (!user) {
99+
return res
100+
.status(HttpStatus.BAD_REQUEST)
101+
.json({ message: "CANNOT_FIND_REFERRER" });
102+
}
103+
}
104+
105+
const usager = await this.usagersService.create(usagerDto, currentUser);
106+
107+
return res.status(HttpStatus.OK).json(usager);
108+
} catch (err) {
109+
appLogger.error(err);
110+
return res
111+
.status(HttpStatus.BAD_REQUEST)
112+
.json({ message: "CANNOT_CREATE_USAGER" });
113+
}
85114
}
86115

87116
@UseGuards(UsagerAccessGuard)
@@ -361,6 +390,7 @@ export class UsagersController {
361390
const buffer = await input(filePath).fillForm(pdfInfos).output();
362391
return res.setHeader("content-type", "application/pdf").send(buffer);
363392
} catch (err) {
393+
appLogger.error(err);
364394
return res
365395
.status(HttpStatus.INTERNAL_SERVER_ERROR)
366396
.json({ message: "CERFA_ERROR" });
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { CreateUsagerDto } from "../../dto/decision-form/create-usager.dto";
2+
3+
const CREATE_USAGER_DTO = new CreateUsagerDto();
4+
CREATE_USAGER_DTO.nom = "Usager";
5+
CREATE_USAGER_DTO.prenom = "De test";
6+
CREATE_USAGER_DTO.surnom = "Chips";
7+
CREATE_USAGER_DTO.sexe = "homme";
8+
CREATE_USAGER_DTO.dateNaissance = new Date();
9+
CREATE_USAGER_DTO.villeNaissance = "Paris";
10+
CREATE_USAGER_DTO.email = "chips@gmail.com";
11+
CREATE_USAGER_DTO.telephone = {
12+
countryCode: "fr",
13+
numero: "",
14+
};
15+
16+
export default CREATE_USAGER_DTO;

packages/backend/src/usagers/services/tests/usagers.service.spec.ts

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,16 @@ import {
66
} from "../../../database";
77
import { UsersModule } from "../../../modules/users/users.module";
88
import { AppTestContext, AppTestHelper } from "../../../util/test";
9-
import { CreateUsagerDto } from "../../dto";
109
import { UsagersService } from "../usagers.service";
1110

1211
import { UsagerHistoryStateService } from "../usagerHistoryState.service";
1312
import { UserStructure } from "@domifa/common";
1413
import { UsagersLogsService } from "../usagers-logs.service";
1514
import { AppLogsModule } from "../../../modules/app-logs/app-logs.module";
15+
import CREATE_USAGER_DTO from "./CREATE_USAGER_DTO.const";
1616

1717
describe("UsagersService", () => {
1818
let service: UsagersService;
19-
20-
const fakeUsagerDto = new CreateUsagerDto();
21-
22-
fakeUsagerDto.nom = "Usager";
23-
fakeUsagerDto.prenom = "De test";
24-
fakeUsagerDto.surnom = "Chips";
25-
fakeUsagerDto.sexe = "homme";
26-
fakeUsagerDto.dateNaissance = new Date();
27-
fakeUsagerDto.villeNaissance = "Paris";
28-
fakeUsagerDto.email = "chips@gmail.com";
29-
fakeUsagerDto.telephone = {
30-
countryCode: "fr",
31-
numero: null,
32-
};
33-
3419
let context: AppTestContext;
3520

3621
beforeAll(async () => {
@@ -58,7 +43,7 @@ describe("UsagersService", () => {
5843
})) as UserStructure;
5944
user.structure = await structureRepository.findOneBy({ id: 5 });
6045

61-
const usagerTest = await service.create(fakeUsagerDto, user);
46+
const usagerTest = await service.create(CREATE_USAGER_DTO, user);
6247

6348
expect(usagerTest).toBeDefined();
6449

@@ -68,8 +53,8 @@ describe("UsagersService", () => {
6853
structureId: user.structureId,
6954
});
7055
expect(usager).toBeTruthy();
71-
expect(usager.nom).toEqual(fakeUsagerDto.nom);
72-
expect(usager.sexe).toEqual(fakeUsagerDto.sexe);
56+
expect(usager.nom).toEqual(CREATE_USAGER_DTO.nom);
57+
expect(usager.sexe).toEqual(CREATE_USAGER_DTO.sexe);
7358

7459
await usagerRepository.delete({ uuid: usager.uuid });
7560

packages/backend/src/usagers/services/usagersCreator.service.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ function setUsagerDefaultAttributes(usager: Partial<Usager>): void {
3131
};
3232
usager.typeDom = usager?.typeDom ?? "PREMIERE_DOM";
3333
usager.pinnedNote = null;
34-
usager.referrerId = null;
34+
usager.referrerId = usager?.referrerId ?? null;
3535

36-
if (!usager.ayantsDroits) {
36+
if (!usager?.ayantsDroits?.length) {
3737
usager.ayantsDroits = [];
3838
}
3939

40-
if (!usager.historique) {
40+
if (!usager?.historique?.length) {
4141
usager.historique = [];
4242
}
4343

@@ -52,10 +52,9 @@ function setUsagerDefaultAttributes(usager: Partial<Usager>): void {
5252
};
5353
}
5454

55-
if (!usager.langue || usager.langue === "") {
55+
if (!usager?.langue || usager.langue === "") {
5656
usager.langue = null;
5757
}
58-
5958
if (!usager.lastInteraction) {
6059
usager.lastInteraction = {
6160
dateInteraction: new Date(),

0 commit comments

Comments
 (0)