Files
go-sip/contracts/control_receipt_test.go
T

53 lines
2.4 KiB
Go

package contracts
import (
"encoding/json"
"testing"
)
func TestTaskControlReceiptFields(t *testing.T) {
schema, err := CompileCurrent("mq-task-control-receipt.schema.json")
if err != nil {
t.Fatal(err)
}
envelope := func(payload map[string]any) map[string]any {
return map[string]any{"event_id": "control-fields", "event_type": "task.control", "dispatcher_id": "c046b893-8628-4589-ae50-619d049248a6", "tenant_id": 1001, "payload": payload}
}
applied := map[string]any{"task_id": "task-a", "action": "pause", "status": "applied", "reason_code": "applied", "task_state": "paused"}
if err := schema.Validate(envelope(applied)); err != nil {
t.Fatalf("requested success structure rejected: %v", err)
}
for key := range applied {
raw, _ := json.Marshal(applied)
var missing map[string]any
_ = json.Unmarshal(raw, &missing)
delete(missing, key)
if err := schema.Validate(envelope(missing)); err == nil {
t.Errorf("success accepted without %s", key)
}
}
for _, payload := range []map[string]any{
{"status": "rejected", "reason_code": "invalid_data", "reason_message": "issued_at missing"},
{"task_id": "task-a", "action": "pause", "status": "rejected", "reason_code": "control_rejected", "task_state": "stopped", "reason_message": "task stopped"},
{"task_id": "task-a", "status": "rejected", "reason_code": "invalid_data", "task_state": "running", "reason_message": "invalid action"},
} {
if err := schema.Validate(envelope(payload)); err != nil {
t.Errorf("rejection with independently known fields rejected: %v", err)
}
}
for _, payload := range []map[string]any{
{"status": "applied"},
{"task_id": "task-a", "action": "pause", "status": "applied", "reason_code": "invalid_data", "task_state": "paused"},
{"status": "rejected", "reason_code": "invalid_data", "reason_message": ""},
{"status": "rejected", "reason_message": "invalid data"},
{"task_id": nil, "status": "rejected", "reason_code": "invalid_data", "reason_message": "invalid data"},
{"task_id": "bad task", "status": "rejected", "reason_code": "invalid_data", "reason_message": "invalid data"},
{"action": "unknown", "status": "rejected", "reason_code": "invalid_data", "reason_message": "invalid data"},
{"task_state": "invented", "status": "rejected", "reason_code": "invalid_data", "reason_message": "invalid data"},
} {
if err := schema.Validate(envelope(payload)); err == nil {
t.Errorf("invalid payload accepted: %+v", payload)
}
}
}