1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-07 21:37:04 +09:00
anytype-heart/tests/basic_test.go
2023-09-05 11:36:38 +05:00

160 lines
4.3 KiB
Go

//go:build integration
package tests
import (
"github.com/gogo/protobuf/types"
"github.com/anyproto/anytype-heart/core/domain"
"github.com/anyproto/anytype-heart/pb"
"github.com/anyproto/anytype-heart/pkg/lib/bundle"
"github.com/anyproto/anytype-heart/pkg/lib/pb/model"
"github.com/anyproto/anytype-heart/util/pbtypes"
. "github.com/anyproto/anytype-heart/tests/blockbuilder"
)
func (s *testSuite) TestBasic() {
s.Run("open dashboard", func() {
cctx := s.newCallCtx(s.T())
resp := call(cctx, s.ObjectOpen, &pb.RpcObjectOpenRequest{
ObjectId: s.acc.Info.HomeObjectId,
})
s.Require().NotNil(resp.ObjectView)
s.NotEmpty(resp.ObjectView.Blocks)
s.NotEmpty(resp.ObjectView.Details)
s.NotEmpty(resp.ObjectView.Restrictions)
s.NotEmpty(resp.ObjectView.RelationLinks)
s.NotZero(resp.ObjectView.Type)
})
cctx := s.newCallCtx(s.T())
s.Require().NotEmpty(
call(cctx, s.ObjectSearch, &pb.RpcObjectSearchRequest{
Keys: []string{"id", "type", "name"},
}).Records,
)
call(cctx, s.ObjectSearchSubscribe, &pb.RpcObjectSearchSubscribeRequest{
SubId: "recent",
Filters: []*model.BlockContentDataviewFilter{
{
RelationKey: bundle.RelationKeyLastOpenedDate.String(),
Condition: model.BlockContentDataviewFilter_Greater,
},
},
Keys: []string{"id", "lastOpenedDate"},
})
s.Run("create and open an object", func() {
cctx := s.newCallCtx(s.T())
objId := call(cctx, s.BlockLinkCreateWithObject, &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.BundledURL()),
},
},
}).TargetId
resp := call(cctx, s.ObjectOpen, &pb.RpcObjectOpenRequest{
ObjectId: objId,
})
s.Require().NotNil(resp.ObjectView)
waitEvent(cctx.t, s, func(sa *pb.EventMessageValueOfSubscriptionAdd) {
s.Equal(sa.SubscriptionAdd.Id, objId)
})
waitEvent(cctx.t, s, func(sa *pb.EventMessageValueOfObjectDetailsSet) {
s.Equal(sa.ObjectDetailsSet.Id, objId)
s.Contains(sa.ObjectDetailsSet.Details.Fields, bundle.RelationKeyLastOpenedDate.String())
})
})
}
func pageTemplate(children ...*Block) *Block {
cs := []*Block{
Header(Children(
Text("",
TextStyle(model.BlockContentText_Title),
Fields(&types.Struct{
Fields: map[string]*types.Value{
"_detailsKey": pbtypes.StringList([]string{"name", "done"}),
},
}),
Restrictions(model.BlockRestrictions{
Remove: true,
Drag: true,
DropOn: true,
})),
Text("",
TextStyle(model.BlockContentText_Description),
Fields(&types.Struct{
Fields: map[string]*types.Value{
"_detailsKey": pbtypes.String("description"),
},
}),
Restrictions(model.BlockRestrictions{
Remove: true,
Drag: true,
DropOn: true,
})),
FeaturedRelations())),
}
cs = append(cs, children...)
return Root(Children(cs...))
}
func (s *testSuite) testOnNewObject(objectType domain.TypeKey, fn func(objectID string), wantPage *Block) {
cctx := s.newCallCtx(s.T())
resp := call(cctx, s.ObjectCreate, &pb.RpcObjectCreateRequest{
Details: &types.Struct{
Fields: map[string]*types.Value{
bundle.RelationKeyType.String(): pbtypes.String(objectType.BundledURL()),
},
},
})
s.NotEmpty(resp.ObjectId)
fn(resp.ObjectId)
sresp := call(cctx, s.ObjectShow, &pb.RpcObjectShowRequest{
ObjectId: resp.ObjectId,
})
AssertTreesEqual(s.T(), wantPage.Build(), sresp.ObjectView.Blocks)
}
func (s *testSuite) TestEditor_CreateBlocks() {
want := pageTemplate(
Text("Level 1", Color("red"), Children(
Text("Level 2")),
))
cctx := s.newCallCtx(s.T())
s.testOnNewObject(bundle.TypeKeyPage, func(objectID string) {
bresp := call(cctx, s.BlockCreate, &pb.RpcBlockCreateRequest{
ContextId: objectID,
Block: Text("Level 1", Color("red")).Block(),
TargetId: "",
Position: model.Block_Inner,
})
s.NotEmpty(bresp.BlockId)
bresp2 := call(cctx, s.BlockCreate, &pb.RpcBlockCreateRequest{
ContextId: objectID,
Block: Text("Level 2").Block(),
TargetId: bresp.BlockId,
Position: model.Block_Inner,
})
s.NotEmpty(bresp2.BlockId)
}, want)
}