1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-10 18:10:49 +09:00

Merge pull request #1463 from anyproto/go-3870-historygetversions-ignore-limit-param

GO-3870: HistoryGetVersions ignore limit param
This commit is contained in:
Anastasia Shemyakinskaya 2024-08-13 15:10:01 +02:00 committed by GitHub
commit 3f5277bf13
Signed by: github
GPG key ID: B5690EEEBB952194
2 changed files with 196 additions and 6 deletions

View file

@ -148,6 +148,9 @@ func (h *history) Versions(id domain.FullID, lastVersionId string, limit int) (r
if e != nil {
return nil, e
}
if len(data) == 0 {
break
}
if len(data[0].PreviousIds) == 0 {
if data[0].Id == tree.Id() {
data = data[1:]
@ -159,10 +162,6 @@ func (h *history) Versions(id domain.FullID, lastVersionId string, limit int) (r
lastVersionId = tree.Root().Id
includeLastId = false
}
if len(data) == 0 {
break
}
}
resp = reverse(resp)
@ -178,6 +177,9 @@ func (h *history) Versions(id domain.FullID, lastVersionId string, limit int) (r
resp[i].GroupId = groupId
}
if len(resp) > limit {
resp = resp[:limit]
}
return
}

View file

@ -27,8 +27,6 @@ import (
"github.com/anyproto/anytype-heart/util/pbtypes"
)
// todo: reimplement
type historyStub struct {
changes []*objecttree.Change
objectId string
@ -804,6 +802,196 @@ func TestHistory_DiffVersions(t *testing.T) {
})
}
func TestHistory_Versions(t *testing.T) {
t.Run("limit 0 - 100 changes", func(t *testing.T) {
// given
objectId := "objectId"
spaceID := "spaceID"
versionId := "versionId"
accountKeys, _ := accountdata.NewRandom()
account := accountKeys.SignKey.GetPublic()
blDataviewId := "blDataviewId"
relationKey := "key"
viewId := "viewId"
viewName := "view"
viewId1 := "viewId1"
view1Name := "view1"
viewId2 := "viewId2"
view2Name := "view2"
blDataview := provideDataviewBlock(viewId1, view1Name, relationKey, blDataviewId)
blSmartBlock := &model.Block{Id: objectId, Content: &model.BlockContentOfSmartblock{Smartblock: &model.BlockContentSmartblock{}}}
currChange := []*objecttree.Change{
// create block changes
provideBlockEmptyChange(objectId, account),
provideBlockCreateChange(blSmartBlock, account),
provideBlockCreateChange(blDataview, account),
// dataview changes
provideBlockDataviewViewSetChange(blDataviewId, viewId1, view1Name, relationKey, account),
provideBlockDataviewViewSetChange(blDataviewId, viewId2, view2Name, relationKey, account),
provideBlockDataviewSourceSetChange(blDataviewId, account),
provideBlockDataviewRelationSetChange(blDataviewId, account),
provideBlockDataviewViewSetChange(blDataviewId, viewId, viewName, relationKey, account),
provideBlockDataviewViewOrderChange(blDataviewId, viewId, viewId1, account),
provideBlockDataviewViewDeleteChange(blDataviewId, viewId2, account),
provideBlockDataviewRelationDeleteChange(blDataviewId, relationKey, account),
provideBlockDataviewObjectOrderChange(blDataviewId, viewId, account),
provideBlockDataviewGroupOrderChange(blDataviewId, viewId, account),
provideBlockDataviewViewUpdateChange(blDataviewId, viewId, account),
provideBlockDataviewTargetObjectChange(blDataviewId, account),
}
history := newFixture(t, currChange, objectId, spaceID, versionId)
// when
resp, err := history.Versions(domain.FullID{ObjectID: objectId, SpaceID: spaceID}, versionId, 0)
// then
assert.Nil(t, err)
assert.Len(t, resp, 14)
})
t.Run("limit 10 - 10 changes", func(t *testing.T) {
// given
objectId := "objectId"
spaceID := "spaceID"
versionId := "versionId"
accountKeys, _ := accountdata.NewRandom()
account := accountKeys.SignKey.GetPublic()
blDataviewId := "blDataviewId"
relationKey := "key"
viewId := "viewId"
viewName := "view"
viewId1 := "viewId1"
view1Name := "view1"
viewId2 := "viewId2"
view2Name := "view2"
blDataview := provideDataviewBlock(viewId1, view1Name, relationKey, blDataviewId)
blSmartBlock := &model.Block{Id: objectId, Content: &model.BlockContentOfSmartblock{Smartblock: &model.BlockContentSmartblock{}}}
currChange := []*objecttree.Change{
// create block changes
provideBlockEmptyChange(objectId, account),
provideBlockCreateChange(blSmartBlock, account),
provideBlockCreateChange(blDataview, account),
// dataview changes
provideBlockDataviewViewSetChange(blDataviewId, viewId1, view1Name, relationKey, account),
provideBlockDataviewViewSetChange(blDataviewId, viewId2, view2Name, relationKey, account),
provideBlockDataviewSourceSetChange(blDataviewId, account),
provideBlockDataviewRelationSetChange(blDataviewId, account),
provideBlockDataviewViewSetChange(blDataviewId, viewId, viewName, relationKey, account),
provideBlockDataviewViewOrderChange(blDataviewId, viewId, viewId1, account),
provideBlockDataviewViewDeleteChange(blDataviewId, viewId2, account),
provideBlockDataviewRelationDeleteChange(blDataviewId, relationKey, account),
provideBlockDataviewObjectOrderChange(blDataviewId, viewId, account),
provideBlockDataviewGroupOrderChange(blDataviewId, viewId, account),
provideBlockDataviewViewUpdateChange(blDataviewId, viewId, account),
provideBlockDataviewTargetObjectChange(blDataviewId, account),
}
history := newFixture(t, currChange, objectId, spaceID, versionId)
// when
resp, err := history.Versions(domain.FullID{ObjectID: objectId, SpaceID: spaceID}, versionId, 10)
// then
assert.Nil(t, err)
assert.Len(t, resp, 10)
})
t.Run("number of changes equals limit", func(t *testing.T) {
// given
objectId := "objectId"
spaceID := "spaceID"
versionId := "versionId"
accountKeys, _ := accountdata.NewRandom()
account := accountKeys.SignKey.GetPublic()
blDataviewId := "blDataviewId"
relationKey := "key"
viewId := "viewId"
viewName := "view"
viewId1 := "viewId1"
view1Name := "view1"
viewId2 := "viewId2"
view2Name := "view2"
blDataview := provideDataviewBlock(viewId1, view1Name, relationKey, blDataviewId)
blSmartBlock := &model.Block{Id: objectId, Content: &model.BlockContentOfSmartblock{Smartblock: &model.BlockContentSmartblock{}}}
currChange := []*objecttree.Change{
// create block changes
provideBlockEmptyChange(objectId, account),
provideBlockCreateChange(blSmartBlock, account),
provideBlockCreateChange(blDataview, account),
// dataview changes
provideBlockDataviewViewSetChange(blDataviewId, viewId1, view1Name, relationKey, account),
provideBlockDataviewViewSetChange(blDataviewId, viewId2, view2Name, relationKey, account),
provideBlockDataviewSourceSetChange(blDataviewId, account),
provideBlockDataviewRelationSetChange(blDataviewId, account),
provideBlockDataviewViewSetChange(blDataviewId, viewId, viewName, relationKey, account),
provideBlockDataviewViewOrderChange(blDataviewId, viewId, viewId1, account),
provideBlockDataviewViewDeleteChange(blDataviewId, viewId2, account),
provideBlockDataviewRelationDeleteChange(blDataviewId, relationKey, account),
}
history := newFixture(t, currChange, objectId, spaceID, versionId)
// when
resp, err := history.Versions(domain.FullID{ObjectID: objectId, SpaceID: spaceID}, versionId, 10)
// then
assert.Nil(t, err)
assert.Len(t, resp, 10)
})
t.Run("no changes", func(t *testing.T) {
// given
objectId := "objectId"
spaceID := "spaceID"
versionId := "versionId"
var currChange []*objecttree.Change
history := newFixture(t, currChange, objectId, spaceID, versionId)
ctrl := gomock.NewController(t)
spaceService := mock_space.NewMockService(t)
space := mock_clientspace.NewMockSpace(t)
treeBuilder := mock_objecttreebuilder.NewMockTreeBuilder(ctrl)
configureTreeBuilder(treeBuilder, objectId, versionId, spaceID, currChange, space, spaceService)
history.treeBuilder = treeBuilder
history.space = space
history.spaceService = spaceService
// when
resp, err := history.Versions(domain.FullID{ObjectID: objectId, SpaceID: spaceID}, versionId, 10)
// then
assert.Nil(t, err)
assert.Len(t, resp, 0)
})
}
type historyFixture struct {
*history
space *mock_clientspace.MockSpace