Files
freno-dev/src/server/api/routers/downloads.test.ts
2026-02-02 15:24:28 -05:00

61 lines
1.7 KiB
TypeScript

import { describe, it, expect, vi } from "vitest";
import { createCallerFactory } from "~/server/api/root";
import { createTRPCContext } from "~/server/api/utils";
// Mock the S3 client and getSignedUrl function
vi.mock("@aws-sdk/client-s3", () => ({
S3Client: class {
constructor() {}
send() {
return Promise.resolve({
$metadata: {},
Body: "test content"
});
}
},
GetObjectCommand: class {
constructor(params: any) {
this.params = params;
}
params: any;
}
}));
vi.mock("@aws-sdk/s3-request-presigner", () => ({
getSignedUrl: vi.fn().mockResolvedValue("https://test-signed-url.com")
}));
// Mock environment variables
process.env.AWS_REGION = "us-east-1";
process.env.MY_AWS_ACCESS_KEY = "test-access-key";
process.env.MY_AWS_SECRET_KEY = "test-secret-key";
process.env.VITE_DOWNLOAD_BUCKET_STRING = "test-bucket";
describe("downloads router", () => {
it("should return a signed URL for valid asset names", async () => {
const ctx = await createTRPCContext({ nativeEvent: {} } as any);
const caller = createCallerFactory(ctx);
const result = await caller.downloads.getDownloadUrl.query({
asset_name: "lineage"
});
expect(result).toHaveProperty("downloadURL");
expect(typeof result.downloadURL).toBe("string");
});
it("should throw NOT_FOUND for invalid asset names", async () => {
const ctx = await createTRPCContext({ nativeEvent: {} } as any);
const caller = createCallerFactory(ctx);
try {
await caller.downloads.getDownloadUrl.query({
asset_name: "invalid-asset"
});
expect.fail("Should have thrown an error");
} catch (error) {
expect(error).toHaveProperty("code", "NOT_FOUND");
}
});
});