1module events23import os4import src.history5import src.snapshot6import src.storage78fn make_repo(name string) !storage.Store {9 dir := os.join_path(os.temp_dir(), 'koh3_events_${os.getpid()}_${name}')10 os.rmdir_all(dir) or {}11 os.mkdir_all(dir, os.MkdirParams{})!12 return storage.create(dir)!13}1415fn test_flags_are_derived_from_the_newest_event() {16 mut store := make_repo('flags')!17 defer {18 store.close()19 os.rmdir_all(store.root) or {}20 }21 os.write_file(os.join_path(store.root, 'a.txt'), 'hello\n')!22 save := history.commit_worktree(store, store.root, snapshot.Ignore{}, history.SaveInput{23 message: 'first'24 })!2526 27 assert !flag_state(store, save.id)!.flagged2829 flag(store, save.id, 'broken build')!30 state := flag_state(store, save.id)!31 assert state.flagged32 assert state.reason == 'broken build'3334 clear_flag(store, save.id)!35 assert !flag_state(store, save.id)!.flagged3637 38 39 40 all_events := all(store)!41 assert all_events.len == 242 assert all_events[0].kind == kind_flag43 assert all_events[1].kind == kind_clear44 assert all_events[1].created_at > all_events[0].created_at45}4647fn test_event_ids_are_stable_for_the_same_record() {48 first := Event{49 kind: kind_flag50 save_id: 'abcdef123456'51 reason: 'why'52 created_at: 179000000053 machine: 'here'54 }55 second := first56 assert event_id(first) == event_id(second)57 assert event_id(first).len == 1258 mut other := first59 other.reason = 'different'60 assert event_id(other) != event_id(first)61}6263fn test_strip_events_are_recorded_separately() {64 mut store := make_repo('strip')!65 defer {66 store.close()67 os.rmdir_all(store.root) or {}68 }69 strip(store, 'abc123abc123', 'secrets.txt')!70 stripped := strip_events(store)!71 assert stripped.len == 172 assert stripped[0].path == 'secrets.txt'73 assert stripped[0].save_id == 'abc123abc123'74}