/ 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 }));