/cont logic
This commit is contained in:
+46
-21
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user