cosmos-sdk/schema/testing/module_schema.go
Aaron Craelius ae40e809b9
refactor(schema)!: rename ObjectType -> StateObjectType (#21691)
Co-authored-by: cool-developer <51834436+cool-develope@users.noreply.github.com>
2024-09-16 08:17:52 +00:00

37 lines
996 B
Go

package schematesting
import (
"pgregory.net/rapid"
"cosmossdk.io/schema"
)
// ModuleSchemaGen generates random ModuleSchema's based on the validity criteria of module schemas.
func ModuleSchemaGen() *rapid.Generator[schema.ModuleSchema] {
enumTypesGen := distinctTypes(EnumType())
return rapid.Custom(func(t *rapid.T) schema.ModuleSchema {
enumTypes := enumTypesGen.Draw(t, "enumTypes")
tempSchema, err := schema.CompileModuleSchema(enumTypes...)
if err != nil {
t.Fatal(err)
}
objectTypes := distinctTypes(StateObjectTypeGen(tempSchema)).Draw(t, "objectTypes")
allTypes := append(enumTypes, objectTypes...)
modSchema, err := schema.CompileModuleSchema(allTypes...)
if err != nil {
t.Fatal(err)
}
return modSchema
})
}
func distinctTypes[T schema.Type](g *rapid.Generator[T]) *rapid.Generator[[]schema.Type] {
return rapid.SliceOfNDistinct(rapid.Map(g, func(t T) schema.Type {
return t
}), 1, 10, func(t schema.Type) string {
return t.TypeName()
})
}