Skip to content

Commit

Permalink
Merge pull request #155 from kk5190/Add-Vehicle-Endpoint
Browse files Browse the repository at this point in the history
feat: Add vehicle endpoint
  • Loading branch information
ageddesi committed Oct 5, 2022
2 parents 8a1f9a3 + c8d35a8 commit 268fe39
Show file tree
Hide file tree
Showing 7 changed files with 139 additions and 2 deletions.
2 changes: 1 addition & 1 deletion app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ require('./modules/time_zones/api/timezones-routes.ts')(app); // Timezones
require('./modules/phone-numbers/api/phone-numbers-routes')(app); // Phone numbers
require('./modules/quotes/api/quotes-routes')(app); // Quotes
require('./modules/ip/api/ip-routes')(app); // ip and mac address

require('./modules/vehicles/api/vehicles-routes')(app); // Vehicles

// Add an healthcheck endpoint
app.get('/status', (req, res) => {
Expand Down
31 changes: 31 additions & 0 deletions modules/vehicles/api/vehicles-routes.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import { Request, Response } from 'express';
import * as core from 'express-serve-static-core';
import { getQtyFromRequest } from '../../../utils/route-utils';
import getRandomVehicles from '../utils/getRandomVehicles';

module.exports = function (app: core.Express) {
/**
* @openapi
* "/vehicles/{qty}":
* get:
* tags:
* - Vehicles
* summary: Obtain a random list of vehicles
* parameters:
* - in: path
* name: qty
* description: The amount of vehicles you require
* type: string
* default: 10
* responses:
* '200':
* description: OK
* schema:
* $ref: '#/definitions/MockVehicles'
*/
app.get('/vehicles/:qty?', (req: Request, res: Response) => {
const qty = getQtyFromRequest(req, 10);
const users = getRandomVehicles(qty);
res.json(users);
});
};
46 changes: 46 additions & 0 deletions modules/vehicles/consts/Vehicle.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* @openapi
* definitions:
* MockVehicles:
* type: array
* items:
* type: object
* properties:
* name:
* type: string
* example: Jeep Model X
* type:
* type: string
* example: Minivan
* color:
* type: string
* example: tan
* fuel:
* type: string
* example: Hybrid
* manufacturer:
* type: string
* example: Jeep
* model:
* type: string
* example: A8
* vin:
* type: string
* example: NP1WJW8L8WWM52689
* vrm:
* type: string
* example: JX30UEU
*/

type Vehicle = {
name: string;
type: string;
color: string;
fuel: string;
manufacturer: string;
model: string;
vin: string;
vrm: string;
};

export default Vehicle;
28 changes: 28 additions & 0 deletions modules/vehicles/tests/api/vehicles-routes.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
const request = require('supertest');
const baseURL = 'http://localhost:3000';

describe('vehicles api endpoints', () => {
describe('GET /vehicles', () => {
it('should return a vehicle', async () => {
const response = await request(baseURL).get(`/vehicles/`);

expect(response.body[0]).toHaveProperty('name');
expect(response.body[0]).toHaveProperty('type');
expect(response.body[0]).toHaveProperty('color');
expect(response.body[0]).toHaveProperty('fuel');
expect(response.body[0]).toHaveProperty('manufacturer');
expect(response.body[0]).toHaveProperty('model');
expect(response.body[0]).toHaveProperty('vin');
expect(response.body[0]).toHaveProperty('vrm');
});
});

describe('GET /vehicles/qty', () => {
const qty = 5;

it('should return a list of users ', async () => {
const response = await request(baseURL).get(`/users/${qty}`);
expect(response.body.length).toEqual(qty);
});
});
});
9 changes: 9 additions & 0 deletions modules/vehicles/tests/utils/getRandomVehicles.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import getRandomVehicles from '../../utils/getRandomVehicles';

describe('get random vehicles', () => {
it('should return a list of random vehicles', () => {
const amount = 4;
const res = getRandomVehicles(4);
expect(res.length).toBe(amount);
});
});
23 changes: 23 additions & 0 deletions modules/vehicles/utils/getRandomVehicles.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import Vehicle from '../consts/Vehicle';
import { faker } from '@faker-js/faker';

const getRandomVehicles = (qty: number) => {
const vehicles: Vehicle[] = [];

Array.from({ length: qty }).forEach(() => {
vehicles.push({
name: faker.vehicle.vehicle(),
type: faker.vehicle.type(),
color: faker.vehicle.color(),
fuel: faker.vehicle.fuel(),
manufacturer: faker.vehicle.manufacturer(),
model: faker.vehicle.model(),
vin: faker.vehicle.vin(),
vrm: faker.vehicle.vrm(),
});
});

return vehicles;
};

export default getRandomVehicles;
2 changes: 1 addition & 1 deletion swagger.json
Original file line number Diff line number Diff line change
Expand Up @@ -2664,4 +2664,4 @@
}
}
}
}
}

0 comments on commit 268fe39

Please sign in to comment.