mirror of
https://github.com/shishantbiswas/bknd.git
synced 2026-03-16 04:27:21 +00:00
public commit
This commit is contained in:
81
app/__test__/media/Storage.spec.ts
Normal file
81
app/__test__/media/Storage.spec.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import { describe, expect, test } from "bun:test";
|
||||
import { type FileBody, Storage, type StorageAdapter } from "../../src/media/storage/Storage";
|
||||
import * as StorageEvents from "../../src/media/storage/events";
|
||||
|
||||
class TestAdapter implements StorageAdapter {
|
||||
files: Record<string, FileBody> = {};
|
||||
|
||||
getName() {
|
||||
return "test";
|
||||
}
|
||||
|
||||
getSchema() {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
async listObjects(prefix?: string) {
|
||||
return [];
|
||||
}
|
||||
|
||||
async putObject(key: string, body: FileBody) {
|
||||
this.files[key] = body;
|
||||
return "etag-string";
|
||||
}
|
||||
|
||||
async deleteObject(key: string) {
|
||||
delete this.files[key];
|
||||
}
|
||||
|
||||
async objectExists(key: string) {
|
||||
return key in this.files;
|
||||
}
|
||||
|
||||
async getObject(key: string) {
|
||||
return new Response(this.files[key]);
|
||||
}
|
||||
|
||||
getObjectUrl(key: string) {
|
||||
return key;
|
||||
}
|
||||
|
||||
async getObjectMeta(key: string) {
|
||||
return { type: "text/plain", size: 0 };
|
||||
}
|
||||
|
||||
toJSON(secrets?: boolean): any {
|
||||
return { name: this.getName() };
|
||||
}
|
||||
}
|
||||
|
||||
describe("Storage", async () => {
|
||||
const adapter = new TestAdapter();
|
||||
const storage = new Storage(adapter);
|
||||
const events = new Map<string, any>();
|
||||
|
||||
storage.emgr.onAny((event) => {
|
||||
// @ts-ignore
|
||||
events.set(event.constructor.slug, event);
|
||||
//console.log("event", event.constructor.slug, event);
|
||||
});
|
||||
|
||||
test("uploads a file", async () => {
|
||||
const {
|
||||
meta: { type, size }
|
||||
} = await storage.uploadFile("hello", "world.txt");
|
||||
expect({ type, size }).toEqual({ type: "text/plain", size: 0 });
|
||||
});
|
||||
|
||||
test("deletes the file", async () => {
|
||||
expect(await storage.deleteFile("hello")).toBeUndefined();
|
||||
expect(await storage.fileExists("hello")).toBeFalse();
|
||||
});
|
||||
|
||||
test("events were fired", async () => {
|
||||
expect(events.has(StorageEvents.FileUploadedEvent.slug)).toBeTrue();
|
||||
expect(events.has(StorageEvents.FileDeletedEvent.slug)).toBeTrue();
|
||||
// @todo: file access must be tested in controllers
|
||||
//expect(events.has(StorageEvents.FileAccessEvent.slug)).toBeTrue();
|
||||
});
|
||||
|
||||
// @todo: test controllers
|
||||
});
|
||||
Reference in New Issue
Block a user