Files
tutti/services/tuttid/api/daemon_workspace_agents_test.go
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

128 lines
4.4 KiB
Go

package api
import (
"context"
"testing"
"time"
tuttigenerated "github.com/tutti-os/tutti/services/tuttid/api/generated"
workspaceagentbiz "github.com/tutti-os/tutti/services/tuttid/biz/workspaceagent"
workspacedata "github.com/tutti-os/tutti/services/tuttid/data/workspace"
workspaceagentservice "github.com/tutti-os/tutti/services/tuttid/service/workspaceagent"
)
type stubWorkspaceAgentService struct {
view workspaceagentbiz.View
err error
createdWith workspaceagentservice.PutInput
}
func (s *stubWorkspaceAgentService) List(context.Context, string) ([]workspaceagentbiz.View, error) {
if s.err != nil {
return nil, s.err
}
return []workspaceagentbiz.View{s.view}, nil
}
func (s *stubWorkspaceAgentService) Get(context.Context, string, string) (workspaceagentbiz.View, error) {
return s.view, s.err
}
func (s *stubWorkspaceAgentService) Create(_ context.Context, input workspaceagentservice.PutInput) (workspaceagentbiz.View, error) {
s.createdWith = input
return s.view, s.err
}
func (s *stubWorkspaceAgentService) Update(_ context.Context, _ workspaceagentservice.PutInput) (workspaceagentbiz.View, error) {
return s.view, s.err
}
func (s *stubWorkspaceAgentService) Delete(context.Context, string, string) error {
return s.err
}
func testWorkspaceAgentView() workspaceagentbiz.View {
now := time.Unix(1700000000, 0).UTC()
return workspaceagentbiz.View{
Agent: workspaceagentbiz.Agent{
ID: "workspace-agent:one",
WorkspaceID: "ws",
Name: "Builder",
Description: "Build",
HarnessAgentTargetID: "local:codex",
Instructions: "Focus",
CallConditions: []string{"When implementation is needed"},
Skills: []string{"go"},
Tools: []string{},
Source: workspaceagentbiz.SourceUser,
Revision: 1,
CreatedAt: now,
UpdatedAt: now,
},
Harness: workspaceagentbiz.Harness{
AgentTargetID: "local:codex",
Available: true,
Provider: "codex",
Name: "Codex",
IconKey: "codex",
Enabled: true,
},
}
}
func TestCreateWorkspaceAgentMapsRequestAndProjection(t *testing.T) {
service := &stubWorkspaceAgentService{view: testWorkspaceAgentView()}
api := DaemonAPI{
WorkspaceAgentService: service,
}
response, err := api.CreateWorkspaceAgent(context.Background(), tuttigenerated.CreateWorkspaceAgentRequestObject{
WorkspaceID: "ws",
Body: &tuttigenerated.PutWorkspaceAgentRequest{
Name: "Builder",
Description: "Build",
HarnessAgentTargetId: "local:codex",
Instructions: "Focus",
CallConditions: []string{"When implementation is needed"},
Skills: []string{"go"},
Tools: []string{},
},
})
if err != nil {
t.Fatalf("CreateWorkspaceAgent() error = %v", err)
}
created, ok := response.(tuttigenerated.CreateWorkspaceAgent201JSONResponse)
if !ok {
t.Fatalf("CreateWorkspaceAgent() response = %T", response)
}
if created.Id != "workspace-agent:one" || created.AgentTargetId != created.Id {
t.Fatalf("CreateWorkspaceAgent() identity = %#v", created)
}
if created.Harness.Provider == nil || *created.Harness.Provider != "codex" || created.Harness.IconKey == nil {
t.Fatalf("CreateWorkspaceAgent() harness = %#v", created.Harness)
}
if service.createdWith.HarnessAgentTargetID != "local:codex" || service.createdWith.Description != "Build" {
t.Fatalf("CreateWorkspaceAgent() input = %#v", service.createdWith)
}
if len(service.createdWith.CallConditions) != 1 || len(created.CallConditions) != 1 {
t.Fatalf("CreateWorkspaceAgent() call conditions = %#v / %#v", service.createdWith.CallConditions, created.CallConditions)
}
}
func TestGetWorkspaceAgentReturnsSpecificNotFoundCode(t *testing.T) {
api := DaemonAPI{WorkspaceAgentService: &stubWorkspaceAgentService{err: workspacedata.ErrWorkspaceAgentNotFound}}
response, err := api.GetWorkspaceAgent(context.Background(), tuttigenerated.GetWorkspaceAgentRequestObject{
WorkspaceID: "ws",
WorkspaceAgentID: "workspace-agent:missing",
})
if err != nil {
t.Fatalf("GetWorkspaceAgent() error = %v", err)
}
notFound, ok := response.(tuttigenerated.GetWorkspaceAgent404JSONResponse)
if !ok {
t.Fatalf("GetWorkspaceAgent() response = %T", response)
}
if notFound.Error.Code != tuttigenerated.WorkspaceAgentNotFound {
t.Fatalf("GetWorkspaceAgent() code = %q", notFound.Error.Code)
}
}