Bake in thread directives
This commit is contained in:
72
internal/codexstate/state_test.go
Normal file
72
internal/codexstate/state_test.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package codexstate
|
||||
|
||||
import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
_ "modernc.org/sqlite"
|
||||
)
|
||||
|
||||
func TestSetThreadCWD(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
dir := t.TempDir()
|
||||
rollout := filepath.Join(dir, "rollout.jsonl")
|
||||
first := map[string]any{"type": "session_meta", "payload": map[string]any{"id": "thr_1", "cwd": "/old"}}
|
||||
encoded, err := json.Marshal(first)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.WriteFile(rollout, []byte(string(encoded)+"\n{\"type\":\"other\"}\n"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
dbPath := filepath.Join(dir, "state_test.sqlite")
|
||||
db, err := sql.Open("sqlite", dbPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := db.ExecContext(ctx, "CREATE TABLE threads (id TEXT PRIMARY KEY, cwd TEXT, rollout_path TEXT, updated_at INTEGER, updated_at_ms INTEGER)"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := db.ExecContext(ctx, "INSERT INTO threads (id, cwd, rollout_path) VALUES (?, ?, ?)", "thr_1", "/old", rollout); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_ = db.Close()
|
||||
|
||||
result, err := SetThreadCWD(ctx, "", dbPath, "thr_1", "/new/path")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if result.Before != "/old" || result.After != "/new/path" {
|
||||
t.Fatalf("unexpected result: %+v", result)
|
||||
}
|
||||
|
||||
db, err = sql.Open("sqlite", dbPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer db.Close()
|
||||
var cwd string
|
||||
if err := db.QueryRowContext(ctx, "SELECT cwd FROM threads WHERE id = ?", "thr_1").Scan(&cwd); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if cwd != "/new/path" {
|
||||
t.Fatalf("db cwd = %q", cwd)
|
||||
}
|
||||
data, err := os.ReadFile(rollout)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var updated map[string]any
|
||||
if err := json.Unmarshal([]byte(strings.SplitN(string(data), "\n", 2)[0]), &updated); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
payload := updated["payload"].(map[string]any)
|
||||
if payload["cwd"] != "/new/path" {
|
||||
t.Fatalf("rollout cwd = %v", payload["cwd"])
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user