Add D&D spells response schema

This commit is contained in:
2026-07-03 23:31:19 +00:00
parent d9b5c25cfe
commit 382ca3fb6c
4 changed files with 151 additions and 21 deletions

View File

@@ -7,8 +7,9 @@ import (
"testing"
)
func TestLookupResponseSchemaSucceedsForTestSchemas(t *testing.T) {
func TestLookupResponseSchemaSucceedsForRegisteredSchemas(t *testing.T) {
tests := []ResponseSchemaKey{
DNDSpellsSchemaKey,
TestArtifactSchemaKey,
TestValidatorDecisionSchemaKey,
}
@@ -50,17 +51,22 @@ func TestMustLookupResponseSchemaPanicsForUnknownKey(t *testing.T) {
func TestRegisteredResponseSchemasSortedByKey(t *testing.T) {
schemas := RegisteredResponseSchemas()
if len(schemas) != 2 {
t.Fatalf("expected two schemas, got %d", len(schemas))
if len(schemas) != 3 {
t.Fatalf("expected three schemas, got %d", len(schemas))
}
keys := make([]string, len(schemas))
seen := make(map[ResponseSchemaKey]bool, len(schemas))
for i, schema := range schemas {
keys[i] = string(schema.Key)
seen[schema.Key] = true
}
if !sort.StringsAreSorted(keys) {
t.Fatalf("expected sorted keys, got %v", keys)
}
if !seen[DNDSpellsSchemaKey] {
t.Fatalf("registered schemas = %v, want %q", keys, DNDSpellsSchemaKey)
}
}
func TestResponseSchemaContentIsValidJSON(t *testing.T) {
@@ -72,26 +78,30 @@ func TestResponseSchemaContentIsValidJSON(t *testing.T) {
}
func TestResponseSchemaJSONIsMutationSafe(t *testing.T) {
first := MustLookupResponseSchema(TestArtifactSchemaKey)
first.JSONSchema[0] = '['
for _, key := range []ResponseSchemaKey{DNDSpellsSchemaKey, TestArtifactSchemaKey} {
t.Run(string(key), func(t *testing.T) {
first := MustLookupResponseSchema(key)
first.JSONSchema[0] = '['
second := MustLookupResponseSchema(TestArtifactSchemaKey)
if !json.Valid(second.JSONSchema) {
t.Fatalf("schema JSON was mutated: %s", second.JSONSchema)
}
if len(second.JSONSchema) > 0 && second.JSONSchema[0] == '[' {
t.Fatalf("schema JSON did not use defensive copy")
}
second := MustLookupResponseSchema(key)
if !json.Valid(second.JSONSchema) {
t.Fatalf("schema JSON was mutated: %s", second.JSONSchema)
}
if len(second.JSONSchema) > 0 && second.JSONSchema[0] == '[' {
t.Fatalf("schema JSON did not use defensive copy")
}
registered := RegisteredResponseSchemas()
for i := range registered {
if registered[i].Key == TestArtifactSchemaKey {
registered[i].JSONSchema[0] = '['
}
}
again := MustLookupResponseSchema(TestArtifactSchemaKey)
if !json.Valid(again.JSONSchema) || again.JSONSchema[0] == '[' {
t.Fatalf("registered schema JSON did not use defensive copy")
registered := RegisteredResponseSchemas()
for i := range registered {
if registered[i].Key == key {
registered[i].JSONSchema[0] = '['
}
}
again := MustLookupResponseSchema(key)
if !json.Valid(again.JSONSchema) || again.JSONSchema[0] == '[' {
t.Fatalf("registered schema JSON did not use defensive copy")
}
})
}
}