Improve D&D validation reliability
This commit is contained in:
@@ -2,6 +2,7 @@ package shape
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"gitea.maximumdirect.net/eric/notarius/internal/core/source"
|
||||
@@ -54,6 +55,30 @@ func TestValidatorRejectsMissingRequiredSpellFields(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidatorReportsAllSpellDefectsWithContextualGuidance(t *testing.T) {
|
||||
value := dnd.SpellList{SpellCasts: []dnd.SpellCast{
|
||||
{Caster: "", Spell: "Fire Bolt", SourceRefs: refsAt(4)},
|
||||
{Caster: "Aria", Spell: "", SourceRefs: nil},
|
||||
}}
|
||||
result, err := New(Options{}).Validate(context.Background(), requestWithValue(value))
|
||||
if err != nil || result.Approved {
|
||||
t.Fatalf("Validate() = %#v, %v; want rejection", result, err)
|
||||
}
|
||||
for _, want := range []string{"spell_casts[0].caster", "spell_casts[1].spell", "spell_casts[1].source_refs"} {
|
||||
if !strings.Contains(result.Message, want) {
|
||||
t.Fatalf("Message = %q, want %q", result.Message, want)
|
||||
}
|
||||
}
|
||||
for _, want := range []string{"Fire Bolt", "source unit 4", "Aria", "complete replacement"} {
|
||||
if !strings.Contains(result.CorrectionGuidance, want) {
|
||||
t.Fatalf("CorrectionGuidance = %q, want %q", result.CorrectionGuidance, want)
|
||||
}
|
||||
}
|
||||
if strings.Contains(result.CorrectionGuidance, "spell_casts[") {
|
||||
t.Fatalf("CorrectionGuidance exposed operator path: %q", result.CorrectionGuidance)
|
||||
}
|
||||
}
|
||||
|
||||
func TestValidatorSpecCheckpointAndRegistration(t *testing.T) {
|
||||
if got := New(Options{}).CheckpointFingerprints(); len(got) != 1 || got[0].Name != "policy" || got[0].Value != policy {
|
||||
t.Fatalf("CheckpointFingerprints() = %#v, want local policy", got)
|
||||
@@ -77,3 +102,7 @@ func requestWithValue(value dnd.SpellList) contracts.TypedValidationRequest[dnd.
|
||||
func validSpellList() dnd.SpellList {
|
||||
return dnd.SpellList{SpellCasts: []dnd.SpellCast{{Caster: "Aria", Spell: "Cure Wounds", SourceRefs: []source.SourceRef{{SourceID: "session", StartUnitID: 1, EndUnitID: 1}}}}}
|
||||
}
|
||||
|
||||
func refsAt(unitID int) []source.SourceRef {
|
||||
return []source.SourceRef{{SourceID: "session", StartUnitID: unitID, EndUnitID: unitID}}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user