Files
cc-connect/agent/copilot/integration_test.go
2026-06-02 23:14:41 +08:00

70 lines
1.4 KiB
Go

package copilot
import (
"context"
"os"
"os/exec"
"strings"
"testing"
"time"
"github.com/chenhg5/cc-connect/core"
)
func TestIntegration_CopilotFlow(t *testing.T) {
if os.Getenv("COPILOT_INTEGRATION") != "1" {
t.Skip("set COPILOT_INTEGRATION=1 to run")
}
if _, err := exec.LookPath("copilot"); err != nil {
t.Skip("copilot CLI not in PATH, skipping")
}
agent, err := New(map[string]any{
"work_dir": t.TempDir(),
})
if err != nil {
t.Fatalf("New: %v", err)
}
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
session, err := agent.StartSession(ctx, "integration-test")
if err != nil {
t.Fatalf("StartSession: %v", err)
}
defer func() { _ = session.Close() }()
// Send a deterministic prompt
err = session.Send("Reply with exactly 'integration-ok' and nothing else", nil, nil)
if err != nil {
t.Fatalf("Send: %v", err)
}
// Collect events until done
var result string
timeout := time.After(25 * time.Second)
for {
select {
case ev, ok := <-session.Events():
if !ok {
goto done
}
switch ev.Type {
case core.EventText:
result += ev.Content
case core.EventResult:
result += ev.Content
goto done
}
case <-timeout:
t.Fatal("timeout waiting for response")
}
}
done:
t.Logf("Response: %s", result)
if !strings.Contains(strings.ToLower(result), "integration-ok") {
t.Errorf("expected 'integration-ok' in response, got: %s", result)
}
}