Add D&D spells response schema
This commit is contained in:
@@ -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")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user