events_test.v

2.0 KB · raw

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.save_worktree(store, store.root, snapshot.Ignore{}, history.SaveInput{23		message: 'first'24	})!2526	// Unflagged to begin with: absence of an event is the flag state.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	// Clearing is itself an event, so flagging stays undoable: the events are38	// all still there, newest simply wins — even when both land in the same39	// second, which is the normal case for an agent.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}