UserPagesControllerTests.coffee 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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/User/UserPagesController"
  7. expect = require("chai").expect
  8. describe "UserPagesController", ->
  9. beforeEach ->
  10. @settings = {}
  11. @user =
  12. _id: @user_id = "kwjewkl"
  13. features:{}
  14. email: "joe@example.com"
  15. @UserLocator =
  16. findById: sinon.stub().callsArgWith(1, null, @user)
  17. @UserGetter =
  18. getUser: sinon.stub().callsArgWith(2, null, @user)
  19. @UserSessionsManager =
  20. getAllUserSessions: sinon.stub()
  21. @dropboxStatus = {}
  22. @DropboxHandler =
  23. getUserRegistrationStatus : sinon.stub().callsArgWith(1, null, @dropboxStatus)
  24. @ErrorController =
  25. notFound: sinon.stub()
  26. @AuthenticationController =
  27. getLoggedInUserId: sinon.stub().returns(@user._id)
  28. getSessionUser: sinon.stub().returns(@user)
  29. @UserPagesController = SandboxedModule.require modulePath, requires:
  30. "settings-sharelatex":@settings
  31. "logger-sharelatex":
  32. log:->
  33. err:->
  34. "./UserLocator": @UserLocator
  35. "./UserGetter": @UserGetter
  36. "./UserSessionsManager": @UserSessionsManager
  37. "../Errors/ErrorController": @ErrorController
  38. '../Dropbox/DropboxHandler': @DropboxHandler
  39. '../Authentication/AuthenticationController': @AuthenticationController
  40. @req =
  41. query:{}
  42. session:
  43. user:@user
  44. @res = {}
  45. describe "registerPage", ->
  46. it "should render the register page", (done)->
  47. @res.render = (page)=>
  48. page.should.equal "user/register"
  49. done()
  50. @UserPagesController.registerPage @req, @res
  51. it "should set the redirect", (done)->
  52. redirect = "/go/here/please"
  53. @req.query.redir = redirect
  54. @res.render = (page, opts)=>
  55. opts.redir.should.equal redirect
  56. done()
  57. @UserPagesController.registerPage @req, @res
  58. it "should set sharedProjectData", (done)->
  59. @req.query.project_name = "myProject"
  60. @req.query.user_first_name = "user_first_name_here"
  61. @res.render = (page, opts)=>
  62. opts.sharedProjectData.project_name.should.equal "myProject"
  63. opts.sharedProjectData.user_first_name.should.equal "user_first_name_here"
  64. done()
  65. @UserPagesController.registerPage @req, @res
  66. it "should set newTemplateData", (done)->
  67. @req.session.templateData =
  68. templateName : "templateName"
  69. @res.render = (page, opts)=>
  70. opts.newTemplateData.templateName.should.equal "templateName"
  71. done()
  72. @UserPagesController.registerPage @req, @res
  73. it "should not set the newTemplateData if there is nothing in the session", (done)->
  74. @res.render = (page, opts)=>
  75. assert.equal opts.newTemplateData.templateName, undefined
  76. done()
  77. @UserPagesController.registerPage @req, @res
  78. describe "loginForm", ->
  79. it "should render the login page", (done)->
  80. @res.render = (page)=>
  81. page.should.equal "user/login"
  82. done()
  83. @UserPagesController.loginPage @req, @res
  84. it "should set the redirect", (done)->
  85. redirect = "/go/here/please"
  86. @req.query.redir = redirect
  87. @res.render = (page, opts)=>
  88. opts.redir.should.equal redirect
  89. done()
  90. @UserPagesController.loginPage @req, @res
  91. describe 'sessionsPage', ->
  92. beforeEach ->
  93. @UserSessionsManager.getAllUserSessions.callsArgWith(2, null, [])
  94. it 'should render user/sessions', (done) ->
  95. @res.render = (page)->
  96. page.should.equal "user/sessions"
  97. done()
  98. @UserPagesController.sessionsPage @req, @res
  99. it 'should have called getAllUserSessions', (done) ->
  100. @res.render = (page) =>
  101. @UserSessionsManager.getAllUserSessions.callCount.should.equal 1
  102. done()
  103. @UserPagesController.sessionsPage @req, @res
  104. describe 'when getAllUserSessions produces an error', ->
  105. beforeEach ->
  106. @UserSessionsManager.getAllUserSessions.callsArgWith(2, new Error('woops'))
  107. it 'should call next with an error', (done) ->
  108. @next = (err) =>
  109. assert(err != null)
  110. assert(err instanceof Error)
  111. done()
  112. @UserPagesController.sessionsPage @req, @res, @next
  113. describe "settingsPage", ->
  114. it "should render user/settings", (done)->
  115. @res.render = (page)->
  116. page.should.equal "user/settings"
  117. done()
  118. @UserPagesController.settingsPage @req, @res
  119. it "should send user", (done)->
  120. @res.render = (page, opts)=>
  121. opts.user.should.equal @user
  122. done()
  123. @UserPagesController.settingsPage @req, @res
  124. describe "activateAccountPage", ->
  125. beforeEach ->
  126. @req.query.user_id = @user_id
  127. @req.query.token = @token = "mock-token-123"
  128. it "should 404 without a user_id", (done) ->
  129. delete @req.query.user_id
  130. @ErrorController.notFound = () ->
  131. done()
  132. @UserPagesController.activateAccountPage @req, @res
  133. it "should 404 without a token", (done) ->
  134. delete @req.query.token
  135. @ErrorController.notFound = () ->
  136. done()
  137. @UserPagesController.activateAccountPage @req, @res
  138. it "should 404 without a valid user_id", (done) ->
  139. @UserGetter.getUser = sinon.stub().callsArgWith(2, null, null)
  140. @ErrorController.notFound = () ->
  141. done()
  142. @UserPagesController.activateAccountPage @req, @res
  143. it "should redirect activated users to login", (done) ->
  144. @user.loginCount = 1
  145. @res.redirect = (url) =>
  146. @UserGetter.getUser.calledWith(@user_id).should.equal true
  147. url.should.equal "/login?email=#{encodeURIComponent(@user.email)}"
  148. done()
  149. @UserPagesController.activateAccountPage @req, @res
  150. it "render the activation page if the user has not logged in before", (done) ->
  151. @user.loginCount = 0
  152. @res.render = (page, opts) =>
  153. page.should.equal "user/activate"
  154. opts.email.should.equal @user.email
  155. opts.token.should.equal @token
  156. done()
  157. @UserPagesController.activateAccountPage @req, @res