101 lines
2.9 KiB
Go
101 lines
2.9 KiB
Go
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)
|
|
}
|
|
}
|