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

Add a `getInvitedMembersWithPrivilegeLevels` function.

Then use it to build the loadProject view-model.
Shane Kilkelly 9 лет назад
Родитель
Сommit
8460160076

+ 22 - 11
services/web/app/coffee/Features/Collaborators/CollaboratorsHandler.coffee

@@ -53,20 +53,31 @@ module.exports = CollaboratorsHandler =
 		last_name: 1,
 		last_name: 1,
 		signUpDate: 1
 		signUpDate: 1
 	}
 	}
+	_loadMembers: (members, callback=(error, users) ->) ->
+		result = []
+		async.mapLimit members, 3,
+			(member, cb) ->
+				UserGetter.getUserById member.id, CollaboratorsHandler.USER_PROJECTION, (error, user) ->
+					return cb(error) if error?
+					if user?
+						result.push { user: user, privilegeLevel: member.privilegeLevel }
+					cb()
+			(error) ->
+				return callback(error) if error?
+				callback null, result
+
 	getMembersWithPrivilegeLevels: (project_id, callback = (error, members) ->) ->
 	getMembersWithPrivilegeLevels: (project_id, callback = (error, members) ->) ->
 		CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members = []) ->
 		CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members = []) ->
 			return callback(error) if error?
 			return callback(error) if error?
-			result = []
-			async.mapLimit members, 3,
-				(member, cb) ->
-					UserGetter.getUserById member.id, CollaboratorsHandler.USER_PROJECTION, (error, user) ->
-						return cb(error) if error?
-						if user?
-							result.push { user: user, privilegeLevel: member.privilegeLevel }
-						cb()
-				(error) ->
-					return callback(error) if error?
-					callback null, result
+			CollaboratorsHandler._loadMembers members, (error, users) ->
+				callback error, users
+
+	getInvitedMembersWithPrivilegeLevels: (project_id, callback = (error, members) ->) ->
+		CollaboratorsHandler.getMemberIdsWithPrivilegeLevels project_id, (error, members = []) ->
+			return callback(error) if error?
+			members = members.filter((m) -> m.source == Sources.INVITE)
+			CollaboratorsHandler._loadMembers members, (error, users) ->
+				callback error, users
 
 
 	getMemberIdPrivilegeLevel: (user_id, project_id, callback = (error, privilegeLevel) ->) ->
 	getMemberIdPrivilegeLevel: (user_id, project_id, callback = (error, privilegeLevel) ->) ->
 		# In future if the schema changes and getting all member ids is more expensive (multiple documents)
 		# In future if the schema changes and getting all member ids is more expensive (multiple documents)

+ 1 - 1
services/web/app/coffee/Features/Editor/EditorHttpController.coffee

@@ -35,7 +35,7 @@ module.exports = EditorHttpController =
 		ProjectGetter.getProjectWithoutDocLines project_id, (error, project) ->
 		ProjectGetter.getProjectWithoutDocLines project_id, (error, project) ->
 			return callback(error) if error?
 			return callback(error) if error?
 			return callback(new Error("not found")) if !project?
 			return callback(new Error("not found")) if !project?
-			CollaboratorsHandler.getMembersWithPrivilegeLevels project, (error, members) ->
+			CollaboratorsHandler.getInvitedMembersWithPrivilegeLevels project, (error, members) ->
 				return callback(error) if error?
 				return callback(error) if error?
 				UserGetter.getUser user_id, { isAdmin: true }, (error, user) ->
 				UserGetter.getUser user_id, { isAdmin: true }, (error, user) ->
 					return callback(error) if error?
 					return callback(error) if error?

+ 28 - 2
services/web/test/UnitTests/coffee/Collaborators/CollaboratorsHandlerTests.coffee

@@ -87,9 +87,9 @@ describe "CollaboratorsHandler", ->
 		beforeEach ->
 		beforeEach ->
 			@CollaboratorHandler.getMemberIdsWithPrivilegeLevels = sinon.stub()
 			@CollaboratorHandler.getMemberIdsWithPrivilegeLevels = sinon.stub()
 			@CollaboratorHandler.getMemberIdsWithPrivilegeLevels.withArgs(@project_id).yields(null, [
 			@CollaboratorHandler.getMemberIdsWithPrivilegeLevels.withArgs(@project_id).yields(null, [
-				{ id: "read-only-ref-1", privilegeLevel: "readOnly", source: 'invite' }
+				{ id: "read-only-ref-1", privilegeLevel: "readOnly", source: 'token' }
 				{ id: "read-only-ref-2", privilegeLevel: "readOnly", source: 'invite' }
 				{ id: "read-only-ref-2", privilegeLevel: "readOnly", source: 'invite' }
-				{ id: "read-write-ref-1", privilegeLevel: "readAndWrite", source: 'invite' }
+				{ id: "read-write-ref-1", privilegeLevel: "readAndWrite", source: 'token' }
 				{ id: "read-write-ref-2", privilegeLevel: "readAndWrite", source: 'invite' }
 				{ id: "read-write-ref-2", privilegeLevel: "readAndWrite", source: 'invite' }
 				{ id: "doesnt-exist", privilegeLevel: "readAndWrite", source: 'invite' }
 				{ id: "doesnt-exist", privilegeLevel: "readAndWrite", source: 'invite' }
 			])
 			])
