Document D&D spell normalization behavior
This commit is contained in:
56
internal/modules/dnd/normalize/spells/fixture_test.go
Normal file
56
internal/modules/dnd/normalize/spells/fixture_test.go
Normal file
@@ -0,0 +1,56 @@
|
||||
package spells
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"os"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"gitea.maximumdirect.net/eric/notarius/internal/modules/dnd"
|
||||
)
|
||||
|
||||
type normalizerFixtureSet struct {
|
||||
Cases []normalizerFixtureCase `json:"cases"`
|
||||
}
|
||||
|
||||
type normalizerFixtureCase struct {
|
||||
Name string `json:"name"`
|
||||
Input dnd.SpellList `json:"input"`
|
||||
Output dnd.SpellList `json:"output"`
|
||||
WarningReasonCodes []string `json:"warning_reason_codes"`
|
||||
}
|
||||
|
||||
func TestNormalizeAcceptedFixtures(t *testing.T) {
|
||||
data, err := os.ReadFile("testdata/normalizer_accepted_cases.json")
|
||||
if err != nil {
|
||||
t.Fatalf("read fixture: %v", err)
|
||||
}
|
||||
var fixtures normalizerFixtureSet
|
||||
if err := json.Unmarshal(data, &fixtures); err != nil {
|
||||
t.Fatalf("decode fixture: %v", err)
|
||||
}
|
||||
if len(fixtures.Cases) == 0 {
|
||||
t.Fatal("fixture set is empty")
|
||||
}
|
||||
|
||||
for _, fixture := range fixtures.Cases {
|
||||
t.Run(fixture.Name, func(t *testing.T) {
|
||||
result, err := newNormalizer(t).Normalize(context.Background(), normalizeRequestWithSource(fixture.Input, sourceDocument(2)))
|
||||
if err != nil {
|
||||
t.Fatalf("Normalize() error = %v, want nil", err)
|
||||
}
|
||||
if !reflect.DeepEqual(result.Value, fixture.Output) {
|
||||
t.Fatalf("normalized value = %#v, want %#v", result.Value, fixture.Output)
|
||||
}
|
||||
|
||||
gotReasonCodes := make([]string, 0, len(result.Warnings))
|
||||
for _, warning := range result.Warnings {
|
||||
gotReasonCodes = append(gotReasonCodes, warning.ReasonCode)
|
||||
}
|
||||
if !reflect.DeepEqual(gotReasonCodes, fixture.WarningReasonCodes) {
|
||||
t.Fatalf("warning reason codes = %#v, want %#v", gotReasonCodes, fixture.WarningReasonCodes)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user