Files
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

134 lines
4.2 KiB
Go

package workspace
import (
"encoding/json"
"testing"
workspaceissues "github.com/tutti-os/tutti/packages/workspace/issues"
workspaceservice "github.com/tutti-os/tutti/services/tuttid/service/workspace"
)
func TestGeneratedIssueManagerContextRefFromDomainScopesTaskID(t *testing.T) {
t.Parallel()
issuePayload := generatedContextRefPayload(t, workspaceissues.ContextRef{
ContextRefID: "context-ref-1",
WorkspaceID: "workspace-1",
IssueID: "issue-1",
ParentKind: workspaceissues.ContextRefParentIssue,
RefType: "file",
Path: "/workspace/issue.md",
DisplayName: "issue.md",
CreatedAtUnixMS: 1700000000000,
}, workspaceservice.IssueManagerContextRefAccessWorkspacePath)
if issuePayload["parentKind"] != string(workspaceissues.ContextRefParentIssue) {
t.Fatalf("issue parentKind = %v, want issue", issuePayload["parentKind"])
}
if _, ok := issuePayload["taskId"]; ok {
t.Fatalf("issue context ref taskId = %v, want omitted", issuePayload["taskId"])
}
taskPayload := generatedContextRefPayload(t, workspaceissues.ContextRef{
ContextRefID: "context-ref-2",
WorkspaceID: "workspace-1",
IssueID: "issue-1",
TaskID: "task-1",
ParentKind: workspaceissues.ContextRefParentTask,
RefType: "file",
Path: "/workspace/task.md",
DisplayName: "task.md",
CreatedAtUnixMS: 1700000000000,
}, workspaceservice.IssueManagerContextRefAccessWorkspacePath)
if taskPayload["parentKind"] != string(workspaceissues.ContextRefParentTask) {
t.Fatalf("task parentKind = %v, want task", taskPayload["parentKind"])
}
if taskPayload["taskId"] != "task-1" {
t.Fatalf("task context ref taskId = %v, want task-1", taskPayload["taskId"])
}
}
func TestGeneratedIssueManagerContextRefHidesManagedAttachmentPath(t *testing.T) {
t.Parallel()
payload := generatedContextRefPayload(t, workspaceissues.ContextRef{
ContextRefID: "attachment-fbeec26b-1dde-4509-9368-f40c78e24a38",
WorkspaceID: "workspace-1",
IssueID: "issue-1",
ParentKind: workspaceissues.ContextRefParentIssue,
RefType: "image/png",
Path: "/daemon/state/agent-prompt-assets/issues/private.png",
DisplayName: "capture.png",
}, workspaceservice.IssueManagerContextRefAccessManagedAttachment)
if payload["accessKind"] != "managed_attachment" {
t.Fatalf("accessKind = %v, want managed_attachment", payload["accessKind"])
}
if _, ok := payload["path"]; ok {
t.Fatalf("managed attachment path = %v, want omitted", payload["path"])
}
}
func TestGeneratedIssueManagerStatusCountsFromDomainOmitsLegacyInProgress(t *testing.T) {
t.Parallel()
encoded, err := json.Marshal(GeneratedIssueManagerStatusCountsFromDomain(workspaceissues.StatusCounts{
All: 3,
Running: 3,
}))
if err != nil {
t.Fatalf("Marshal() error = %v", err)
}
var payload map[string]any
if err := json.Unmarshal(encoded, &payload); err != nil {
t.Fatalf("Unmarshal() error = %v", err)
}
if _, ok := payload["inProgress"]; ok {
t.Fatalf("inProgress = %v, want omitted", payload["inProgress"])
}
if payload["running"] != float64(3) {
t.Fatalf("running = %v, want 3", payload["running"])
}
}
func TestGeneratedIssueManagerIssueFromDomainProjectsDispatchPause(t *testing.T) {
t.Parallel()
generated := GeneratedIssueManagerIssueFromDomain(workspaceissues.Issue{
IssueID: "issue-1",
WorkspaceID: "workspace-1",
DispatchPaused: true,
})
if !generated.DispatchPaused {
t.Fatal("DispatchPaused = false, want durable execution pause")
}
}
func generatedContextRefPayload(
t *testing.T,
ref workspaceissues.ContextRef,
accessKind workspaceservice.IssueManagerContextRefAccessKind,
) map[string]any {
t.Helper()
path := &ref.Path
if accessKind == workspaceservice.IssueManagerContextRefAccessManagedAttachment {
path = nil
}
encoded, err := json.Marshal(GeneratedIssueManagerContextRefFromService(
workspaceservice.IssueManagerContextRefView{
Ref: ref,
AccessKind: accessKind,
Path: path,
},
))
if err != nil {
t.Fatalf("Marshal() error = %v", err)
}
var payload map[string]any
if err := json.Unmarshal(encoded, &payload); err != nil {
t.Fatalf("Unmarshal() error = %v", err)
}
return payload
}