Files
Assistant/tests/action_commit/continuity_authorization_test.go
2026-08-16 16:19:23 +03:00

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