From 76285a15544cbba83db9474e3b1d228029526388 Mon Sep 17 00:00:00 2001 From: Shane Kilkelly Date: Mon, 15 May 2017 10:07:22 +0100 Subject: [PATCH] Start testing SudoModeController --- .../SudoMode/SudoModeController.coffee | 1 - .../SudoMode/SudoModeControllerTests.coffee | 54 ++++++++++++++++++- 2 files changed, 52 insertions(+), 3 deletions(-) diff --git a/services/web/app/coffee/Features/SudoMode/SudoModeController.coffee b/services/web/app/coffee/Features/SudoMode/SudoModeController.coffee index 1e5a9558df..8938088cd1 100644 --- a/services/web/app/coffee/Features/SudoMode/SudoModeController.coffee +++ b/services/web/app/coffee/Features/SudoMode/SudoModeController.coffee @@ -1,4 +1,3 @@ -Settings = require "settings-sharelatex" logger = require 'logger-sharelatex' SudoModeHandler = require './SudoModeHandler' AuthenticationController = require '../Authentication/AuthenticationController' diff --git a/services/web/test/UnitTests/coffee/SudoMode/SudoModeControllerTests.coffee b/services/web/test/UnitTests/coffee/SudoMode/SudoModeControllerTests.coffee index 09a9e3cf32..5f7683cab3 100644 --- a/services/web/test/UnitTests/coffee/SudoMode/SudoModeControllerTests.coffee +++ b/services/web/test/UnitTests/coffee/SudoMode/SudoModeControllerTests.coffee @@ -1,6 +1,7 @@ SandboxedModule = require('sandboxed-module') sinon = require 'sinon' should = require("chai").should() +expect = require('chai').expect MockRequest = require "../helpers/MockRequest" MockResponse = require "../helpers/MockResponse" modulePath = '../../../../app/js/Features/SudoMode/SudoModeController' @@ -15,6 +16,55 @@ describe 'SudoModeController', -> @SudoModeHandler = isSudoModeActive: sinon.stub() activateSudoMode: sinon.stub() + @AuthenticationController = + getLoggedInUserId: sinon.stub().returns(@user._id) + @AuthenticationManager = + authenticate: sinon.stub() + @UserGetter = + getUser: sinon.stub() + @SudoModeController = SandboxedModule.require modulePath, requires: + 'logger-sharelatex': {log: sinon.stub(), err: sinon.stub()} + './SudoModeHandler': @SudoModeHandler + '../Authentication/AuthenticationController': @AuthenticationController + '../Authentication/AuthenticationManager': @AuthenticationManager + '../../infrastructure/Mongoose': {mongo: {ObjectId: () -> 'some_object_id'}} + '../User/UserGetter': @UserGetter - # describe '', -> - # beforeEach -> + describe 'sudoModePrompt', -> + beforeEach -> + @SudoModeHandler.isSudoModeActive = sinon.stub().callsArgWith(1, null, false) + @req = {} + @res = {redirect: sinon.stub(), render: sinon.stub()} + @next = sinon.stub() + + it 'should get the logged in user id', -> + @SudoModeController.sudoModePrompt(@req, @res, @next) + @AuthenticationController.getLoggedInUserId.callCount.should.equal 1 + @AuthenticationController.getLoggedInUserId.calledWith(@req).should.equal true + + it 'should check if sudo-mode is active', -> + @SudoModeController.sudoModePrompt(@req, @res, @next) + @SudoModeHandler.isSudoModeActive.callCount.should.equal 1 + @SudoModeHandler.isSudoModeActive.calledWith(@user._id).should.equal true + + it 'should redirect when sudo-mode is active', -> + @SudoModeHandler.isSudoModeActive = sinon.stub().callsArgWith(1, null, true) + @SudoModeController.sudoModePrompt(@req, @res, @next) + @res.redirect.callCount.should.equal 1 + @res.redirect.calledWith('/project').should.equal true + + it 'should render the sudo_mode_prompt page when sudo mode is not active', -> + @SudoModeHandler.isSudoModeActive = sinon.stub().callsArgWith(1, null, false) + @SudoModeController.sudoModePrompt(@req, @res, @next) + @res.render.callCount.should.equal 1 + @res.render.calledWith('sudo_mode/sudo_mode_prompt').should.equal true + + describe 'when isSudoModeActive produces an error', -> + beforeEach -> + @SudoModeHandler.isSudoModeActive = sinon.stub().callsArgWith(1, new Error('woops')) + @next = sinon.stub() + + it 'should call next with an error', -> + @SudoModeController.sudoModePrompt(@req, @res, @next) + @next.callCount.should.equal 1 + expect(@next.lastCall.args[0]).to.be.instanceof Error