Files
m c6139699a9
CI / test (pull_request) Successful in 11s
CI / test (push) Successful in 11s
feat: enable creator notification command
2026-08-16 19:19:00 +03:00

47 lines
2.5 KiB
Go

package domain
import (
"strings"
"testing"
"git.cin.su/m/Assistant/contracts/authority"
commitcontract "git.cin.su/m/Assistant/contracts/commit"
"git.cin.su/m/Assistant/contracts/work"
)
type allowValidator struct{}
func (allowValidator) Validate(authority.AuthorizationContext) error { return nil }
func notificationProposal() commitcontract.ActionProposal {
return commitcontract.ActionProposal{IntentID: "intent", ActorID: "actor", CapabilityID: commitcontract.CapabilityProspectiveNotification, Target: work.TaskTarget{TaskID: "task", GoalID: "goal", ScopeID: "scope", Revision: 1}, Operation: commitcontract.OperationDeliverProspectiveNotification, NotificationSubject: commitcontract.ProspectiveNotificationSubject{ProspectiveItemID: "item", ExpectedRevision: 1, TemplateCode: commitcontract.ProspectiveDeliveredTemplateV1, BindingID: "binding", BindingRevision: 1, RenderedTitle: "Домовой", RenderedMessage: "Пора вернуться", RequestDigest: strings.Repeat("a", 64)}}
}
func notificationContext() AuthorizationContext {
var context AuthorizationContext
context.Binding.ActorID, context.Binding.PrincipalID, context.Binding.Active = "actor", "owner", true
context.Scope = authority.Scope{ID: "scope"}
context.Grant = authority.AuthorityGrant{ID: "grant", ActorID: "actor", PrincipalID: "owner", ScopeID: "scope", Class: authority.GrantClassCreator, Revision: 1, Active: true}
return context
}
func TestAuthorizeProspectiveNotification(t *testing.T) {
action, err := Authorize(notificationProposal(), notificationContext(), allowValidator{}, "authorized", 1)
if err != nil {
t.Fatal(err)
}
if action.Proposal.Operation != commitcontract.OperationDeliverProspectiveNotification {
t.Fatal("operation changed")
}
}
func TestAuthorizeProspectiveNotificationRejectsInvalidEvidence(t *testing.T) {
for name, mutate := range map[string]func(*commitcontract.ActionProposal){"binding": func(p *commitcontract.ActionProposal) { p.NotificationSubject.BindingID = "" }, "digest": func(p *commitcontract.ActionProposal) { p.NotificationSubject.RequestDigest = "AA" }, "message": func(p *commitcontract.ActionProposal) { p.NotificationSubject.RenderedMessage = "" }, "operation": func(p *commitcontract.ActionProposal) { p.Operation = "arbitrary-webhook" }} {
t.Run(name, func(t *testing.T) {
proposal := notificationProposal()
mutate(&proposal)
if _, err := Authorize(proposal, notificationContext(), allowValidator{}, "authorized", 1); err == nil {
t.Fatal("expected denial")
}
})
}
}