nomadcode/services/core/internal/http/handlers_test.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)
}
}