175 lines
3.3 KiB
Go
175 lines
3.3 KiB
Go
package schematesting
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"cosmossdk.io/schema"
|
|
)
|
|
|
|
// ExampleAppSchema is an example app schema that intends to cover all schema cases that indexers should handle
|
|
// that can be used in reproducible unit testing and property based testing.
|
|
var ExampleAppSchema = map[string]schema.ModuleSchema{
|
|
"all_kinds": mkAllKindsModule(),
|
|
"test_cases": schema.MustCompileModuleSchema(
|
|
schema.StateObjectType{
|
|
Name: "Singleton",
|
|
KeyFields: []schema.Field{},
|
|
ValueFields: []schema.Field{
|
|
{
|
|
Name: "Value",
|
|
Kind: schema.StringKind,
|
|
},
|
|
{
|
|
Name: "Value2",
|
|
Kind: schema.BytesKind,
|
|
},
|
|
},
|
|
},
|
|
schema.StateObjectType{
|
|
Name: "Simple",
|
|
KeyFields: []schema.Field{
|
|
{
|
|
Name: "Key",
|
|
Kind: schema.StringKind,
|
|
},
|
|
},
|
|
ValueFields: []schema.Field{
|
|
{
|
|
Name: "Value1",
|
|
Kind: schema.Int32Kind,
|
|
},
|
|
{
|
|
Name: "Value2",
|
|
Kind: schema.BytesKind,
|
|
},
|
|
},
|
|
},
|
|
schema.StateObjectType{
|
|
Name: "TwoKeys",
|
|
KeyFields: []schema.Field{
|
|
{
|
|
Name: "Key1",
|
|
Kind: schema.StringKind,
|
|
},
|
|
{
|
|
Name: "Key2",
|
|
Kind: schema.Int32Kind,
|
|
},
|
|
},
|
|
},
|
|
schema.StateObjectType{
|
|
Name: "ThreeKeys",
|
|
KeyFields: []schema.Field{
|
|
{
|
|
Name: "Key1",
|
|
Kind: schema.StringKind,
|
|
},
|
|
{
|
|
Name: "Key2",
|
|
Kind: schema.Int32Kind,
|
|
},
|
|
{
|
|
Name: "Key3",
|
|
Kind: schema.Uint64Kind,
|
|
},
|
|
},
|
|
ValueFields: []schema.Field{
|
|
{
|
|
Name: "Value1",
|
|
Kind: schema.Int32Kind,
|
|
},
|
|
},
|
|
},
|
|
schema.StateObjectType{
|
|
Name: "ManyValues",
|
|
KeyFields: []schema.Field{
|
|
{
|
|
Name: "Key",
|
|
Kind: schema.StringKind,
|
|
},
|
|
},
|
|
ValueFields: []schema.Field{
|
|
{
|
|
Name: "Value1",
|
|
Kind: schema.Int32Kind,
|
|
},
|
|
{
|
|
Name: "Value2",
|
|
Kind: schema.BytesKind,
|
|
},
|
|
{
|
|
Name: "Value3",
|
|
Kind: schema.Float64Kind,
|
|
},
|
|
{
|
|
Name: "Value4",
|
|
Kind: schema.Uint64Kind,
|
|
},
|
|
},
|
|
},
|
|
schema.StateObjectType{
|
|
Name: "RetainDeletions",
|
|
KeyFields: []schema.Field{
|
|
{
|
|
Name: "Key",
|
|
Kind: schema.StringKind,
|
|
},
|
|
},
|
|
ValueFields: []schema.Field{
|
|
{
|
|
Name: "Value1",
|
|
Kind: schema.Int32Kind,
|
|
},
|
|
{
|
|
Name: "Value2",
|
|
Kind: schema.BytesKind,
|
|
},
|
|
},
|
|
RetainDeletions: true,
|
|
},
|
|
),
|
|
}
|
|
|
|
func mkAllKindsModule() schema.ModuleSchema {
|
|
types := []schema.Type{testEnum}
|
|
for i := 1; i < int(schema.MAX_VALID_KIND); i++ {
|
|
kind := schema.Kind(i)
|
|
typ := mkTestObjectType(kind)
|
|
types = append(types, typ)
|
|
}
|
|
|
|
return schema.MustCompileModuleSchema(types...)
|
|
}
|
|
|
|
func mkTestObjectType(kind schema.Kind) schema.StateObjectType {
|
|
field := schema.Field{
|
|
Kind: kind,
|
|
}
|
|
|
|
if kind == schema.EnumKind {
|
|
field.ReferencedType = testEnum.Name
|
|
}
|
|
|
|
keyField := field
|
|
keyField.Name = "key"
|
|
if !kind.ValidKeyKind() {
|
|
keyField.Kind = schema.Int32Kind
|
|
}
|
|
val1Field := field
|
|
val1Field.Name = "valNotNull"
|
|
val2Field := field
|
|
val2Field.Name = "valNullable"
|
|
val2Field.Nullable = true
|
|
|
|
return schema.StateObjectType{
|
|
Name: fmt.Sprintf("test_%v", kind),
|
|
KeyFields: []schema.Field{keyField},
|
|
ValueFields: []schema.Field{val1Field, val2Field},
|
|
}
|
|
}
|
|
|
|
var testEnum = schema.EnumType{
|
|
Name: "test_enum_type",
|
|
Values: []schema.EnumValueDefinition{{Name: "foo", Value: 1}, {Name: "bar", Value: 2}, {Name: "baz", Value: 3}},
|
|
}
|