mirror of
https://github.com/versia-pub/server.git
synced 2025-12-06 08:28:19 +01:00
100 lines
2.5 KiB
TypeScript
100 lines
2.5 KiB
TypeScript
import { type ConfigType, getConfig } from "@config";
|
|
import { afterAll, beforeAll, describe, expect, it } from "bun:test";
|
|
import { LocalBackend, S3Backend } from "~classes/media";
|
|
import { unlink } from "fs/promises";
|
|
import { DeleteObjectCommand } from "@aws-sdk/client-s3";
|
|
|
|
const originalConfig = getConfig();
|
|
const modifiedConfig: ConfigType = {
|
|
...originalConfig,
|
|
media: {
|
|
...originalConfig.media,
|
|
conversion: {
|
|
...originalConfig.media.conversion,
|
|
convert_images: false,
|
|
},
|
|
},
|
|
};
|
|
|
|
describe("LocalBackend", () => {
|
|
let localBackend: LocalBackend;
|
|
let fileName: string;
|
|
|
|
beforeAll(() => {
|
|
localBackend = new LocalBackend(modifiedConfig);
|
|
});
|
|
|
|
afterAll(async () => {
|
|
await unlink(`${process.cwd()}/uploads/${fileName}`);
|
|
});
|
|
|
|
describe("addMedia", () => {
|
|
it("should write the file to the local filesystem and return the hash", async () => {
|
|
const media = new File(["test"], "test.txt", {
|
|
type: "text/plain",
|
|
});
|
|
|
|
const hash = await localBackend.addMedia(media);
|
|
fileName = hash;
|
|
|
|
expect(hash).toBeDefined();
|
|
});
|
|
});
|
|
|
|
describe("getMediaByHash", () => {
|
|
it("should retrieve the file from the local filesystem and return it as a File object", async () => {
|
|
const media = await localBackend.getMediaByHash(fileName);
|
|
|
|
expect(media).toBeInstanceOf(File);
|
|
});
|
|
|
|
it("should return null if the file does not exist", async () => {
|
|
const media =
|
|
await localBackend.getMediaByHash("does-not-exist.txt");
|
|
|
|
expect(media).toBeNull();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe("S3Backend", () => {
|
|
const s3Backend = new S3Backend(modifiedConfig);
|
|
let fileName: string;
|
|
|
|
afterAll(async () => {
|
|
const command = new DeleteObjectCommand({
|
|
Bucket: modifiedConfig.s3.bucket_name,
|
|
Key: fileName,
|
|
});
|
|
|
|
await s3Backend.client.send(command);
|
|
});
|
|
|
|
describe("addMedia", () => {
|
|
it("should write the file to the S3 bucket and return the hash", async () => {
|
|
const media = new File(["test"], "test.txt", {
|
|
type: "text/plain",
|
|
});
|
|
|
|
const hash = await s3Backend.addMedia(media);
|
|
fileName = hash;
|
|
|
|
expect(hash).toBeDefined();
|
|
});
|
|
});
|
|
|
|
describe("getMediaByHash", () => {
|
|
it("should retrieve the file from the S3 bucket and return it as a File object", async () => {
|
|
const media = await s3Backend.getMediaByHash(fileName);
|
|
|
|
expect(media).toBeInstanceOf(File);
|
|
});
|
|
|
|
it("should return null if the file does not exist", async () => {
|
|
const media = await s3Backend.getMediaByHash("does-not-exist.txt");
|
|
|
|
expect(media).toBeNull();
|
|
});
|
|
});
|
|
});
|