53 lines
2.4 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|