All files / app/routes/api/group/group-id/update update-group-controller.unit.spec.ts

100% Statements 37/37
100% Branches 0/0
100% Functions 8/8
100% Lines 37/37

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 114 115 116  1x 1x 1x 1x     1x   1x             1x 4x 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      
/* eslint-disable @typescript-eslint/no-explicit-any */
import sinon, {assert, match} from 'sinon';
import {GroupService} from '../../../../../models';
import {expect} from 'chai';
import {
  BadRequestError,
} from '../../../../../errors';
import {updateGroupController} from './index';
 
describe('updateGroupController', function() {
  let req: any;
  let res: any;
  let next: any;
  let updateGroup: sinon.SinonStub;
  let user: Express.User;
 
  beforeEach(function() {
    updateGroup = sinon.stub(GroupService, 'update');
    res = {
      send: sinon.stub(),
    };
    next = sinon.stub();
    user = {
      id: 51,
    } as Express.User;
  });
 
  afterEach(function() {
    sinon.restore();
  });
 
  describe('throws BadRequestError if', function() {
    it('user is missing on request', async function() {
      const groupId = 15;
      req = {
        body: {
          name: 'NEW_NAME',
        },
        params: {
          groupId,
        },
      };
 
      await expect(updateGroupController(req, res, next))
          .to.eventually.be.rejectedWith(BadRequestError);
 
      assert.notCalled(updateGroup);
    });
 
    it('groupId is missing on request', async function() {
      req = {
        user,
        body: {
          name: 'NEW_NAME',
        },
        params: {
        },
      };
 
      await expect(updateGroupController(req, res, next))
          .to.eventually.be.rejectedWith(BadRequestError);
 
      assert.notCalled(updateGroup);
    });
 
    it('groupId on request is not numeric', async function() {
      const groupId = 'NOT_NUMERIC';
      req = {
        user,
        body: {
          name: 'NEW_NAME',
        },
        params: {
          groupId,
        },
      };
 
      await expect(updateGroupController(req, res, next))
          .to.eventually.be.rejectedWith(BadRequestError);
 
      assert.notCalled(updateGroup);
      assert.notCalled(res.send);
    });
  });
 
  it('calls GroupService.update with correct values and ' +
    'response with updated group', async function() {
    const groupId = 51;
    req = {
      user,
      body: {
        name: 'NEW_NAME',
      },
      params: {
        groupId,
      },
    };
    const group = {
      id: groupId,
      name: req.body.name,
    };
    updateGroup.resolves(group);
 
    await expect(updateGroupController(req, res, next))
        .to.eventually.be.fulfilled;
 
    assert.calledOnceWithExactly(
        updateGroup,
        user,
        groupId,
        match({name: req.body.name}),
    );
    assert.calledOnceWithExactly(res.send, group);
  });
});