1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-07 21:37:04 +09:00
anytype-heart/test/basic_test.go
2022-12-01 18:16:10 +05:00

141 lines
3.9 KiB
Go

package test
import (
"context"
"encoding/json"
"os"
"testing"
"github.com/anytypeio/go-anytype-middleware/pb"
"github.com/anytypeio/go-anytype-middleware/pb/service"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/bundle"
"github.com/anytypeio/go-anytype-middleware/pkg/lib/pb/model"
"github.com/anytypeio/go-anytype-middleware/util/pbtypes"
"github.com/gogo/protobuf/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/metadata"
)
func TestBasic(t *testing.T) {
conn, err := grpc.Dial("127.0.0.1:31007", grpc.WithBlock(), grpc.WithTransportCredentials(insecure.NewCredentials()))
require.NoError(t, err)
c := service.NewClientCommandsClient(conn)
const mnemonic = "lamp crane identify video setup cactus hat icon guard develop alert solar"
const rootPath = "/var/anytype"
ctx := context.Background()
t.Run("WalletRecover", func(t *testing.T) {
resp, err := c.WalletRecover(ctx, &pb.RpcWalletRecoverRequest{
Mnemonic: mnemonic,
RootPath: rootPath,
})
assert.NoError(t, json.NewEncoder(os.Stdout).Encode(resp))
require.NoError(t, err)
})
var tok string
t.Run("WalletCreateSession", func(t *testing.T) {
resp, err := c.WalletCreateSession(ctx, &pb.RpcWalletCreateSessionRequest{
Mnemonic: mnemonic,
})
require.NoError(t, err)
tok = resp.Token
})
ctx = metadata.AppendToOutgoingContext(ctx, "token", tok)
stream, err := c.ListenSessionEvents(ctx, &pb.StreamRequest{Token: tok})
require.NoError(t, err)
er := startEventReceiver(ctx, stream)
t.Run("AccountRecover", func(t *testing.T) {
resp, err := c.AccountRecover(ctx, &pb.RpcAccountRecoverRequest{})
require.NoError(t, err)
assert.NoError(t, json.NewEncoder(os.Stdout).Encode(resp))
})
t.Run("AccountSelect", func(t *testing.T) {
var id string
// TODO: log waiting for event?
waitEvent(er, func(a *pb.EventMessageValueOfAccountShow) {
id = a.AccountShow.Account.Id
})
resp, err := c.AccountSelect(ctx, &pb.RpcAccountSelectRequest{
Id: id,
})
require.NoError(t, err)
assert.NoError(t, json.NewEncoder(os.Stdout).Encode(resp))
})
t.Run("ObjectSearch", func(t *testing.T) {
resp, err := c.ObjectSearch(ctx, &pb.RpcObjectSearchRequest{
Keys: []string{"id", "type", "name"},
})
require.NoError(t, err)
require.NotEmpty(t, resp.Records)
})
t.Run("ObjectSearchSubscribe", func(t *testing.T) {
resp, err := c.ObjectSearchSubscribe(ctx, &pb.RpcObjectSearchSubscribeRequest{
SubId: "recent",
Filters: []*model.BlockContentDataviewFilter{
{
RelationKey: bundle.RelationKeyLastOpenedDate.String(),
Condition: model.BlockContentDataviewFilter_Greater,
},
},
Keys: []string{"id", "lastOpenedDate"},
})
require.NoError(t, err)
require.NotEmpty(t, resp.Records)
})
var objId string
t.Run("BlockLinkCreateWithObject", func(t *testing.T) {
resp, err := c.BlockLinkCreateWithObject(ctx, &pb.RpcBlockLinkCreateWithObjectRequest{
InternalFlags: []*model.InternalFlag{
{
Value: model.InternalFlag_editorDeleteEmpty,
},
{
Value: model.InternalFlag_editorSelectType,
},
},
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyType.String(): pbtypes.String(bundle.TypeKeyNote.URL()),
},
},
})
require.NoError(t, err)
require.NotEmpty(t, resp.TargetId)
objId = resp.TargetId
})
t.Run("ObjectOpen", func(t *testing.T) {
resp, err := c.ObjectOpen(ctx, &pb.RpcObjectOpenRequest{
ObjectId: objId,
})
require.NoError(t, err)
require.NotNil(t, resp.ObjectView)
waitEvent(er, func(sa *pb.EventMessageValueOfSubscriptionAdd) {
require.Equal(t, sa.SubscriptionAdd.Id, objId)
})
waitEvent(er, func(sa *pb.EventMessageValueOfObjectDetailsSet) {
require.Equal(t, sa.ObjectDetailsSet.Id, objId)
require.Contains(t, sa.ObjectDetailsSet.Details.Fields, bundle.RelationKeyLastOpenedDate.String())
})
})
}