sannimichaelse/Parcel-Delivery

View on GitHub
server/tests/controllers/dummy.test.js

Summary

Maintainability
A
0 mins
Test Coverage
import chai from 'chai';
import chaiHttp from 'chai-http';
import server from '../../index';

chai.use(chaiHttp);
chai.should();

describe('UNIT TESTS FOR DUMMY DATA CONTROLLERS', () => {
  /*
   * Test the /GET route
   */
  describe('/GET REQUEST', () => {
    it('it should GET all parcels', (done) => {
      chai
        .request(server)
        .get('/api/v1/parcel')
        .end((err, res) => {
          res.should.have.status(200);
          res.body.should.have
            .property('message')
            .to.equals('Successfully fetched all parcels');
          res.body.should.have.property('status').to.equals(200);
          res.body.should.have.property('data').to.be.an('array');
          done();
        });
    });

    it('it should GET parcel by parcelid specified', (done) => {
      chai
        .request(server)
        .get('/api/v1/parcel/2222')
        .end((err, res) => {
          res.should.have.status(200);
          res.body.should.have
            .property('message')
            .to.equals('Parcel found');
          res.body.should.have.property('status').to.equals(200);
          res.body.should.have.property('data').to.be.an('object');
          done();
        });
    });

    it('it should not GET parcel id is not found', (done) => {
      const parcelid = 7;
      chai
        .request(server)
        .get(`/api/v1/parcel/${parcelid}`)
        .end((err, res) => {
          res.should.have.status(400);
          res.body.should.be.deep.equal({
            status: 400,
            message: 'Parcel not found',
          });
          done();
        });
    });

    it('it should GET all parcels created by a user', (done) => {
      const userid = 3;
      chai
        .request(server)
        .get(`/api/v1/users/${userid}/parcel`)
        .end((err, res) => {
          res.should.have.status(200);
          res.body.should.have
            .property('message')
            .to.equals('Parcel found');
          res.body.should.have.property('status').to.equals(200);
          res.body.should.have.property('data').to.be.an('array');
          done();
        });
    });

    it('it should fail while trying to get all parcels for an unathorized user', (done) => {
      const userid = 4;
      chai
        .request(server)
        .get(`/api/v1/users/${userid}/parcel`)
        .end((err, res) => {
          res.should.have.status(400);
          res.body.should.have
            .property('message')
            .to.equals('Parcel with userID not found');
          res.body.should.have.property('status').to.equals(400);

          done();
        });
    });
  });

  /*
* Test the /POST route
*/
  describe('/POST REQUEST', () => {
    it('it should make a post request if all fields are not empty ', (done) => {
      chai
        .request(server)
        .post('/api/v1/parcel/')
        .send({
          uuid: 'mk9',
          username: 'sullivan',
          userId: '5',
          parcelId: '443215',
          parcelWeight: '122kg',
          parcelName: 'Tecno Camon C9',
          parcelDestination: 'Onitsha',
          parcelLocation: 'Lagos',
          parcelStatus: 'progress',
        })
        .end((err, res) => {
          res.should.have.status(201);
          res.body.should.be.deep.equal({
            status: 201,
            message: 'New parcel created successfully',
          });
          done();
        });
    });

    it('it should not make a post request if some fields are empty ', (done) => {
      const body = {
        uuid: '',
        username: 'sullivan',
        userId: '5',
        parcelId: '443215',
        parcelWeight: '122kg',
        parcelName: 'Tecno Camon C9',
        parcelDestination: 'Onitsha',
        parcelLocation: 'Lagos',
        parcelStatus: 'progress',
      };

      chai
        .request(server)
        .post('/api/v1/parcel/')
        .send(body)
        .end((err, res) => {
          res.should.have.status(400);
          res.body.should.be.deep.equal({
            status: 400,
            message: 'uuid is not allowed to be empty',
          });
          done();
        });
    });

    it('it should not make a post request if a field is not included', (done) => {
      const body = {
        username: 'sullivan',
        userId: '5',
        parcelId: '443215',
        parcelWeight: '122kg',
        parcelName: 'Tecno Camon C9',
        parcelDestination: 'Onitsha',
        parcelLocation: 'Lagos',
        parcelStatus: 'progress',
      };
      chai
        .request(server)
        .post('/api/v1/parcel/')
        .send(body)
        .end((err, res) => {
          res.should.have.status(400);
          res.body.should.be.deep.equal({
            status: 400,
            message: 'uuid is required',
          });
          done();
        });
    });

    it('it should throw an error when you try to add duplicate data ', (done) => {
      const data = {
        uuid: 'mk9',
        username: 'sullivan',
        userId: '5',
        parcelId: '443215',
        parcelWeight: '122kg',
        parcelName: 'Tecno Camon C9',
        parcelDestination: 'Onitsha',
        parcelLocation: 'Lagos',
        parcelStatus: 'progress',
      };

      chai
        .request(server)
        .post('/api/v1/parcel/')
        .send(data)
        .end((err, res) => {
          res.should.have.status(400);
          res.body.should.be.deep.equal({
            status: 400,
            message:
              'Parcel Already Exists. Make sure uuid and parcelId are unique',
          });
          done();
        });
    });
  });

  /*
* Test the /UPDATE route
*/
  describe('/CANCEL REQUEST', () => {
    it('it should cancel request by parcel id', (done) => {
      const parcelid = 2222;
      chai
        .request(server)
        .put(`/api/v1/parcel/${parcelid}/cancel`)
        .end((err, res) => {
          res.should.have.status(200);
          res.body.should.have
            .property('message')
            .to.equals('Parcel Order Canceled');
          res.body.should.have.property('status').to.equals(200);
          res.body.should.have.property('data').to.be.an('object');
          done();
        });
    });
  });
});