/cont logic

This commit is contained in:
Luxferre
2026-09-01 09:46:13 +03:00
parent 0eb05354df
commit 872414e6fb
3 changed files with 103 additions and 47 deletions
+46 -21
View File
@@ -604,18 +604,31 @@ func TestFileExists(t *testing.T) {
// ---------- sessions ----------
func TestProjectID(t *testing.T) {
pid := projectID()
if len(pid) != 32 {
t.Fatalf("expected 32-char hex MD5, got %q (len %d)", pid, len(pid))
}
for _, r := range pid {
if !strings.ContainsRune("0123456789abcdef", r) {
t.Fatalf("invalid hex char %c in %q", r, pid)
}
}
}
func TestSaveSessionAndLoad(t *testing.T) {
h := testHome(t)
msgs := []Message{
{Role: "system", Content: strp("sys")},
{Role: "user", Content: strp("hello")},
}
sid, sm := saveSession(msgs)
// Default session ID = project MD5
sid, sm := saveSession(msgs, "")
if sm != "hello" {
t.Errorf("summary = %q, want hello", sm)
}
if sid == "" {
t.Fatalf("empty session id")
if sid != projectID() {
t.Fatalf("expected sid = %s, got %s", projectID(), sid)
}
if !fileExists(filepath.Join(h, ".bantam", "sessions", sid+".json")) {
t.Errorf("session file not written")
@@ -627,17 +640,18 @@ func TestSaveSessionAndLoad(t *testing.T) {
if len(loaded) != 2 || loaded[1].Role != "user" || *loaded[1].Content != "hello" {
t.Errorf("loaded messages mismatch: %+v", loaded)
}
}
func TestSaveSessionCollisionSuffix(t *testing.T) {
testHome(t)
base := time.Now().Format("20060102-150405")
if err := os.WriteFile(filepath.Join(sdir(), base+".json"), []byte("{}"), 0644); err != nil {
t.Fatalf("write: %v", err)
// Custom session ID
sid2, _ := saveSession(msgs, "custom-id")
if sid2 != "custom-id" {
t.Errorf("expected sid2 = custom-id, got %s", sid2)
}
sid, _ := saveSession([]Message{{Role: "user", Content: strp("x")}})
if sid != base+"-1" {
t.Errorf("expected collision suffix %q, got %q", base+"-1", sid)
if !fileExists(filepath.Join(h, ".bantam", "sessions", "custom-id.json")) {
t.Errorf("custom-id.json file not written")
}
loaded2, err := loadSession("custom-id")
if err != nil || len(loaded2) != 2 {
t.Fatalf("loadSession(custom-id) failed: %v", err)
}
}
@@ -690,13 +704,14 @@ func TestAutosave(t *testing.T) {
h := testHome(t)
msgs := []Message{{Role: "user", Content: strp("turn")}}
autosave(msgs)
p := filepath.Join(h, ".bantam", "sessions", "autosave.json")
pid := projectID()
p := filepath.Join(h, ".bantam", "sessions", pid+".json")
if !fileExists(p) {
t.Fatalf("autosave.json not written")
t.Fatalf("%s.json not written", pid)
}
loaded, err := loadSession("autosave")
loaded, err := loadSession(pid)
if err != nil {
t.Fatalf("loadSession(autosave): %v", err)
t.Fatalf("loadSession(%s): %v", pid, err)
}
if len(loaded) != 1 || *loaded[0].Content != "turn" {
t.Errorf("autosave messages mismatch: %+v", loaded)
@@ -1213,17 +1228,27 @@ func TestWriteFile(t *testing.T) {
t.Fatalf("read = %q, want Hello Bantam", string(data))
}
// 5. Offset beyond file length -> padded with null bytes
res, err = writeFile(target, 15, 0, "end")
// 5. Append directly to EOF (offset = len(data), del_bytes 0)
res, err = writeFile(target, len(data), 0, " rocks")
if err != nil {
t.Fatalf("writeFile append: %v", err)
}
data, _ = os.ReadFile(target)
if string(data) != "Hello Bantam rocks" {
t.Fatalf("read = %q, want Hello Bantam rocks", string(data))
}
// 6. Offset beyond file length -> padded with null bytes
res, err = writeFile(target, 25, 0, "end")
if err != nil {
t.Fatalf("writeFile beyond len: %v", err)
}
data, _ = os.ReadFile(target)
if len(data) != 18 || !strings.HasSuffix(string(data), "end") {
t.Fatalf("read length = %d, want 18", len(data))
if len(data) != 28 || !strings.HasSuffix(string(data), "end") {
t.Fatalf("read length = %d, want 28", len(data))
}
// 6. Error on empty path
// 7. Error on empty path
_, err = writeFile("", 0, 0, "abc")
if err == nil {
t.Fatalf("expected error for empty path")