| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- const Path = require('path')
- const SandboxedModule = require('sandboxed-module')
- const sinon = require('sinon')
- const MODULE_PATH = Path.join(
- __dirname,
- '../../../app/src/UserActivateController.js'
- )
- const VIEW_PATH = Path.join(__dirname, '../../../app/views/user/activate')
- describe('UserActivateController', function () {
- beforeEach(function () {
- this.user = {
- _id: (this.user_id = 'kwjewkl'),
- features: {},
- email: 'joe@example.com',
- }
- this.UserGetter = { getUser: sinon.stub() }
- this.UserRegistrationHandler = {}
- this.ErrorController = { notFound: sinon.stub() }
- this.UserActivateController = SandboxedModule.require(MODULE_PATH, {
- requires: {
- '../../../../app/src/Features/User/UserGetter': this.UserGetter,
- '../../../../app/src/Features/User/UserRegistrationHandler':
- this.UserRegistrationHandler,
- '../../../../app/src/Features/Errors/ErrorController':
- this.ErrorController,
- },
- })
- this.req = {
- body: {},
- query: {},
- session: {
- user: this.user,
- },
- }
- this.res = {
- json: sinon.stub(),
- }
- })
- describe('activateAccountPage', function () {
- beforeEach(function () {
- this.UserGetter.getUser = sinon.stub().callsArgWith(2, null, this.user)
- this.req.query.user_id = this.user_id
- this.req.query.token = this.token = 'mock-token-123'
- })
- it('should 404 without a user_id', function (done) {
- delete this.req.query.user_id
- this.ErrorController.notFound = () => done()
- this.UserActivateController.activateAccountPage(this.req, this.res)
- })
- it('should 404 without a token', function (done) {
- delete this.req.query.token
- this.ErrorController.notFound = () => done()
- this.UserActivateController.activateAccountPage(this.req, this.res)
- })
- it('should 404 without a valid user_id', function (done) {
- this.UserGetter.getUser = sinon.stub().callsArgWith(2, null, null)
- this.ErrorController.notFound = () => done()
- this.UserActivateController.activateAccountPage(this.req, this.res)
- })
- it('should 403 for complex user_id', function (done) {
- this.ErrorController.forbidden = () => done()
- this.req.query.user_id = { first_name: 'X' }
- this.UserActivateController.activateAccountPage(this.req, this.res)
- })
- it('should redirect activated users to login', function (done) {
- this.user.loginCount = 1
- this.res.redirect = url => {
- this.UserGetter.getUser.calledWith(this.user_id).should.equal(true)
- url.should.equal('/login')
- return done()
- }
- this.UserActivateController.activateAccountPage(this.req, this.res)
- })
- it('render the activation page if the user has not logged in before', function (done) {
- this.user.loginCount = 0
- this.res.render = (page, opts) => {
- page.should.equal(VIEW_PATH)
- opts.email.should.equal(this.user.email)
- opts.token.should.equal(this.token)
- return done()
- }
- this.UserActivateController.activateAccountPage(this.req, this.res)
- })
- })
- describe('register', function () {
- beforeEach(function () {
- this.UserRegistrationHandler.registerNewUserAndSendActivationEmail = sinon
- .stub()
- .callsArgWith(1, null, this.user, (this.url = 'mock/url'))
- this.req.body.email = this.user.email = this.email = 'email@example.com'
- this.UserActivateController.register(this.req, this.res)
- })
- it('should register the user and send them an email', function () {
- sinon.assert.calledWith(
- this.UserRegistrationHandler.registerNewUserAndSendActivationEmail,
- this.email
- )
- })
- it('should return the user and activation url', function () {
- this.res.json
- .calledWith({
- email: this.email,
- setNewPasswordUrl: this.url,
- })
- .should.equal(true)
- })
- })
- })
|