cosmos-sdk/orm/model/ormtable/singleton_test.go

50 lines
1.3 KiB
Go

package ormtable_test
import (
"bytes"
"testing"
"github.com/cosmos/cosmos-sdk/orm/model/ormtable"
"google.golang.org/protobuf/testing/protocmp"
"gotest.tools/v3/assert"
"github.com/cosmos/cosmos-sdk/orm/internal/testkv"
"github.com/cosmos/cosmos-sdk/orm/internal/testpb"
)
func TestSingleton(t *testing.T) {
table, err := ormtable.Build(ormtable.Options{
MessageType: (&testpb.ExampleSingleton{}).ProtoReflect().Type(),
})
assert.NilError(t, err)
ctx := ormtable.WrapContextDefault(testkv.NewSplitMemBackend())
store, err := testpb.NewExampleSingletonStore(table)
assert.NilError(t, err)
val, err := store.Get(ctx)
assert.NilError(t, err)
assert.Assert(t, val != nil) // singletons are always set
assert.NilError(t, store.Save(ctx, &testpb.ExampleSingleton{}))
val.Foo = "abc"
val.Bar = 3
assert.NilError(t, store.Save(ctx, val))
val2, err := store.Get(ctx)
assert.NilError(t, err)
assert.DeepEqual(t, val, val2, protocmp.Transform())
buf := &bytes.Buffer{}
assert.NilError(t, table.ExportJSON(ctx, buf))
assert.NilError(t, table.ValidateJSON(bytes.NewReader(buf.Bytes())))
store2 := ormtable.WrapContextDefault(testkv.NewSplitMemBackend())
assert.NilError(t, table.ImportJSON(store2, bytes.NewReader(buf.Bytes())))
val3, err := store.Get(ctx)
assert.NilError(t, err)
assert.DeepEqual(t, val, val3, protocmp.Transform())
}