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:
commit
3f5277bf13
2 changed files with 196 additions and 6 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue