Skip to content

Commit 34b26b9

Browse files
committed
feat: 764 - Intégration S3 step 2
1 parent a7864b8 commit 34b26b9

35 files changed

+993
-759
lines changed

.talismanrc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,8 @@ fileignoreconfig:
6565
checksum: ab7a0f54777521ceb0cf4f2f253cc6f804e24ad7e27015eb9d66961366510a12
6666
- filename: packages/backend/src/__tests__/usagers/authentification.test.ts
6767
checksum: c15d2aeea878e0da568caa3a14d4dc58287fad8ee1cd6d026626c38870e8bc47
68+
- filename: packages/backend/src/__tests__/usagers/documents.test.ts
69+
checksum: d5d23d8aa40adf45f04cb47587350ba4c52423bb669307779f9be0254e77b695
6870
- filename: packages/backend/src/config.js
6971
checksum: 5e974a98e40b4f10974b9e57127b8b71e4abef208494d69218b17b3721453ada
7072
- filename: packages/backend/src/controllers/__tests__/bo-user/accept-cgu.test.js
@@ -117,6 +119,8 @@ fileignoreconfig:
117119
checksum: 84d16fbf7cf0433f833c790f360cda6c8d23c30fe580eec4a0e3851a2d0311b0
118120
- filename: packages/backend/src/services/Document.js
119121
checksum: 1fbeae31395935da7b8daef1d3872151b793d433d1cde968d0607b4628ba50a8
122+
- filename: packages/backend/src/services/Document.ts
123+
checksum: de553578fc64b0d0cb39d80f3e095574aa67f72fafbb57c79a8121db6eba5f15
120124
- filename: packages/backend/src/services/Insee.js
121125
checksum: 8c067dbdd0a587b46905003d34a13df176fe03192253e881287c21577311f564
122126
- filename: packages/backend/src/services/Organisme.js

packages/backend/jest.setup.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,12 @@
55
//
66
// This stays test-only (jest setup) to avoid impacting runtime behavior.
77
const buffer = require("buffer");
8+
89
if (!buffer.SlowBuffer) {
910
buffer.SlowBuffer = buffer.Buffer;
1011
}
1112

1213
process.env.PG_VAO_CIPHER_DATA =
1314
"e14de305fbac8f2ed5ab96ce9659265625db31d01ea9d5b7a20b5f985612a054";
15+
16+
// process.env.DEBUG = "*debug*";

packages/backend/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,10 @@
5151
"@types/express": "^4.17.21",
5252
"@types/jest": "^29.5.12",
5353
"@types/jsonwebtoken": "^9.0.10",
54+
"@types/multer": "^1.4.12",
5455
"@types/node": "^20.14.12",
5556
"@types/pg": "^8.15.5",
57+
"@types/supertest": "^6.0.2",
5658
"eslint": "^8.57.1",
5759
"eslint-plugin-import": "^2.29.1",
5860
"eslint-plugin-prettier": "^5.1.3",
@@ -67,4 +69,4 @@
6769
"typescript": "^5.9.3",
6870
"typescript-eslint": "^8.46.3"
6971
}
70-
}
72+
}

packages/backend/src/__tests__/admin/accept-cgu.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import request from "supertest";
33

