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) } }