import { assertEquals } from "../../test_deps.ts";
import { DenoKVSpacePrimitives } from "./deno_kv_space_primitives.ts";

Deno.test("deno_kv_space_primitives", async () => {
  const tempFile = await Deno.makeTempFile({ suffix: ".db" });
  const spacePrimitives = new DenoKVSpacePrimitives();
  await spacePrimitives.init(tempFile);
  await spacePrimitives.writeFile("test.txt", new TextEncoder().encode("test"));
  let result = await spacePrimitives.readFile("test.txt");
  assertEquals(result.data, new TextEncoder().encode("test"));
  let listing = await spacePrimitives.fetchFileList();
  assertEquals(listing.length, 1);
  await spacePrimitives.writeFile(
    "test.txt",
    new TextEncoder().encode("test2"),
  );
  result = await spacePrimitives.readFile("test.txt");
  assertEquals(result.data, new TextEncoder().encode("test2"));
  await spacePrimitives.deleteFile("test.txt");
  listing = await spacePrimitives.fetchFileList();
  try {
    await spacePrimitives.readFile("test.txt");
    throw new Error("Should not be here");
  } catch (e: any) {
    assertEquals(e.message, "Not found");
  }
  assertEquals(listing.length, 0);

  spacePrimitives.close();
  await Deno.remove(tempFile);
});