okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
61c43ca
main
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 { 20let #( root , _ , home ) = fixture () 21let assert Ok ( ledger ) = 22store . start ( 23root <> "/preferences.db" , 24"CREATE TABLE session_selection(session TEXT,kind TEXT,preference_key TEXT,enabled INTEGER)" , 25) 26let _ = 27write ( 28home , 29"capabilities.json" , 30"{\"global\":{\"skills\":{\"demo\":false}}}" , 31) 32let assert Ok ( snapshot ) = capabilities . load ( home , Some (#( ledger , "session" ))) 33capabilities . enabled ( snapshot , "skills" , "demo" ) |> should . equal ( Ok ( False )) 34let _ = 35write ( 36home , 37"capabilities.json" , 38"{\"global\":{\"skills\":{\"demo\":true}}}" , 39) 40capabilities . enabled ( snapshot , "skills" , "demo" ) |> should . equal ( Ok ( False )) 41let assert Ok ( updated ) = capabilities . load ( home , Some (#( ledger , "session" ))) 42capabilities . enabled ( updated , "skills" , "demo" ) |> should . equal ( Ok ( True )) 43let assert Ok ( _ ) = 44store . write ( ledger , "INSERT INTO session_selection VALUES(?,?,?,?)" , [ 45sqlight . text ( "session" ), 46sqlight . text ( "skills" ), 47sqlight . text ( "demo" ), 48sqlight . int ( 0 ), 49]) 50capabilities . enabled ( updated , "skills" , "demo" ) |> should . equal ( Ok ( True )) 51let assert Ok ( overridden ) = 52capabilities . load ( home , Some (#( ledger , "session" ))) 53capabilities . enabled ( overridden , "skills" , "demo" ) |> should . equal ( Ok ( False )) 54let _ = write ( home , "capabilities.json" , "invalid json" ) 55let assert Ok ( unscoped ) = capabilities . load ( home , None ) 56capabilities . enabled ( unscoped , "skills" , "demo" ) |> should . equal ( Ok ( True )) 57store . close ( ledger ) 58cleanup ( root ) 59}