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

69 lines
1.7 KiB
Go

package ormtable_test
import (
"context"
"fmt"
"github.com/cosmos/cosmos-sdk/orm/model/ormtable"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
"google.golang.org/protobuf/encoding/protojson"
"testing"
"github.com/regen-network/gocuke"
"gotest.tools/v3/assert"
"github.com/cosmos/cosmos-sdk/orm/internal/testpb"
"github.com/cosmos/cosmos-sdk/orm/testing/ormtest"
)
func TestSave(t *testing.T) {
gocuke.NewRunner(t, &suite{}).Path("../../features/table/saving.feature").Run()
}
type suite struct {
gocuke.TestingT
table ormtable.Table
ctx context.Context
err error
}
func (s *suite) Before() {
var err error
s.table, err = ormtable.Build(ormtable.Options{
MessageType: (&testpb.SimpleExample{}).ProtoReflect().Type(),
})
assert.NilError(s, err)
s.ctx = ormtable.WrapContextDefault(ormtest.NewMemoryBackend())
}
func (s *suite) AnExistingEntity(docString gocuke.DocString) {
existing := s.simpleExampleFromDocString(docString)
assert.NilError(s, s.table.Insert(s.ctx, existing))
}
func (s suite) simpleExampleFromDocString(docString gocuke.DocString) *testpb.SimpleExample {
ex := &testpb.SimpleExample{}
assert.NilError(s, protojson.Unmarshal([]byte(docString.Content), ex))
return ex
}
func (s *suite) IInsert(a gocuke.DocString) {
ex := s.simpleExampleFromDocString(a)
s.err = s.table.Insert(s.ctx, ex)
}
func (s *suite) IUpdate(a gocuke.DocString) {
ex := s.simpleExampleFromDocString(a)
s.err = s.table.Update(s.ctx, ex)
}
func (s *suite) ExpectAError(a string) {
assert.ErrorContains(s, s.err, a)
}
func (s *suite) ExpectGrpcErrorCode(a string) {
var code codes.Code
assert.NilError(s, code.UnmarshalJSON([]byte(fmt.Sprintf("%q", a))))
assert.Equal(s, code, status.Code(s.err))
}