package http import ( "encoding/json" "testing" "github.com/nomadcode/nomadcode-core/internal/workitem" ) func TestPlaneTaskRequestBuildsProviderNeutralRef(t *testing.T) { req := createPlaneTaskRequest{ WorkspaceSlug: " acme ", ProjectID: " proj-1 ", WorkItemID: " work-1 ", ExternalURL: " https://plane.example/work-1 ", } ref, err := req.workItemRef() if err != nil { t.Fatalf("workItemRef returned error: %v", err) } if ref.Provider != workitem.ProviderID("plane") { t.Errorf("provider: got %q", ref.Provider) } if ref.Tenant != "acme" { t.Errorf("tenant: got %q", ref.Tenant) } if ref.Project != "proj-1" { t.Errorf("project: got %q", ref.Project) } if ref.ID != "work-1" { t.Errorf("id: got %q", ref.ID) } if ref.URL != "https://plane.example/work-1" { t.Errorf("url: got %q", ref.URL) } } func TestBuildPlaneCreateTaskInputUsesCommentBeforeDescription(t *testing.T) { input, err := buildPlaneCreateTaskInput(createPlaneTaskRequest{ WorkspaceSlug: "general", ProjectID: "project-1", WorkItemID: "work-1", Comment: "operator instruction", }, workitem.WorkItem{ Ref: workitem.Ref{Provider: "plane", Tenant: "general", Project: "project-1", ID: "work-1"}, Title: "Fix issue", DescriptionText: "plane description", }) if err != nil { t.Fatalf("buildPlaneCreateTaskInput returned error: %v", err) } if input.Title != "Fix issue" { t.Fatalf("unexpected title: %q", input.Title) } if input.Source != "plane" { t.Fatalf("unexpected source: %q", input.Source) } var payload map[string]any if err := json.Unmarshal(input.Payload, &payload); err != nil { t.Fatalf("decode payload: %v", err) } if payload["message"] != "operator instruction" { t.Fatalf("unexpected message: %#v", payload) } } func TestBuildPlaneCreateTaskInputStoresExternalMetadata(t *testing.T) { input, err := buildPlaneCreateTaskInput(createPlaneTaskRequest{ WorkspaceSlug: "general", ProjectID: "project-1", WorkItemID: "work-1", StateID: "state-1", ExternalURL: "https://plane.example/work-1", }, workitem.WorkItem{ Ref: workitem.Ref{Provider: "plane", Tenant: "general", Project: "project-1", ID: "work-1"}, Title: "Fix issue", }) if err != nil { t.Fatalf("buildPlaneCreateTaskInput returned error: %v", err) } if input.External == nil { t.Fatal("expected external ref") } if input.External.Provider != "plane" || input.External.ID != "work-1" { t.Fatalf("unexpected external ref: %#v", input.External) } var metadata map[string]string if err := json.Unmarshal(input.External.Metadata, &metadata); err != nil { t.Fatalf("decode metadata: %v", err) } if metadata["provider"] != "plane" || metadata["tenant"] != "general" || metadata["project"] != "project-1" || metadata["id"] != "work-1" || metadata["state_id"] != "state-1" || metadata["external_url"] != "https://plane.example/work-1" { t.Fatalf("unexpected metadata: %#v", metadata) } }