/ lib_test.ts
lib_test.ts
 1  import { assertEquals } from "@std/assert";
 2  import { open, Task } from "./lib.ts";
 3  import { fact } from "@dialog-db/query";
 4  import { alice } from "./test/constants.ts";
 5  
 6  Deno.test("it can can perform basic transactions", async () =>
 7    Task.spawn(function* () {
 8      const address = new URL(`file://${Deno.makeTempDirSync()}/${alice}`);
 9      const db = yield* open(address);
10      try {
11        const Counter = fact({
12          name: String,
13          value: Number,
14        });
15  
16        yield* db.transact([
17          Counter.assert({ name: "test", value: 0 }),
18        ]);
19  
20        const results = yield* Counter().query({ from: db });
21  
22        assertEquals(results, [Counter.assert({ name: "test", value: 0 })]);
23  
24        yield* db.transact([Counter.assert({ name: "test", value: 5 })]);
25  
26        assertEquals(
27          yield* Counter().query({ from: db }),
28          [
29            Counter.assert({ name: "test", value: 0 }),
30            Counter.assert({ name: "test", value: 5 }),
31          ],
32          "returns both facts",
33        );
34  
35        yield* db.transact([
36          Counter.assert({ name: "test", value: 0 }).retract(),
37        ]);
38  
39        assertEquals(
40          yield* Counter().query({ from: db }),
41          [Counter.assert({ name: "test", value: 5 })],
42          "one fact was retracted",
43        );
44      } finally {
45        yield* db.close();
46        Deno.removeSync(address);
47      }
48    }));