Files
GL/application/ledger/authority_test.go
T
nfel 88e227f80c
CI/CD Stage / stage (push) Failing after 1m12s
feat(gl): add standalone ledger authority mode
2026-10-06 22:40:07 +03:30

66 lines
2.3 KiB
Go

package ledger
import (
"context"
"errors"
domain "gl/domain/ledger"
"testing"
)
func TestInternalPostingRejectsExternalEvidenceAndMissingActor(t *testing.T) {
for _, tc := range []struct {
name string
change func(*AppendJournalCommand)
}{
{"missing actor", func(c *AppendJournalCommand) { c.ActorID = "" }},
{"blockchain hash", func(c *AppendJournalCommand) { c.Blockchain.TransactionHash = "hash" }},
{"external movement", func(c *AppendJournalCommand) { c.Entries[0].Account.Class = domain.AccountClassExternalBlockchain }},
} {
t.Run(tc.name, func(t *testing.T) {
repository := newRepositoryStub()
command := validAppendCommand()
command.ActorID = "operator"
tc.change(&command)
_, err := NewService(repository, fixedID("test")).PostInternalJournal(context.Background(), command)
if !errors.Is(err, ErrInvalidArgument) || repository.appendCalls != 0 {
t.Fatalf("invalid internal execution reached repository: %v", err)
}
})
}
}
func TestInternalExecutionMarksJournalWithoutMutatingCallerMetadata(t *testing.T) {
repository := newRepositoryStub()
service := NewService(repository, fixedID("test"))
command := validAppendCommand()
command.ActorID = "operator"
command.Metadata = map[string]string{"correlation": "value"}
result, err := service.PostInternalJournal(context.Background(), command)
if err != nil {
t.Fatal(err)
}
if result.Journal.Metadata[domain.InternalExecutionMetadata] != "GL_ONLY" {
t.Fatal("internal provenance missing")
}
if _, ok := command.Metadata[domain.InternalExecutionMetadata]; ok {
t.Fatal("caller metadata mutated")
}
command.Metadata[domain.InternalExecutionMetadata] = "GL_ONLY"
_, err = service.AppendJournal(context.Background(), command)
if !errors.Is(err, ErrInvalidArgument) {
t.Fatalf("ordinary API accepted internal marker: %v", err)
}
}
func TestAuthorityValidatesInputs(t *testing.T) {
service := NewService(newRepositoryStub(), nil)
for _, owner := range []string{"", " "} {
if _, err := service.UserBalances(context.Background(), "user", owner, nil); !errors.Is(err, ErrInvalidArgument) {
t.Fatalf("invalid owner: %v", err)
}
}
if _, err := service.SetOperatingMode(context.Background(), "AUTO", 0, "operator", "outage", false); !errors.Is(err, ErrInvalidArgument) {
t.Fatalf("invalid mode: %v", err)
}
}