mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
Group toV and fromV by the doc they correspond to
This commit is contained in:
parent
5595910122
commit
6aaa7ba8d5
3 changed files with 66 additions and 48 deletions
|
@ -176,21 +176,29 @@ module.exports = UpdatesManager =
|
|||
if !userExists
|
||||
earliestUpdate.meta.users.push update.meta.user
|
||||
|
||||
if update.doc_id.toString() not in earliestUpdate.doc_ids
|
||||
earliestUpdate.doc_ids.push update.doc_id.toString()
|
||||
doc_id = update.doc_id.toString()
|
||||
doc = earliestUpdate.docs[doc_id]
|
||||
if doc?
|
||||
doc.fromV = Math.min(doc.fromV, update.v)
|
||||
doc.toV = Math.max(doc.toV, update.v)
|
||||
else
|
||||
earliestUpdate.docs[doc_id] =
|
||||
fromV: update.v
|
||||
toV: update.v
|
||||
|
||||
earliestUpdate.meta.start_ts = Math.min(earliestUpdate.meta.start_ts, update.meta.start_ts)
|
||||
earliestUpdate.meta.end_ts = Math.max(earliestUpdate.meta.end_ts, update.meta.end_ts)
|
||||
earliestUpdate.fromV = update.v
|
||||
else
|
||||
newUpdate =
|
||||
meta:
|
||||
users: []
|
||||
start_ts: update.meta.start_ts
|
||||
end_ts: update.meta.end_ts
|
||||
docs: {}
|
||||
|
||||
newUpdate.docs[update.doc_id.toString()] =
|
||||
fromV: update.v
|
||||
toV: update.v
|
||||
doc_ids: [update.doc_id.toString()]
|
||||
|
||||
if update.meta.user?
|
||||
newUpdate.meta.users.push update.meta.user
|
||||
|
|
|
@ -63,30 +63,30 @@ describe "Getting updates", ->
|
|||
.should.equal true
|
||||
|
||||
it "should return at least the min_count number of summarized updates", ->
|
||||
docs1 = {}
|
||||
docs1[@doc_id] = toV: 20, fromV: 19
|
||||
docs2 = {}
|
||||
docs2[@doc_id] = toV: 18, fromV: 17
|
||||
docs3 = {}
|
||||
docs3[@doc_id] = toV: 16, fromV: 15
|
||||
expect(@updates.slice(0,3)).to.deep.equal [{
|
||||
doc_ids: [@doc_id]
|
||||
docs: docs1
|
||||
meta:
|
||||
start_ts: @to - 2 * @minutes
|
||||
end_ts: @to
|
||||
users: [@user]
|
||||
toV: 20
|
||||
fromV: 19
|
||||
}, {
|
||||
doc_ids: [@doc_id]
|
||||
docs: docs2
|
||||
meta:
|
||||
start_ts: @to - 1 * @days - 2 * @minutes
|
||||
end_ts: @to - 1 * @days
|
||||
users: [@user]
|
||||
toV: 18
|
||||
fromV: 17
|
||||
}, {
|
||||
doc_ids: [@doc_id]
|
||||
docs: docs3
|
||||
meta:
|
||||
start_ts: @to - 2 * @days - 2 * @minutes
|
||||
end_ts: @to - 2 * @days
|
||||
users: [@user]
|
||||
toV: 16
|
||||
fromV: 15
|
||||
}]
|
||||
|
||||
|
||||
|
@ -98,21 +98,21 @@ describe "Getting updates", ->
|
|||
done()
|
||||
|
||||
it "should return as many updates as it can", ->
|
||||
docs1 = {}
|
||||
docs1[@doc_id] = toV: 4, fromV: 3
|
||||
docs2 = {}
|
||||
docs2[@doc_id] = toV: 2, fromV: 1
|
||||
expect(@updates).to.deep.equal [{
|
||||
doc_ids: [@doc_id]
|
||||
docs: docs1
|
||||
meta:
|
||||
start_ts: @to - 8 * @days - 2 * @minutes
|
||||
end_ts: @to - 8 * @days
|
||||
users: [@user]
|
||||
toV: 4
|
||||
fromV: 3
|
||||
}, {
|
||||
doc_ids: [@doc_id]
|
||||
docs: docs2
|
||||
meta:
|
||||
start_ts: @to - 9 * @days - 2 * @minutes
|
||||
end_ts: @to - 9 * @days
|
||||
users: [@user]
|
||||
toV: 2
|
||||
fromV: 1
|
||||
}]
|
||||
|
||||
|
|
|
@ -480,97 +480,107 @@ describe "UpdatesManager", ->
|
|||
@now = Date.now()
|
||||
@user_1 = { id: "mock-user-1" }
|
||||
@user_2 = { id: "mock-user-2" }
|
||||
@doc_id_1 = "mock-doc-id-1"
|
||||
@doc_id_2 = "mock-doc-id-2"
|
||||
|
||||
it "should concat updates that are close in time", ->
|
||||
expect(@UpdatesManager._summarizeUpdates [{
|
||||
doc_id: @doc_id_1
|
||||
result = @UpdatesManager._summarizeUpdates [{
|
||||
doc_id: "doc-id-1"
|
||||
meta:
|
||||
user: @user_1
|
||||
start_ts: @now + 20
|
||||
end_ts: @now + 30
|
||||
v: 5
|
||||
}, {
|
||||
doc_id: @doc_id_1
|
||||
doc_id: "doc-id-1"
|
||||
meta:
|
||||
user: @user_2
|
||||
start_ts: @now
|
||||
end_ts: @now + 10
|
||||
v: 4
|
||||
}]).to.deep.equal [{
|
||||
doc_ids: [@doc_id_1]
|
||||
}]
|
||||
|
||||
expect(result).to.deep.equal [{
|
||||
docs:
|
||||
"doc-id-1":
|
||||
fromV: 4
|
||||
toV: 5
|
||||
meta:
|
||||
users: [@user_1, @user_2]
|
||||
start_ts: @now
|
||||
end_ts: @now + 30
|
||||
fromV: 4
|
||||
toV: 5
|
||||
}]
|
||||
|
||||
it "should leave updates that are far apart in time", ->
|
||||
oneDay = 1000 * 60 * 60 * 24
|
||||
expect(@UpdatesManager._summarizeUpdates [{
|
||||
doc_id: @doc_id_1
|
||||
result = @UpdatesManager._summarizeUpdates [{
|
||||
doc_id: "doc-id-1"
|
||||
meta:
|
||||
user: @user_2
|
||||
start_ts: @now + oneDay
|
||||
end_ts: @now + oneDay + 10
|
||||
v: 5
|
||||
}, {
|
||||
doc_id: @doc_id_1
|
||||
doc_id: "doc-id-1"
|
||||
meta:
|
||||
user: @user_1
|
||||
start_ts: @now
|
||||
end_ts: @now + 10
|
||||
v: 4
|
||||
}]).to.deep.equal [{
|
||||
doc_ids: [@doc_id_1]
|
||||
}]
|
||||
expect(result).to.deep.equal [{
|
||||
docs:
|
||||
"doc-id-1":
|
||||
fromV: 5
|
||||
toV: 5
|
||||
meta:
|
||||
users: [@user_2]
|
||||
start_ts: @now + oneDay
|
||||
end_ts: @now + oneDay + 10
|
||||
fromV: 5
|
||||
toV: 5
|
||||
}, {
|
||||
doc_ids: [@doc_id_1]
|
||||
docs:
|
||||
"doc-id-1":
|
||||
fromV: 4
|
||||
toV: 4
|
||||
meta:
|
||||
users: [@user_1]
|
||||
start_ts: @now
|
||||
end_ts: @now + 10
|
||||
fromV: 4
|
||||
toV: 4
|
||||
}]
|
||||
|
||||
it "should concat onto existing summarized updates", ->
|
||||
expect(@UpdatesManager._summarizeUpdates [{
|
||||
doc_id: @doc_id_2
|
||||
result = @UpdatesManager._summarizeUpdates [{
|
||||
doc_id: "doc-id-2"
|
||||
meta:
|
||||
user: @user_1
|
||||
start_ts: @now + 20
|
||||
end_ts: @now + 30
|
||||
v: 5
|
||||
}, {
|
||||
doc_id: @doc_id_2
|
||||
doc_id: "doc-id-2"
|
||||
meta:
|
||||
user: @user_2
|
||||
start_ts: @now
|
||||
end_ts: @now + 10
|
||||
v: 4
|
||||
}], [{
|
||||
doc_ids: [@doc_id_1]
|
||||
docs:
|
||||
"doc-id-1":
|
||||
fromV: 6
|
||||
toV: 8
|
||||
meta:
|
||||
users: [@user_1]
|
||||
start_ts: @now + 40
|
||||
end_ts: @now + 50
|
||||
fromV: 6
|
||||
}]
|
||||
expect(result).to.deep.equal [{
|
||||
docs:
|
||||
"doc-id-1":
|
||||
toV: 8
|
||||
}]).to.deep.equal [{
|
||||
doc_ids: [@doc_id_1, @doc_id_2]
|
||||
fromV: 6
|
||||
"doc-id-2":
|
||||
toV: 5
|
||||
fromV: 4
|
||||
meta:
|
||||
users: [@user_1, @user_2]
|
||||
start_ts: @now
|
||||
end_ts: @now + 50
|
||||
fromV: 4
|
||||
toV: 8
|
||||
}]
|
||||
|
|
Loading…
Reference in a new issue