e071084ebe
govulncheck / govulncheck (push) Waiting to run
Harness (E2E) / Harnesses (mock LLM) (push) Waiting to run
Harness (E2E) / Provider harnesses (live LLM conformance) (push) Waiting to run
Lint / golangci-lint (push) Waiting to run
Run Tests / Unit Tests (push) Waiting to run
Run Tests / Etcd Integration Tests (push) Waiting to run
111 lines
2.7 KiB
Go
111 lines
2.7 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"os"
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestRunSupportMockSmoke(t *testing.T) {
|
|
if err := runSupport("mock"); err != nil {
|
|
t.Fatalf("support example failed: %v", err)
|
|
}
|
|
}
|
|
|
|
func TestZeroToHeroReadmeDocumentsLifecycle(t *testing.T) {
|
|
b, err := os.ReadFile("README.md")
|
|
if err != nil {
|
|
t.Fatalf("read README.md: %v", err)
|
|
}
|
|
doc := string(b)
|
|
for _, want := range []string{
|
|
"Scaffold services",
|
|
"Run the harness",
|
|
"Chat through an agent",
|
|
"Inspect the workflow",
|
|
"go test ./examples/support",
|
|
} {
|
|
if !strings.Contains(doc, want) {
|
|
t.Fatalf("README.md missing zero-to-hero step %q", want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestZeroToHeroInspectTranscript(t *testing.T) {
|
|
out := captureStdout(t, func() {
|
|
if err := runSupport("mock"); err != nil {
|
|
t.Fatalf("support example failed: %v", err)
|
|
}
|
|
})
|
|
got := stripANSI(out)
|
|
|
|
for _, want := range []string{
|
|
`> event: events.ticket.created {"customer":"alice@acme.com","id":"ticket-1","subject":"Can't log in"}`,
|
|
`[customers] looked up Alice (pro plan)`,
|
|
`[tickets] ticket-1 → priority=high status=in_progress`,
|
|
`approval gate notify_NotifyService_Send(alice@acme.com) — approved`,
|
|
`[notify] 📨 to=alice@acme.com: "Hi Alice — thanks for reaching out. We've bumped this to high priority and are on it."`,
|
|
`support agent: Triaged ticket-1 for Alice and sent a reply.`,
|
|
`inspect transcript:`,
|
|
`micro inspect flow intake`,
|
|
`flow: intake runs=1 latest.reply="Triaged ticket-1 for Alice and sent a reply."`,
|
|
`micro agent history support`,
|
|
`agent: support runs=1 latest.status=completed`,
|
|
`✓ ticket triaged and the customer was replied to — triggered by an event`,
|
|
} {
|
|
if !strings.Contains(got, want) {
|
|
t.Fatalf("support transcript missing %q\n--- got ---\n%s", want, got)
|
|
}
|
|
}
|
|
|
|
readme, err := os.ReadFile("README.md")
|
|
if err != nil {
|
|
t.Fatalf("read README.md: %v", err)
|
|
}
|
|
for _, want := range []string{
|
|
"Expected inspect transcript",
|
|
"micro inspect flow intake",
|
|
"micro agent history support",
|
|
"agent: support runs=1 latest.status=completed",
|
|
} {
|
|
if !strings.Contains(string(readme), want) {
|
|
t.Fatalf("README.md missing transcript contract %q", want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func captureStdout(t *testing.T, fn func()) (out string) {
|
|
t.Helper()
|
|
old := os.Stdout
|
|
r, w, err := os.Pipe()
|
|
if err != nil {
|
|
t.Fatalf("capture stdout: %v", err)
|
|
}
|
|
os.Stdout = w
|
|
|
|
var buf bytes.Buffer
|
|
done := make(chan struct{})
|
|
go func() {
|
|
_, _ = io.Copy(&buf, r)
|
|
close(done)
|
|
}()
|
|
defer func() {
|
|
_ = w.Close()
|
|
os.Stdout = old
|
|
<-done
|
|
out = buf.String()
|
|
}()
|
|
|
|
fn()
|
|
return out
|
|
}
|
|
|
|
var ansiRE = regexp.MustCompile(`\x1b\[[0-9;]*m`)
|
|
|
|
func stripANSI(s string) string {
|
|
return ansiRE.ReplaceAllString(s, "")
|
|
}
|