44
import app from "../../app";
55
import config from "../../config";
6+
// @ts-expect-error js file
67
import jwtMiddleware from "../../middlewares/bo-check-JWT-without-CGU";
78
import { createAdminUserValide } from "../helper/fixtures/userHelper";
89
import {
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import request from "supertest";
2+
3+
import app from "../../app";
4+
import * as DocumentService from "../../services/Document";
5+
import {
6+
createTestContainer,
7+
removeTestContainer,
8+
} from "../helper/testContainer";
9+
10+
const authUser = { id: 1, role: "admin" };
11+
12+
jest.mock("../../middlewares/bo-check-JWT", () => {
13+
return (req: any, _res: any, next: any) => {
14+
req.decoded = authUser;
15+
next();
16+
};
17+
});
18+
19+
jest.mock("../../services/Document", () => ({
20+
getFile: jest.fn(),
21+
}));
22+
23+
beforeAll(async () => {
24+
await createTestContainer();
25+
});
26+
27+
afterAll(async () => {
28+
await removeTestContainer();
29+
});
30+
31+
beforeEach(() => {
32+
jest.clearAllMocks();
33+
});
34+
35+
describe("GET /documents/admin/:uuid", () => {
36+
it("devrait retourner 404 si le fichier n'existe pas", async () => {
37+
(DocumentService.getFile as jest.Mock).mockResolvedValue(null);
38+
39+
const response = await request(app).get(
40+
"/documents/admin/550e8400-e29b-41d4-a716-446655440000",
41+
);
42+
43+
expect(response.status).toBe(404);
44+
expect(DocumentService.getFile).toHaveBeenCalledWith(
45+
"550e8400-e29b-41d4-a716-446655440000",
46+
);
47+
});
48+
49+
it("devrait retourner le fichier avec les bons headers", async () => {
50+
const fileContent = Buffer.from("contenu admin du fichier");
51+
(DocumentService.getFile as jest.Mock).mockResolvedValue({
52+
category: "declaration",
53+
file: fileContent,
54+
filename: "document-admin.pdf",
55+
mimeType: "application/pdf",
56+
userId: String(authUser.id),
57+
uuid: "550e8400-e29b-41d4-a716-446655440000",
58+
});
59+
60+
const response = await request(app).get(
61+
"/documents/admin/550e8400-e29b-41d4-a716-446655440000",
62+
);
63+
64+
expect(response.status).toBe(200);
65+
expect(response.headers["content-disposition"]).toBe(
66+
"attachment; filename=document-admin.pdf",
67+
);
68+
expect(response.headers["content-type"]).toContain("text/plain");
69+
expect(response.text).toBe("contenu admin du fichier");
70+
});
71+
72+
it("devrait propager l'erreur si getFile échoue", async () => {
73+
const error = new Error("Erreur S3");
74+
(DocumentService.getFile as jest.Mock).mockRejectedValue(error);
75+
76+
const response = await request(app).get(
77+
"/documents/admin/550e8400-e29b-41d4-a716-446655440000",
78+
);
79+
80+
expect(response.status).toBe(500);
81+
});
82+
});

packages/backend/src/__tests__/admin/herbergement.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import { NextFunction } from "express";
12
import request from "supertest";
23

34
import app from "../../app";
5+
import { UserRequest } from "../../types/request";
46
import { createHebergement } from "../helper/fixtures/hebergementHelper";
57
import { createOrganisme } from "../helper/fixtures/organismeHelper";
68
import { createUsagersUser } from "../helper/fixtures/userHelper";
@@ -12,8 +14,8 @@ import {
1214
let authUser = { id: 1, role: "admin" };
1315

1416
jest.mock("../../middlewares/common/checkJWT", () => {
15-
return async (req, res, next) => {
16-
req.decoded = authUser;
17+
return async (req: UserRequest, _res: Response, next: NextFunction) => {
18+
req.decoded = authUser as any;
1719
next();
1820
};
1921
});

packages/backend/src/__tests__/helper/fixtures/userHelper.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const createAdminUser = async (user = {}) => {
1717

1818
export const createUsagersUser = async (user = {}) => {
1919
const timestamp = Date.now();
20-
const fixture = {
20+
const fixture: any = {
2121
email: `frontuser${timestamp}@example.com`,
2222
nom: "FrontNom",
2323
prenom: "FrontPrenom",

packages/backend/src/__tests__/usagers/accept-cgu.test.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { statusUserFront } from "@vao/shared-bridge";
1+
// import { statusUserFront } from "@vao/shared-bridge";
22
import crypto from "crypto";
33
import request from "supertest";
44

55
import app from "../../app";
66
import config from "../../config";
7+
// @ts-expect-error js file
78
import jwtMiddleware from "../../middlewares/checkJWTWithoutCGU";
89
import { createUsagersUserValide } from "../helper/fixtures/userHelper";
910
import {
@@ -15,13 +16,13 @@ const mockJwtMiddleware = jwtMiddleware as jest.Mock;
1516
jest.mock("../../middlewares/checkJWTWithoutCGU", () => jest.fn());
1617

1718
let user: any;
18-
const userFixtureComplement = {
19-
cgu_accepted: false,
20-
status_code: statusUserFront.VALIDATED,
21-
};
19+
// const userFixtureComplement = {
20+
// cgu_accepted: false,
21+
// status_code: statusUserFront.VALIDATED,
22+
// };
2223

2324
beforeAll(async () => {
24-
await createTestContainer(userFixtureComplement);
25+
await createTestContainer();
2526
user = await createUsagersUserValide();
2627
// Surcharger la clé secrète pour les tests car elle est défini par environnement
2728
config.tokenSecret_FO = crypto.randomBytes(32).toString("hex");

packages/backend/src/__tests__/usagers/authentification.test.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1+
import { NextFunction } from "express";
12
import request from "supertest";
23

34
import app from "../../app";
45
import { getEtablissement } from "../../services/Insee";
6+
import { UserRequest } from "../../types/request";
57
import { createUsagersUser } from "../helper/fixtures/userHelper";
68
import {
79
createTestContainer,
@@ -11,8 +13,8 @@ import {
1113
let authUser = { id: 1, role: "admin" };
1214

1315
jest.mock("../../middlewares/common/checkJWT", () => {
14-
return async (req, res, next) => {
15-
req.decoded = authUser;
16+
return async (req: UserRequest, _res: Response, next: NextFunction) => {
17+
req.decoded = authUser as any;
1618
next();
1719
};
1820
});
@@ -33,7 +35,7 @@ describe("POST /authentication/email/register", () => {
3335
it("should return 400 if SIRET is not found", async () => {
3436
authUser = await createUsagersUser();
3537

36-
getEtablissement.mockResolvedValue(null);
38+
(getEtablissement as jest.Mock).mockResolvedValue(null);
3739

3840
const payload = {
3941
email: "test@example.com",

0 commit comments

Comments
 (0)