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

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

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  1x 1x 1x 1x 1x   1x           1x 3x 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 1x      
/* eslint-disable @typescript-eslint/no-explicit-any */
import {expect} from 'chai';
import sinon, {assert, match} from 'sinon';
import {BadRequestError} from '../../../../../../errors';
import {CarService} from '../../../../../../models';
import {createCarController} from './create-car-controller';
 
describe('createCarController', function() {
  let req: any;
  let res: any;
  let next: any;
  let carServiceCreateStub: sinon.SinonStub;
 
  beforeEach(function() {
    req = {};
    res = {
      status: sinon.stub().returnsThis(),
      send: sinon.stub().returnsThis(),
    };
    next = sinon.stub();
    carServiceCreateStub = sinon.stub(CarService, 'create');
  });
 
  afterEach(function() {
    sinon.restore();
  });
 
  describe('throws BadRequestError', function() {
    it('if currentUser is not an object', async function() {
      req = {
        params: {
          groupId: '1',
        },
      };
 
      await expect(createCarController(req, res, next))
          .to.eventually.be.rejectedWith(BadRequestError);
 
      assert.notCalled(res.status);
      assert.notCalled(res.send);
      assert.notCalled(carServiceCreateStub);
    });
 
    it('if groupId is parsable to a number', async function() {
      req = {
        params: {
          groupId: 'test',
        },
        user: {
          id: 1,
        },
      };
 
      await expect(createCarController(req, res, next))
          .to.eventually.be.rejectedWith(BadRequestError);
 
      assert.notCalled(res.status);
      assert.notCalled(res.send);
      assert.notCalled(carServiceCreateStub);
    });
  });
 
  it('calls CarService.create with the correct arguments', async function() {
    req = {
      params: {
        groupId: 1,
      },
      user: {
        id: 1,
      },
      body: {
        name: 'CAR',
        color: 'Red',
      },
    };
 
    const fakeCar = {
      groupId: req.params.groupId,
      carId: 1,
      name: req.body.name,
      color: req.body.color,
    };
 
    carServiceCreateStub.resolves(fakeCar as any);
 
    await expect(createCarController(req, res, next))
        .to.eventually.be.fulfilled;
 
    assert.calledOnceWithExactly(
        carServiceCreateStub,
        req.user,
        req.params.groupId,
        req.body.name,
        req.body.color,
        match({
          withDriverData: false,
        }),
    );
    assert.calledOnceWithExactly(res.status, 201);
    assert.calledOnceWithExactly(res.send, fakeCar);
  });
});