okami.mom/albedo
git clone https://git.nkp.pet/okami.mom/albedo
7f83187
main
1//// Late recurring advancement must skip missed intervals without duplicate turns. 2//// Explicit timestamps exercise exact due boundaries without a wall-clock race. 3 4import albedo/daemon/store 5import albedo/harness/extensions/schedule/ledger 6import gleam/option .{ None , Some } 7import gleeunit/should 8import sqlight 9 10pub fn schedules_are_session_scoped_and_advance_once_test () -> Nil { 11let assert Ok ( db ) = 12store . start ( 13":memory:" , 14"CREATE TABLE sessions(id TEXT PRIMARY KEY); INSERT INTO sessions VALUES('a'),('b');" , 15) 16let assert Ok ( _ ) = ledger . initialise ( db ) 17let assert Ok ( first ) = 18ledger . save ( db , "a" , None , "recurring" , "inspect" , 60 , Some ( 60 )) 19let assert Ok ( one ) = ledger . save ( db , "b" , None , "once" , "check" , 60 , None ) 20let assert Ok ([ listed ]) = ledger . list ( db , "a" , 200 ) 21listed |> should . equal ( first ) 22ledger . delete ( db , "b" , first . id ) |> should . equal ( Ok ( False )) 23let assert Ok ([]) = ledger . due ( db , first . next_at - 1 ) 24let assert Ok ([ _ , _ ]) = ledger . due ( db , first . next_at ) 25ledger . advance ( db , first , first . next_at + 180 ) |> should . equal ( Ok ( Nil )) 26let assert Ok ( advanced ) = ledger . get ( db , "a" , first . id ) 27advanced . next_at |> should . equal ( first . next_at + 240 ) 28ledger . advance ( db , one , one . next_at ) |> should . equal ( Ok ( Nil )) 29ledger . get ( db , "b" , one . id ) |> should . be_error 30store . query ( db , fn ( connection ) { 31sqlight . exec ( 32"PRAGMA foreign_keys=ON; DELETE FROM sessions WHERE id='a';" , 33connection , 34) 35}) 36|> should . be_ok 37ledger . list ( db , "a" , 200 ) |> should . equal ( Ok ([])) 38store . close ( db ) 39}