Files
Assistant/modules/capability/domain/binding_test.go
T
m 6e0040fe89
CI / test (pull_request) Successful in 12s
CI / test (push) Successful in 10s
feat: add notification delivery foundation
2026-08-16 19:08:07 +03:00

46 lines
1.6 KiB
Go

package domain
import (
"testing"
"git.cin.su/m/Assistant/contracts/capability"
"git.cin.su/m/Assistant/contracts/identity"
)
func validBinding() capability.Binding {
return capability.Binding{ID: "binding-1", CapabilityID: "prospective-notification-delivery", OwnerPrincipalID: identity.PrincipalID("owner-1"), Revision: 1, State: capability.BindingActive, HTTPSOrigin: "https://assistent.cin.su", DeliveryPath: "/delivery/v1/receipts", ReceiptPath: "/delivery/v1/receipts", Protocol: capability.ProtocolIdempotentReceiptV1, SecretRef: "notification-write-v1", VerifiedAtUnixMillis: 1, Health: capability.HealthAvailable}
}
func TestValidateBinding(t *testing.T) {
b := validBinding()
b.ReceiptPath = "/delivery/v1/lookup"
if err := ValidateBinding(b); err != nil {
t.Fatal(err)
}
for _, mutate := range []func(*capability.Binding){
func(v *capability.Binding) { v.HTTPSOrigin = "http://assistent.cin.su" },
func(v *capability.Binding) { v.DeliveryPath = "//evil" },
func(v *capability.Binding) { v.SecretRef = "" },
func(v *capability.Binding) { v.Revision = 0 },
func(v *capability.Binding) { v.Health = capability.HealthDegraded },
} {
candidate := b
mutate(&candidate)
if err := UsableBinding(candidate); err == nil {
t.Fatalf("expected rejection: %+v", candidate)
}
}
}
func TestRetireBindingIncrementsRevision(t *testing.T) {
b := validBinding()
b.ReceiptPath = "/delivery/v1/lookup"
retired, err := RetireBinding(b)
if err != nil {
t.Fatal(err)
}
if retired.State != capability.BindingRetired || retired.Revision != 2 {
t.Fatalf("unexpected retired binding: %+v", retired)
}
}