Skip to content

Commit d874ec5

Browse files
committed
feat: enhance presigned URL handling for other costs with error logging
1 parent 7c52a4d commit d874ec5

2 files changed

Lines changed: 29 additions & 20 deletions

File tree

src/routes/campaigns/campaignId/finance/otherCosts/_get/index.spec.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,15 @@ import app from "@src/app";
33
import { tryber } from "@src/features/database";
44
import { getPresignedUrl } from "@src/features/s3/presignUrl";
55

6-
jest.mock("@src/features/s3/presignUrl");
7-
8-
const mockedGetPresignedUrl = getPresignedUrl as jest.MockedFunction<
9-
typeof getPresignedUrl
10-
>;
6+
jest.mock("@src/features/s3/presignUrl", () => {
7+
return {
8+
getPresignedUrl: jest
9+
.fn()
10+
.mockImplementation((url: string) => Promise.resolve(url)),
11+
};
12+
});
1113

1214
describe("GET /campaigns/campaignId/finance/otherCosts", () => {
13-
beforeEach(() => {
14-
mockedGetPresignedUrl.mockImplementation(async (url: string) => url);
15-
});
16-
1715
afterEach(() => {
1816
jest.clearAllMocks();
1917
});
@@ -347,21 +345,21 @@ describe("GET /campaigns/campaignId/finance/otherCosts", () => {
347345
expect(costWithoutAttachments.attachments).toEqual([]);
348346
});
349347

350-
it("Should call getPresignedUrl for each attachment with 3 hours expiration", async () => {
348+
it("Should call getPresignedUrl for each attachment", async () => {
351349
await request(app)
352350
.get("/campaigns/1/finance/otherCosts")
353351
.set("Authorization", "Bearer admin");
354352

355-
expect(mockedGetPresignedUrl).toHaveBeenCalledTimes(3);
356-
expect(mockedGetPresignedUrl).toHaveBeenCalledWith(
353+
expect(getPresignedUrl).toHaveBeenCalledTimes(3);
354+
expect(getPresignedUrl).toHaveBeenCalledWith(
357355
"https://example.com/attachment1.pdf",
358356
10800
359357
);
360-
expect(mockedGetPresignedUrl).toHaveBeenCalledWith(
358+
expect(getPresignedUrl).toHaveBeenCalledWith(
361359
"https://example.com/attachment2.jpg",
362360
10800
363361
);
364-
expect(mockedGetPresignedUrl).toHaveBeenCalledWith(
362+
expect(getPresignedUrl).toHaveBeenCalledWith(
365363
"https://example.com/attachment3.png",
366364
10800
367365
);

src/routes/campaigns/campaignId/finance/otherCosts/_get/index.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,23 @@ export default class OtherCostsRoute extends CampaignRoute<{
8888
);
8989

9090
const resolvedAttachments = await Promise.all(
91-
costAttachments.map(async (a) => ({
92-
id: a.id,
93-
url: a.url,
94-
mimetype: a.mime_type,
95-
presigned_url: await getPresignedUrl(a.url, 10800), // 3 hours expiration
96-
}))
91+
costAttachments.map(async (a) => {
92+
let presignedUrl = a.url;
93+
try {
94+
presignedUrl = await getPresignedUrl(a.url, 10800);
95+
} catch (error) {
96+
console.error(
97+
`Failed to generate presigned URL for ${a.url}:`,
98+
error
99+
);
100+
}
101+
return {
102+
id: a.id,
103+
url: a.url,
104+
mimetype: a.mime_type,
105+
presigned_url: presignedUrl,
106+
};
107+
})
97108
);
98109

99110
return {

0 commit comments

Comments
 (0)