feat: migrate to typed messages
- Switch OnMessage → OnTypedMessage with natsutil.Decode[messages.PipelineTrigger] - Return *messages.PipelineStatus (not map[string]any) - Remove strVal/mapVal helpers - Add .dockerignore, GOAMD64=v3 in Dockerfile - Update tests for typed structs (14 tests pass)
This commit is contained in:
63
main_test.go
63
main_test.go
@@ -5,35 +5,58 @@ import (
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
|
||||
"git.daviestechlabs.io/daviestechlabs/handler-base/messages"
|
||||
"git.daviestechlabs.io/daviestechlabs/handler-base/natsutil"
|
||||
"github.com/vmihailenco/msgpack/v5"
|
||||
)
|
||||
|
||||
func TestStrVal(t *testing.T) {
|
||||
m := map[string]any{"key": "value", "num": 42}
|
||||
if got := strVal(m, "key", ""); got != "value" {
|
||||
t.Errorf("strVal(key) = %q, want %q", got, "value")
|
||||
func TestPipelineTriggerDecode(t *testing.T) {
|
||||
req := messages.PipelineTrigger{
|
||||
RequestID: "req-001",
|
||||
Pipeline: "document-ingestion",
|
||||
Parameters: map[string]any{"source": "s3://bucket"},
|
||||
}
|
||||
if got := strVal(m, "missing", "default"); got != "default" {
|
||||
t.Errorf("strVal(missing) = %q, want %q", got, "default")
|
||||
data, err := msgpack.Marshal(&req)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := strVal(m, "num", "fallback"); got != "fallback" {
|
||||
t.Errorf("strVal(num) = %q, want %q", got, "fallback")
|
||||
decoded, err := natsutil.Decode[messages.PipelineTrigger](data)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if decoded.RequestID != "req-001" {
|
||||
t.Errorf("RequestID = %q", decoded.RequestID)
|
||||
}
|
||||
if decoded.Pipeline != "document-ingestion" {
|
||||
t.Errorf("Pipeline = %q", decoded.Pipeline)
|
||||
}
|
||||
if decoded.Parameters["source"] != "s3://bucket" {
|
||||
t.Errorf("Parameters = %v", decoded.Parameters)
|
||||
}
|
||||
}
|
||||
|
||||
func TestMapVal(t *testing.T) {
|
||||
inner := map[string]any{"a": "b"}
|
||||
m := map[string]any{"nested": inner, "scalar": "hi"}
|
||||
got := mapVal(m, "nested")
|
||||
if got["a"] != "b" {
|
||||
t.Errorf("mapVal(nested) = %v, want {a:b}", got)
|
||||
func TestPipelineStatusRoundtrip(t *testing.T) {
|
||||
status := messages.PipelineStatus{
|
||||
RequestID: "req-002",
|
||||
Status: "submitted",
|
||||
RunID: "argo-abc123",
|
||||
Engine: "argo",
|
||||
Pipeline: "batch-inference",
|
||||
}
|
||||
got2 := mapVal(m, "missing")
|
||||
if len(got2) != 0 {
|
||||
t.Errorf("mapVal(missing) should be empty, got %v", got2)
|
||||
data, err := msgpack.Marshal(&status)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
got3 := mapVal(m, "scalar")
|
||||
if len(got3) != 0 {
|
||||
t.Errorf("mapVal(scalar) should be empty, got %v", got3)
|
||||
var got messages.PipelineStatus
|
||||
if err := msgpack.Unmarshal(data, &got); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got.RunID != "argo-abc123" {
|
||||
t.Errorf("RunID = %q", got.RunID)
|
||||
}
|
||||
if got.Engine != "argo" {
|
||||
t.Errorf("Engine = %q", got.Engine)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user