All files / app/routes/auth/token token-controller.unit.spec.ts

100% Statements 54/54
100% Branches 0/0
100% Functions 12/12
100% Lines 53/53

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113  1x 1x 1x 1x 1x 1x   1x   1x         1x 4x 4x 4x     1x 4x     1x   1x       1x   1x     1x 1x     1x     1x       1x 1x 1x 1x 1x     1x     1x   1x     1x   1x         1x       1x 1x 1x 1x 1x     1x     1x 1x     1x   1x   1x       1x         1x 1x 1x 1x 1x 1x 1x     1x      
/* eslint-disable @typescript-eslint/no-explicit-any */
import {createSandbox, match} from 'sinon';
import tokenController from './token-controller';
import {expect} from 'chai';
import {UnauthorizedError} from '../../../errors';
import {User} from '../../../models';
import Bluebird from 'bluebird';
 
const sandbox = createSandbox();
 
describe('TokenController', function() {
  let req: any;
  let res: any;
  let next: any;
 
  beforeEach(function() {
    req = sandbox.stub();
    res = sandbox.stub();
    next = sandbox.stub();
  });
 
  afterEach(function() {
    sandbox.restore();
  });
 
  it('throws Unauthorized error if ' +
      'req.user.username doesn\'t exist', function() {
    const jwt = {
      no: 'user',
    };
 
    req.user = jwt;
 
    expect(() => tokenController(req, res, next)).to.throw(UnauthorizedError);
  });
 
  it('throws Unauthorized error if user doesn\'t exist', function(done) {
    const jwt = {
      username: 'test',
    };
    req.user = jwt;
 
    // Mock database
    const findStub = sandbox.stub(User, 'findByUsername')
        .usingPromise(Bluebird)
        .resolves(null);
 
    next.callsFake(() => {
      sandbox.assert.calledOnce(findStub);
      sandbox.assert.calledWith(findStub, jwt.username);
      sandbox.assert.calledWith(next, match.instanceOf(UnauthorizedError));
      done();
    });
 
    tokenController(req, res, next);
  });
 
  it('throws Unauthorized error if user exists ' +
      'but was already deleted', function(done) {
    const jwt = {
      username: 'test',
    };
    req.user = jwt;
 
    const user = {
      deletedAt: new Date(),
    };
 
    // Mock database
    const findStub = sandbox.stub(User, 'findByUsername')
        .usingPromise(Bluebird)
        .resolves(user as any);
 
    next.callsFake(() => {
      sandbox.assert.calledOnce(findStub);
      sandbox.assert.calledWith(findStub, jwt.username);
      sandbox.assert.calledWith(next, match.instanceOf(UnauthorizedError));
      done();
    });
 
    tokenController(req, res, next);
  });
 
  it('responds with 200 if user exists', function(done) {
    const jwt = {
      username: 'test',
    };
    req.user = jwt;
 
    const user = {
      deletedAt: null,
      get: () => user,
    };
 
    // Mock database
    const findStub = sandbox.stub(User, 'findByUsername')
        .usingPromise(Bluebird)
        .resolves(user as any);
 
    // Mock status
    res.status = sandbox.stub().returns(res);
    res.send = sandbox.stub().callsFake(() => {
      sandbox.assert.calledOnce(findStub);
      sandbox.assert.calledWith(findStub, jwt.username);
      sandbox.assert.calledOnce(res.status);
      sandbox.assert.calledWith(res.status, 200);
      done();
    });
 
    tokenController(req, res, next);
  });
});