Skip to content

Commit d991ca7

Browse files
committed
feat: 764 - Intégration S3 step 2
1 parent 81a1330 commit d991ca7

File tree

27 files changed

+959
-739
lines changed

27 files changed

+959
-739
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+
}
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+
});

0 commit comments

Comments
 (0)