42 lines
1.7 KiB
Go
42 lines
1.7 KiB
Go
package action_commit_test
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
commitcontract "git.cin.su/m/Assistant/contracts/commit"
|
|
"git.cin.su/m/Assistant/contracts/continuity"
|
|
commitdomain "git.cin.su/m/Assistant/modules/commit/domain"
|
|
"git.cin.su/m/Assistant/platform/ids"
|
|
)
|
|
|
|
func TestContinuityOperationRequiresExactAllowlistedEnvelope(t *testing.T) {
|
|
context, proposal := testContextAndProposal()
|
|
proposal.CapabilityID = commitcontract.CapabilityContinuityTransition
|
|
proposal.Operation = commitcontract.OperationSatisfyDelivered
|
|
proposal.ContinuitySubject = continuity.SatisfyDeliveredSubject{
|
|
ProspectiveItemID: "prospective-1",
|
|
ExpectedRevision: 4,
|
|
FromState: continuity.ProspectiveDelivered,
|
|
ToState: continuity.ProspectiveSatisfied,
|
|
EvidenceRef: "artifact://evidence/1",
|
|
}
|
|
action, err := commitdomain.Authorize(proposal, context, validator{}, commitcontract.AuthorizedActionID(ids.ID("authorized-continuity")), 10)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if action.PrincipalID != context.Binding.PrincipalID || action.GrantRevision != context.Grant.Revision || action.AuthorizedAtUnixMillis != 10 {
|
|
t.Fatalf("authorized envelope lost authority evidence: %#v", action)
|
|
}
|
|
|
|
proposal.Operation = "arbitrary-operation"
|
|
if _, err := commitdomain.Authorize(proposal, context, validator{}, "rejected", 10); !errors.Is(err, commitdomain.ErrInvalidProposal) {
|
|
t.Fatalf("arbitrary operation error = %v", err)
|
|
}
|
|
proposal.Operation = commitcontract.OperationSatisfyDelivered
|
|
proposal.ContinuitySubject.EvidenceRef = " "
|
|
if _, err := commitdomain.Authorize(proposal, context, validator{}, "rejected-evidence", 10); !errors.Is(err, commitdomain.ErrInvalidProposal) {
|
|
t.Fatalf("empty evidence error = %v", err)
|
|
}
|
|
}
|