Просмотр исходного кода

Group toV and fromV by the doc they correspond to

James Allen 12 лет назад
Родитель
Сommit
6aaa7ba8d5

+ 12 - 4
services/track-changes/app/coffee/UpdatesManager.coffee

@@ -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

+ 15 - 15
services/track-changes/test/acceptance/coffee/GettingUpdatesTests.coffee

@@ -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
 			}]
 

+ 39 - 29
services/track-changes/test/unit/coffee/UpdatesManager/UpdatesManagerTests.coffee

@@ -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
-				toV: 8
-			}]).to.deep.equal [{
-				doc_ids: [@doc_id_1, @doc_id_2]
+			}]
+			expect(result).to.deep.equal [{
+				docs:
+					"doc-id-1":
+						toV: 8
+						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
 			}]