All files / app/routes/api/group/group-id/car/get get-cars-controller.unit.spec.ts

100% Statements 32/32
100% Branches 0/0
100% Functions 7/7
100% Lines 32/32

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 981x 1x 1x 1x 1x     1x           1x 3x     3x   3x     1x 3x     1x 1x 1x           1x     1x 1x 1x     1x 1x                 1x     1x 1x 1x       1x   1x                 1x                       1x   1x     1x         1x      
import {expect} from 'chai';
import sinon, {assert, match} from 'sinon';
import {getCarsController} from './get-cars-controller';
import {BadRequestError} from '../../../../../../errors';
import {CarService} from '../../../../../../models';
 
/* eslint-disable @typescript-eslint/no-explicit-any */
describe('getCarsController', function() {
  let req: any;
  let res: any;
  let next: any;
  let carServiceFindByGroupStub: sinon.SinonStub;
 
  beforeEach(function() {
    res = {
      send: sinon.stub(),
    };
    next = sinon.stub();
 
    carServiceFindByGroupStub = sinon.stub(CarService, 'findByGroup');
  });
 
  afterEach(function() {
    sinon.restore();
  });
 
  describe('throws BadRequestError', function() {
    it('if user is missing on request', async function() {
      req = {
        params: {
          groupId: 2,
        },
      };
 
      await expect(getCarsController(req, res, next)).to
          .eventually.be.rejectedWith(BadRequestError);
 
      assert.notCalled(carServiceFindByGroupStub);
      assert.notCalled(res.send);
      assert.notCalled(next);
    });
 
    it('if groupId is not parsable to a number', async function() {
      req = {
        params: {
          groupId: 'test',
        },
        user: {
          id: 1,
        },
      };
 
      await expect(getCarsController(req, res, next)).to
          .eventually.be.rejectedWith(BadRequestError);
 
      assert.notCalled(carServiceFindByGroupStub);
      assert.notCalled(res.send);
      assert.notCalled(next);
    });
  });
 
  it('calls CarService.findByGroup and ' +
  'sends the return value', async function() {
    req = {
      params: {
        groupId: 2,
      },
      user: {
        id: 31,
      },
    };
 
    const cars = [
      {
        groupId: 2,
        id: 1,
        name: 'CAR-1',
      },
      {
        groupId: 2,
        id: 1,
        name: 'CAR-2',
      },
    ];
    carServiceFindByGroupStub.resolves(cars);
 
    await expect(getCarsController(req, res, next)).to
        .eventually.be.fulfilled;
 
    assert.calledOnceWithExactly(
        carServiceFindByGroupStub,
        req.user,
        req.params.groupId,
    );
    assert.calledOnceWithExactly(res.send, match({cars}));
  });
});