UserPagesControllerTests.coffee 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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. @dropboxStatus = {}
  20. @DropboxHandler =
  21. getUserRegistrationStatus : sinon.stub().callsArgWith(1, null, @dropboxStatus)
  22. @ErrorController =
  23. notFound: sinon.stub()
  24. @UserPagesController = SandboxedModule.require modulePath, requires:
  25. "settings-sharelatex":@settings
  26. "logger-sharelatex": log:->
  27. "./UserLocator": @UserLocator
  28. "./UserGetter": @UserGetter
  29. "../Errors/ErrorController": @ErrorController
  30. '../Dropbox/DropboxHandler': @DropboxHandler
  31. @req =
  32. query:{}
  33. session:
  34. user:@user
  35. @res = {}
  36. describe "registerPage", ->
  37. it "should render the register page", (done)->
  38. @res.render = (page)=>
  39. page.should.equal "user/register"
  40. done()
  41. @UserPagesController.registerPage @req, @res
  42. it "should set the redirect", (done)->
  43. redirect = "/go/here/please"
  44. @req.query.redir = redirect
  45. @res.render = (page, opts)=>
  46. opts.redir.should.equal redirect
  47. done()
  48. @UserPagesController.registerPage @req, @res
  49. it "should set sharedProjectData", (done)->
  50. @req.query.project_name = "myProject"
  51. @req.query.user_first_name = "user_first_name_here"
  52. @res.render = (page, opts)=>
  53. opts.sharedProjectData.project_name.should.equal "myProject"
  54. opts.sharedProjectData.user_first_name.should.equal "user_first_name_here"
  55. done()
  56. @UserPagesController.registerPage @req, @res
  57. it "should set newTemplateData", (done)->
  58. @req.session.templateData =
  59. templateName : "templateName"
  60. @res.render = (page, opts)=>
  61. opts.newTemplateData.templateName.should.equal "templateName"
  62. done()
  63. @UserPagesController.registerPage @req, @res
  64. it "should not set the newTemplateData if there is nothing in the session", (done)->
  65. @res.render = (page, opts)=>
  66. assert.equal opts.newTemplateData.templateName, undefined
  67. done()
  68. @UserPagesController.registerPage @req, @res
  69. describe "loginForm", ->
  70. it "should render the login page", (done)->
  71. @res.render = (page)=>
  72. page.should.equal "user/login"
  73. done()
  74. @UserPagesController.loginPage @req, @res
  75. it "should set the redirect", (done)->
  76. redirect = "/go/here/please"
  77. @req.query.redir = redirect
  78. @res.render = (page, opts)=>
  79. opts.redir.should.equal redirect
  80. done()
  81. @UserPagesController.loginPage @req, @res
  82. describe "settingsPage", ->
  83. it "should render user/settings", (done)->
  84. @res.render = (page)->
  85. page.should.equal "user/settings"
  86. done()
  87. @UserPagesController.settingsPage @req, @res
  88. it "should send user", (done)->
  89. @res.render = (page, opts)=>
  90. opts.user.should.equal @user
  91. done()
  92. @UserPagesController.settingsPage @req, @res
  93. describe "activateAccountPage", ->
  94. beforeEach ->
  95. @req.query.user_id = @user_id
  96. @req.query.token = @token = "mock-token-123"
  97. it "should 404 without a user_id", (done) ->
  98. delete @req.query.user_id
  99. @ErrorController.notFound = () ->
  100. done()
  101. @UserPagesController.activateAccountPage @req, @res
  102. it "should 404 without a token", (done) ->
  103. delete @req.query.token
  104. @ErrorController.notFound = () ->
  105. done()
  106. @UserPagesController.activateAccountPage @req, @res
  107. it "should 404 without a valid user_id", (done) ->
  108. @UserGetter.getUser = sinon.stub().callsArgWith(2, null, null)
  109. @ErrorController.notFound = () ->
  110. done()
  111. @UserPagesController.activateAccountPage @req, @res
  112. it "should redirect activated users to login", (done) ->
  113. @user.loginCount = 1
  114. @res.redirect = (url) =>
  115. @UserGetter.getUser.calledWith(@user_id).should.equal true
  116. url.should.equal "/login?email=#{encodeURIComponent(@user.email)}"
  117. done()
  118. @UserPagesController.activateAccountPage @req, @res
  119. it "render the activation page if the user has not logged in before", (done) ->
  120. @user.loginCount = 0
  121. @res.render = (page, opts) =>
  122. page.should.equal "user/activate"
  123. opts.email.should.equal @user.email
  124. opts.token.should.equal @token
  125. done()
  126. @UserPagesController.activateAccountPage @req, @res