41 lines
1.8 KiB
Go
41 lines
1.8 KiB
Go
package identity
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/notarius/internal/core/source"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/contracts"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/framework/pipeline"
|
|
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd"
|
|
domainidentity "gitea.maximumdirect.net/eric/notarius/internal/modules/dnd/items/identity"
|
|
)
|
|
|
|
func TestValidatorRejectsInvalidAndDuplicateItemIdentity(t *testing.T) {
|
|
value := dnd.ItemRegistry{Items: []dnd.Item{
|
|
{ID: "wrong", Name: "Rope", SourceRefs: []source.SourceRef{{SourceID: "session", StartUnitID: 1, EndUnitID: 1}}},
|
|
{ID: domainidentity.DeriveID("rope"), Name: "rope", SourceRefs: []source.SourceRef{{SourceID: "session", StartUnitID: 2, EndUnitID: 2}}},
|
|
}}
|
|
result, err := New(Options{}).Validate(context.Background(), contracts.TypedValidationRequest[dnd.ItemRegistry]{Value: value})
|
|
if err != nil || result.Approved || result.ReasonCode != ReasonCode || !strings.Contains(result.Message, "invalid_id") || !strings.Contains(result.Message, "duplicate_canonical_identity") {
|
|
t.Fatalf("Validate() = %#v, %v; want identity rejection", result, err)
|
|
}
|
|
}
|
|
|
|
func TestValidatorRegistersPolicy(t *testing.T) {
|
|
registry := pipeline.NewValidatorRegistry()
|
|
if err := Register(registry); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if got, ok := registry.Spec(Key); !ok || got != Spec() || got.ExecutionClass != contracts.ExecutionClassDeterministic {
|
|
t.Fatalf("registered spec = %#v, present = %t", got, ok)
|
|
}
|
|
if got := New(Options{}).CheckpointFingerprints(); len(got) != 1 || got[0].Value != domainidentity.Policy {
|
|
t.Fatalf("fingerprints = %#v", got)
|
|
}
|
|
if _, err := DecodeOptions(map[string]any{"unexpected": true}); err == nil {
|
|
t.Fatal("DecodeOptions accepted unknown options")
|
|
}
|
|
}
|