70 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|