okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

Aly Raffauffeat(api)!: migrate daemon and clients to protocol 361c43ca

main
2.2 KiB59 linesraw
1//// A loaded selection must remain stable across a concurrent file replacement.
2//// E2E cannot deterministically replace preferences between two selection checks.
3
4import albedo/daemon/store
5import albedo/harness/capabilities
6import gleam/option.{None, Some}
7import gleeunit/should
8import sqlight
9
10@external(erlang, "albedo_skills_test_support", "fixture")
11fn fixture() -> #(String, String, String)
12
13@external(erlang, "albedo_skills_test_support", "write")
14fn write(base: String, relative: String, content: String) -> String
15
16@external(erlang, "albedo_skills_test_support", "cleanup")
17fn cleanup(root: String) -> Nil
18
19pub fn selection_snapshot_survives_replacement_test() -> Nil {
20  let #(root, _, home) = fixture()
21  let assert Ok(ledger) =
22    store.start(
23      root <> "/preferences.db",
24      "CREATE TABLE session_selection(session TEXT,kind TEXT,preference_key TEXT,enabled INTEGER)",
25    )
26  let _ =
27    write(
28      home,
29      "capabilities.json",
30      "{\"global\":{\"skills\":{\"demo\":false}}}",
31    )
32  let assert Ok(snapshot) = capabilities.load(home, Some(#(ledger, "session")))
33  capabilities.enabled(snapshot, "skills", "demo") |> should.equal(Ok(False))
34  let _ =
35    write(
36      home,
37      "capabilities.json",
38      "{\"global\":{\"skills\":{\"demo\":true}}}",
39    )
40  capabilities.enabled(snapshot, "skills", "demo") |> should.equal(Ok(False))
41  let assert Ok(updated) = capabilities.load(home, Some(#(ledger, "session")))
42  capabilities.enabled(updated, "skills", "demo") |> should.equal(Ok(True))
43  let assert Ok(_) =
44    store.write(ledger, "INSERT INTO session_selection VALUES(?,?,?,?)", [
45      sqlight.text("session"),
46      sqlight.text("skills"),
47      sqlight.text("demo"),
48      sqlight.int(0),
49    ])
50  capabilities.enabled(updated, "skills", "demo") |> should.equal(Ok(True))
51  let assert Ok(overridden) =
52    capabilities.load(home, Some(#(ledger, "session")))
53  capabilities.enabled(overridden, "skills", "demo") |> should.equal(Ok(False))
54  let _ = write(home, "capabilities.json", "invalid json")
55  let assert Ok(unscoped) = capabilities.load(home, None)
56  capabilities.enabled(unscoped, "skills", "demo") |> should.equal(Ok(True))
57  store.close(ledger)
58  cleanup(root)
59}