InstitutionsControllerTests.coffee 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. should = require('chai').should()
  2. SandboxedModule = require('sandboxed-module')
  3. assert = require('assert')
  4. path = require('path')
  5. sinon = require('sinon')
  6. modulePath = path.join __dirname, "../../../../app/js/Features/Institutions/InstitutionsController"
  7. expect = require("chai").expect
  8. describe "InstitutionsController", ->
  9. beforeEach ->
  10. @logger = err: sinon.stub(), log: ->
  11. @host = "mit.edu".split('').reverse().join('')
  12. @stubbedUser1 =
  13. _id: "3131231"
  14. name:"bob"
  15. email:"hello@world.com"
  16. emails: [
  17. {"email":"stubb1@mit.edu","reversedHostname":@host},
  18. {"email":"test@test.com","reversedHostname":"test.com"},
  19. {"email":"another@mit.edu","reversedHostname":@host}
  20. ]
  21. @stubbedUser2 =
  22. _id: "3131232"
  23. name:"test"
  24. email:"hello2@world.com"
  25. emails: [
  26. {"email":"subb2@mit.edu","reversedHostname":@host}
  27. ]
  28. @getUsersByHostname = sinon.stub().callsArgWith(2, null, [ @stubbedUser1, @stubbedUser2 ])
  29. @addAffiliation = sinon.stub().callsArgWith(3, null)
  30. @InstitutionsController = SandboxedModule.require modulePath, requires:
  31. 'logger-sharelatex': @logger
  32. '../User/UserGetter':
  33. getUsersByHostname: @getUsersByHostname
  34. '../Institutions/InstitutionsAPI':
  35. addAffiliation: @addAffiliation
  36. '../../models/Institution': Institution: @Institution =
  37. findOneAndUpdate: sinon.stub().yields()
  38. @req =
  39. body: hostname: 'mit.edu'
  40. @res =
  41. send: sinon.stub()
  42. json: sinon.stub()
  43. @next = sinon.stub()
  44. describe 'confirmDomain', ->
  45. it 'should add affiliations for matching users', (done)->
  46. @res.sendStatus = (code) =>
  47. @getUsersByHostname.calledOnce.should.equal true
  48. @addAffiliation.calledThrice.should.equal true
  49. @addAffiliation.calledWith(@stubbedUser1._id, @stubbedUser1.emails[0].email).should.equal true
  50. @addAffiliation.calledWith(@stubbedUser1._id, @stubbedUser1.emails[2].email).should.equal true
  51. done()
  52. @InstitutionsController.confirmDomain @req, @res, @next
  53. describe 'create institution', ->
  54. it 'should create new institution', (done)->
  55. @req.body.institution_id = 123
  56. expectedData = v1Id: 123
  57. @res.sendStatus = (code) =>
  58. sinon.assert.calledWith(
  59. @Institution.findOneAndUpdate,
  60. expectedData,
  61. expectedData,
  62. { upsert: true }
  63. )
  64. done()
  65. @InstitutionsController.confirmDomain @req, @res, @next