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

cleanup and tests for v2 affiliations confirmation

hugh-obrien 8 лет назад
Родитель
Сommit
65ecdf84f4

+ 10 - 1
services/web/app/coffee/Features/Institutions/InstitutionsController.coffee

@@ -1,7 +1,16 @@
+logger = require("logger-sharelatex")
 UserGetter = require("../User/UserGetter")
 UserGetter = require("../User/UserGetter")
+{ addAffiliation } = require("../Institutions/InstitutionsAPI")
+async = require('async')
 
 
 module.exports = InstitutionsController =
 module.exports = InstitutionsController =
 	confirmDomain: (req, res, next) ->
 	confirmDomain: (req, res, next) ->
 		hostname = req.body.hostname
 		hostname = req.body.hostname
 		UserGetter.getUsersByHostname hostname, {_id:1, emails:1}, (error, users) ->
 		UserGetter.getUsersByHostname hostname, {_id:1, emails:1}, (error, users) ->
-			res.json {hostname: hostname, wub: users}
+			async.map users, (user, error) ->
+				email = user.emails.filter (email) -> email.hostname == hostname
+				addAffiliation user._id, email[0].email, {}, (error) =>
+					if error?
+						logger.err error: error, 'problem adding affiliation while confirming hostname'
+						return next(error)
+			res.sendStatus 200

+ 54 - 0
services/web/test/unit/coffee/Institutions/InstitutionsControllerTests.coffee

@@ -0,0 +1,54 @@
+should = require('chai').should()
+SandboxedModule = require('sandboxed-module')
+assert = require('assert')
+path = require('path')
+sinon = require('sinon')
+modulePath = path.join __dirname, "../../../../app/js/Features/Institutions/InstitutionsController"
+expect = require("chai").expect
+
+describe "InstitutionsController", ->
+
+	beforeEach ->
+		@logger = err: sinon.stub(), log: ->
+		@stubbedUser1 =
+			_id: "3131231"
+			name:"bob"
+			email:"hello@world.com"
+			emails: [
+				{"email":"stubb1@mit.edu","hostname":"mit.edu"},
+				{"email":"test@test.com","hostname":"test.com"}
+			]
+		@stubbedUser2 =
+			_id: "3131232"
+			name:"test"
+			email:"hello2@world.com"
+			emails: [
+				{"email":"subb2@mit.edu","hostname":"mit.edu"}
+			]
+		
+		@getUsersByHostname = sinon.stub().callsArgWith(2, null, [ @stubbedUser1, @stubbedUser2 ])
+		@addAffiliation = sinon.stub().callsArgWith(3, null)
+		@InstitutionsController = SandboxedModule.require modulePath, requires:
+			'logger-sharelatex': @logger
+			'../User/UserGetter':
+				getUsersByHostname: @getUsersByHostname
+			'../Institutions/InstitutionsAPI':
+				addAffiliation: @addAffiliation
+
+		@req =
+			body:{}
+
+		@res =
+			send: sinon.stub()
+			json: sinon.stub()
+		@next = sinon.stub()
+
+	describe 'confirmDomain', ->
+		it 'should add affiliations for matching users', (done)->
+			@req.body.hostname = "mit.edu"
+			@res.sendStatus = (code) =>
+				@getUsersByHostname.calledOnce.should.equal true
+				@addAffiliation.calledTwice.should.equal true
+				@addAffiliation.calledWith(@stubbedUser1._id, @stubbedUser1.emails[0].email).should.equal true
+				done()
+			@InstitutionsController.confirmDomain @req, @res, @next

+ 2 - 1
services/web/test/unit/coffee/User/UserUpdaterTests.coffee

@@ -90,9 +90,10 @@ describe "UserUpdater", ->
 			@UserUpdater.addEmailAddress @stubbedUser._id, @newEmail, (err)=>
 			@UserUpdater.addEmailAddress @stubbedUser._id, @newEmail, (err)=>
 				@UserGetter.ensureUniqueEmailAddress.called.should.equal true
 				@UserGetter.ensureUniqueEmailAddress.called.should.equal true
 				should.not.exist(err)
 				should.not.exist(err)
+				hostname = @newEmail.split('@')[1]
 				@UserUpdater.updateUser.calledWith(
 				@UserUpdater.updateUser.calledWith(
 					@stubbedUser._id,
 					@stubbedUser._id,
-					$push: { emails: { email: @newEmail, createdAt: sinon.match.date } }
+					$push: { emails: { email: @newEmail, createdAt: sinon.match.date, hostname: hostname } }
 				).should.equal true
 				).should.equal true
 				done()
 				done()