@@ -111,6 +111,32 @@ describe "CollaboratorsHandler", ->
 				])
 				])
 				.should.equal true
 				.should.equal true
 
 
+	describe "getInvitedMembersWithPrivilegeLevels", ->
+		beforeEach ->
+			@CollaboratorHandler.getMemberIdsWithPrivilegeLevels = sinon.stub()
+			@CollaboratorHandler.getMemberIdsWithPrivilegeLevels.withArgs(@project_id).yields(null, [
+				{ id: "read-only-ref-1", privilegeLevel: "readOnly", source: 'token' }
+				{ id: "read-only-ref-2", privilegeLevel: "readOnly", source: 'invite' }
+				{ id: "read-write-ref-1", privilegeLevel: "readAndWrite", source: 'token' }
+				{ id: "read-write-ref-2", privilegeLevel: "readAndWrite", source: 'invite' }
+				{ id: "doesnt-exist", privilegeLevel: "readAndWrite", source: 'invite' }
+			])
+			@UserGetter.getUserById = sinon.stub()
+			@UserGetter.getUserById.withArgs("read-only-ref-1").yields(null, { _id: "read-only-ref-1" })
+			@UserGetter.getUserById.withArgs("read-only-ref-2").yields(null, { _id: "read-only-ref-2" })
+			@UserGetter.getUserById.withArgs("read-write-ref-1").yields(null, { _id: "read-write-ref-1" })
+			@UserGetter.getUserById.withArgs("read-write-ref-2").yields(null, { _id: "read-write-ref-2" })
+			@UserGetter.getUserById.withArgs("doesnt-exist").yields(null, null)
+			@CollaboratorHandler.getInvitedMembersWithPrivilegeLevels @project_id, @callback
+
+		it "should return an array of invited members with their privilege levels", ->
+			@callback
+				.calledWith(null, [
+					{ user: { _id: "read-only-ref-2" }, privilegeLevel: "readOnly" }
+					{ user: { _id: "read-write-ref-2" }, privilegeLevel: "readAndWrite" }
+				])
+				.should.equal true
+
 	describe "getMemberIdPrivilegeLevel", ->
 	describe "getMemberIdPrivilegeLevel", ->
 		beforeEach ->
 		beforeEach ->
 			@CollaboratorHandler.getMemberIdsWithPrivilegeLevels = sinon.stub()
 			@CollaboratorHandler.getMemberIdsWithPrivilegeLevels = sinon.stub()

+ 2 - 2
services/web/test/UnitTests/coffee/Editor/EditorHttpControllerTests.coffee

@@ -109,7 +109,7 @@ describe "EditorHttpController", ->
 			]
 			]
 			@ProjectEditorHandler.buildProjectModelView = sinon.stub().returns(@projectModelView)
 			@ProjectEditorHandler.buildProjectModelView = sinon.stub().returns(@projectModelView)
 			@ProjectGetter.getProjectWithoutDocLines = sinon.stub().callsArgWith(1, null, @project)
 			@ProjectGetter.getProjectWithoutDocLines = sinon.stub().callsArgWith(1, null, @project)
-			@CollaboratorsHandler.getMembersWithPrivilegeLevels = sinon.stub().callsArgWith(1, null, @members)
+			@CollaboratorsHandler.getInvitedMembersWithPrivilegeLevels = sinon.stub().callsArgWith(1, null, @members)
 			@CollaboratorsInviteHandler.getAllInvites = sinon.stub().callsArgWith(1, null, @invites)
 			@CollaboratorsInviteHandler.getAllInvites = sinon.stub().callsArgWith(1, null, @invites)
 			@UserGetter.getUser = sinon.stub().callsArgWith(2, null, @user)
 			@UserGetter.getUser = sinon.stub().callsArgWith(2, null, @user)
 				
 				
@@ -125,7 +125,7 @@ describe "EditorHttpController", ->
 					.should.equal true
 					.should.equal true
 
 
 			it "should get the list of users in the project", ->
 			it "should get the list of users in the project", ->
-				@CollaboratorsHandler.getMembersWithPrivilegeLevels
+				@CollaboratorsHandler.getInvitedMembersWithPrivilegeLevels
 					.calledWith(@project)
 					.calledWith(@project)
 					.should.equal true
 					.should.equal true