forked from Mike/freno-dev
61 lines
1.7 KiB
TypeScript
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");
|
|
}
|
|
});
|
|
});
|