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

Add a `getAllInvites` api endpoint

Shane Kilkelly 10 лет назад
Родитель
Сommit
73fed8b0bf

+ 9 - 0
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteController.coffee

@@ -7,6 +7,15 @@ logger = require('logger-sharelatex')
 
 module.exports = CollaboratorsInviteController =
 
+	getAllInvites: (req, res, next) ->
+		projectId = req.params.Project_id
+		logger.log {projectId}, "getting all active invites for project"
+		CollaboratorsInviteHandler.getAllInvites projectId, (err, invites) ->
+			if err?
+				logger.err {projectId}, "error getting invites for project"
+				return next(err)
+			res.json({invites: invites})
+
 	inviteToProject: (req, res, next) ->
 		projectId = req.params.Project_id
 		email = req.body.email

+ 8 - 0
services/web/app/coffee/Features/Collaborators/CollaboratorsInviteHandler.coffee

@@ -11,6 +11,14 @@ Crypto = require 'crypto'
 
 module.exports = CollaboratorsInviteHandler =
 
+	getAllInvites: (projectId, callback=(err, invites)->) ->
+		logger.log {projectId}, "fetching invites from mongo"
+		ProjectInvite.find {projectId: projectId}, (err, invites) ->
+			if err?
+				logger.err {err, projectId}, "error getting invites from mongo"
+				return callback(err)
+			callback(null, invites)
+
 	inviteToProject: (projectId, sendingUserId, email, privileges, callback=(err,invite)->) ->
 		logger.log {projectId, sendingUserId, email, privileges}, "adding invite"
 		Crypto.randomBytes 24, (err, buffer) ->

+ 6 - 0
services/web/app/coffee/Features/Collaborators/CollaboratorsRouter.coffee

@@ -17,6 +17,12 @@ module.exports =
 			CollaboratorsInviteController.inviteToProject
 		)
 
+		webRouter.get(
+			'/project/:Project_id/invite',
+			AuthorizationMiddlewear.ensureUserCanAdminProject,
+			CollaboratorsInviteController.getAllInvites
+		)
+
 		webRouter.delete(
 			'/project/:Project_id/invite/:invite_id',
 			AuthorizationMiddlewear.ensureUserCanAdminProject,

+ 42 - 0
services/web/test/UnitTests/coffee/Collaborators/CollaboratorsInviteControllerTests.coffee

@@ -25,6 +25,48 @@ describe "CollaboratorsInviteController", ->
 		@project_id = "project-id-123"
 		@callback = sinon.stub()
 
+
+	describe 'getAllInvites', ->
+
+		beforeEach ->
+			@fakeInvites = [
+				{_id: ObjectId(), one: 1},
+				{_id: ObjectId(), two: 2}
+			]
+			@req.params =
+				Project_id: @project_id
+			@res.json = sinon.stub()
+			@next = sinon.stub()
+
+		describe 'when all goes well', ->
+
+			beforeEach ->
+				@CollaboratorsInviteHandler.getAllInvites = sinon.stub().callsArgWith(1, null, @fakeInvites)
+				@CollaboratorsInviteController.getAllInvites @req, @res, @next
+
+			it 'should not produce an error', ->
+				@next.callCount.should.equal 0
+
+			it 'should produce a list of invite objects', ->
+				@res.json.callCount.should.equal 1
+				@res.json.calledWith({invites: @fakeInvites}).should.equal true
+
+			it 'should have called CollaboratorsInviteHandler.getAllInvites', ->
+				@CollaboratorsInviteHandler.getAllInvites.callCount.should.equal 1
+				@CollaboratorsInviteHandler.getAllInvites.calledWith(@project_id).should.equal true
+
+		describe 'when CollaboratorsInviteHandler.getAllInvites produces an error', ->
+
+			beforeEach ->
+				@CollaboratorsInviteHandler.getAllInvites = sinon.stub().callsArgWith(1, new Error('woops'))
+				@CollaboratorsInviteController.getAllInvites @req, @res, @next
+
+			it 'should produce an error', ->
+				@next.callCount.should.equal 1
+				@next.firstCall.args[0].should.be.instanceof Error
+
+	# # # #
+
 	describe 'inviteToProject', ->
 
 		beforeEach ->

+ 44 - 0
services/web/test/UnitTests/coffee/Collaborators/CollaboratorsInviteHandlerTests.coffee

@@ -18,6 +18,7 @@ describe "CollaboratorsInviteHandler", ->
 				this
 			save: sinon.stub()
 			@findOne: sinon.stub()
+			@find: sinon.stub()
 			@remove: sinon.stub()
 		@Project = class Project
 			constructor: () ->
@@ -54,6 +55,49 @@ describe "CollaboratorsInviteHandler", ->
 			privileges:     @privileges
 			createdAt:      new Date()
 
+	describe 'getAllInvites', ->
+
+		beforeEach ->
+			@fakeInvites = [
+				{_id: ObjectId(), one: 1},
+				{_id: ObjectId(), two: 2}
+			]
+			@ProjectInvite.find.callsArgWith(1, null, @fakeInvites)
+			@call = (callback) =>
+				@CollaboratorsInviteHandler.getAllInvites @projectId, callback
+
+		describe 'when all goes well', ->
+
+			beforeEach ->
+
+			it 'should not produce an error', (done) ->
+				@call (err, invites) =>
+					expect(err).to.not.be.instanceof Error
+					expect(err).to.be.oneOf [null, undefined]
+					done()
+
+			it 'should produce a list of invite objects', (done) ->
+				@call (err, invites) =>
+					expect(invites).to.not.be.oneOf [null, undefined]
+					expect(invites).to.deep.equal @fakeInvites
+					done()
+
+			it 'should have called ProjectInvite.find', (done) ->
+				@call (err, invites) =>
+					@ProjectInvite.find.callCount.should.equal 1
+					@ProjectInvite.find.calledWith({projectId: @projectId}).should.equal true
+					done()
+
+		describe 'when ProjectInvite.find produces an error', ->
+
+			beforeEach ->
+				@ProjectInvite.find.callsArgWith(1, new Error('woops'))
+
+			it 'should produce an error', (done) ->
+				@call (err, invites) =>
+					expect(err).to.be.instanceof Error
+					done()
+
 	describe 'inviteToProject', ->
 
 		beforeEach ->