47 lines
2.5 KiB
Go
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")
|
|
}
|
|
})
|
|
}
|
|
}
|