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
134 lines
4.2 KiB
Go
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
|
|
}
|