import { indexedDB } from "https://deno.land/x/indexeddb@v1.1.0/ponyfill_memory.ts";
import { IndexedDBSpacePrimitives } from "./indexeddb_space_primitives.ts";
import { assertEquals } from "../../test_deps.ts";

Deno.test("IndexedDBSpacePrimitives", async () => {
  const space = new IndexedDBSpacePrimitives("test", indexedDB);
  const files = await space.fetchFileList();
  assertEquals(files, []);
  // Write text file
  const fileMeta = await space.writeFile(
    "test.txt",
    stringToBytes("Hello World"),
  );
  assertEquals(
    (await space.readFile("test.txt")).data,
    stringToBytes("Hello World"),
  );
  const fbContent = (await space.readFile("test.txt"))
    .data;
  assertEquals(new TextDecoder().decode(fbContent), "Hello World");
  assertEquals(await space.fetchFileList(), [fileMeta]);
  const buf = new Uint8Array([1, 2, 3, 4, 5]);
  // Write binary file
  await space.writeFile("test.bin", buf);
  const fMeta = await space.getFileMeta("test.bin");
  assertEquals(fMeta.size, 5);
  assertEquals((await space.fetchFileList()).length, 2);

  await space.deleteFile("test.bin");
  assertEquals(await space.fetchFileList(), [fileMeta]);
});

function stringToBytes(str: string): Uint8Array {
  return new TextEncoder().encode(str);
}