package ui import ( "bytes" "net/http" "net/http/httptest" "orchestra/internal/store" "strings" "testing" "time" ) func TestOverviewAndTaskDetailHTTP(t *testing.T) { s, err := store.Open(t.TempDir()) if err != nil { t.Fatal(err) } h := Server{Store: s}.Handler() req := httptest.NewRequest(http.MethodPost, "/v1/ui/tasks", bytes.NewBufferString(`{"source":"web","external_id":"one","project":"demo","title":"UI task"}`)) r := httptest.NewRecorder() h.ServeHTTP(r, req) if r.Code != http.StatusOK { t.Fatalf("create status=%d body=%s", r.Code, r.Body.String()) } req = httptest.NewRequest(http.MethodGet, "/v1/ui/overview", nil) r = httptest.NewRecorder() h.ServeHTTP(r, req) if r.Code != http.StatusOK || !strings.Contains(r.Body.String(), "UI task") { t.Fatalf("overview status=%d body=%s", r.Code, r.Body.String()) } } func TestParsePendingApprovalPreservesExactShellCommand(t *testing.T) { text := "Permission required\n$ git status --short && go test ./..." p := ParsePendingApproval(text, "p1", 7, time.Unix(1, 0)) if p == nil || p.Kind != "shell" || p.Command != "git status --short && go test ./..." { t.Fatalf("got %#v", p) } } func TestParsePendingApprovalDoesNotInventActionablePrompt(t *testing.T) { p := ParsePendingApproval("Approval required: choose an option", "p1", 7, time.Now()) if p == nil || p.Kind != "unknown" || !strings.Contains(p.Summary, "review") { t.Fatalf("got %#v", p) } }