From ef884c9a13b3e972c3e94ff3c242a6261b533cb2 Mon Sep 17 00:00:00 2001 From: Daniel Diaz <39510674+IslandRhythms@users.noreply.github.com> Date: Mon, 25 Jul 2022 11:07:54 -0400 Subject: [PATCH 1/2] added find reviews by vehicle route --- .../src/api/Vehicle/findById.ts | 2 +- .../src/api/Vehicle/findByVehicle.ts | 11 +++++ typescript-express-reviews/src/api/index.ts | 2 + .../tests/Vehicle.test.ts | 47 +++++++++++++++++++ 4 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 typescript-express-reviews/src/api/Vehicle/findByVehicle.ts diff --git a/typescript-express-reviews/src/api/Vehicle/findById.ts b/typescript-express-reviews/src/api/Vehicle/findById.ts index 00234999..b96a6629 100644 --- a/typescript-express-reviews/src/api/Vehicle/findById.ts +++ b/typescript-express-reviews/src/api/Vehicle/findById.ts @@ -3,7 +3,7 @@ import Vehicle from '../../models/vehicle'; import Review from '../../models/review'; async function last5 (request: Request, response: Response) { - const limit = request.body.limit ? request.body.limit : 5; + const limit = request.body.limit != null ? request.body.limit : 5; const vehicle = await Vehicle.findById({ _id: request.body.vehicleId }); const reviews = await Review.find({ vehicleId: request.body.vehicleId }).sort({ createdAt: -1 }).limit(limit); diff --git a/typescript-express-reviews/src/api/Vehicle/findByVehicle.ts b/typescript-express-reviews/src/api/Vehicle/findByVehicle.ts new file mode 100644 index 00000000..1684aea0 --- /dev/null +++ b/typescript-express-reviews/src/api/Vehicle/findByVehicle.ts @@ -0,0 +1,11 @@ +import express, { Request, Response } from 'express'; +import Review from '../../models/review'; + +async function findByVehicle (request: Request, response: Response) { + const limit = request.body.limit != null ? request.body.limit : 5; + const skip = request.body.skip != null ? request.body.skip : 5; + const reviews = await Review.find({ vehicleId: request.body.vehicleId }).sort({ createdAt: -1 }).skip(skip).limit(limit); + return response.status(200).json({ reviews: reviews }); +}; + +export default findByVehicle; \ No newline at end of file diff --git a/typescript-express-reviews/src/api/index.ts b/typescript-express-reviews/src/api/index.ts index 72fdab3a..3b1b6142 100644 --- a/typescript-express-reviews/src/api/index.ts +++ b/typescript-express-reviews/src/api/index.ts @@ -3,6 +3,7 @@ import register from './User/register'; import login from './User/login'; import create from './Review/create'; import last5 from './Vehicle/findById'; +import findByVehicle from './Vehicle/findByVehicle'; import bodyParser from 'body-parser'; import connect from '../models/connect'; @@ -22,6 +23,7 @@ void async function main() { app.use('/login', login); app.use('/review/create', create); app.use('/vehicle/recent/reviews', last5); + app.use('/vehicle/reviews', findByVehicle); await app.listen(port); console.log('Listening on port ' + port); diff --git a/typescript-express-reviews/tests/Vehicle.test.ts b/typescript-express-reviews/tests/Vehicle.test.ts index f3c259bc..5586c1dc 100644 --- a/typescript-express-reviews/tests/Vehicle.test.ts +++ b/typescript-express-reviews/tests/Vehicle.test.ts @@ -4,6 +4,7 @@ import Review from '../src/models/review'; import User from '../src/models/user'; import {describe, it } from 'mocha'; import last5 from '../src/api/Vehicle/findById'; +import findByVehicle from '../src/api/Vehicle/findByVehicle'; import assert from 'assert'; import sinon from 'sinon'; @@ -60,4 +61,50 @@ describe('Vehicle', function() { assert.equal(res.json.getCall(0).args[0].reviews.length, 5); assert(res.json.getCall(0).args[0].reviews[0].text.endsWith('6')); }); + it('Should find all the reviews for the given vehicleId, adhering to the skip and limit parameters', async function() { + const mockRequest = (body) => ({ + body + }) + const mockResponse = (): ResponseStub => { + const res: ResponseStub = { + status: sinon.stub().returnsThis(), + json: sinon.stub().returnsThis() + }; + return res; + }; + const user = await User.create({ + email: 'test@localhost.com', + firstName: 'Test', + lastName: 'Testerson' + }); + const vehicle = await Vehicle.create( + { + make: 'Tesla', + model: 'Model S', + year: 2022, + images: [ + 'https://tesla-cdn.thron.com/delivery/public/image/tesla/6139697c-9d6a-4579-837e-a9fc5df4a773/bvlatuR/std/1200x628/Model-3-Homepage-Social-LHD', + 'https://www.tesla.com/sites/default/files/images/blogs/models_blog_post.jpg' + ], + numReviews: 0, + averageReview: 0 + }, + ); + for (let i = 0; i < 7; i++) { + await Review.create({ + rating: i > 5 ? 5 : i, + text: 'This is a review that must have length greater than 30. ' + i, + vehicleId: vehicle._id, + userId: user._id + }); + } + vehicle.numReviews = 6; + vehicle.averageReview = 3; + await vehicle.save(); + const req = mockRequest({ vehicleId: vehicle._id, limit: 0, skip: 0 }); + const res = mockResponse(); + await findByVehicle(req, res); + assert.equal(res.json.getCall(0).args[0].reviews.length, 7); + assert(res.json.getCall(0).args[0].reviews[0].text.endsWith('6')); + }); }); \ No newline at end of file From 0c227d2baa801309b203e306b083abbae90cbe27 Mon Sep 17 00:00:00 2001 From: Daniel Diaz <39510674+IslandRhythms@users.noreply.github.com> Date: Fri, 29 Jul 2022 13:21:10 -0400 Subject: [PATCH 2/2] addressed comments --- .../src/api/{Vehicle => Review}/findByVehicle.ts | 0 typescript-express-reviews/src/api/index.ts | 2 +- typescript-express-reviews/tests/Vehicle.test.ts | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename typescript-express-reviews/src/api/{Vehicle => Review}/findByVehicle.ts (100%) diff --git a/typescript-express-reviews/src/api/Vehicle/findByVehicle.ts b/typescript-express-reviews/src/api/Review/findByVehicle.ts similarity index 100% rename from typescript-express-reviews/src/api/Vehicle/findByVehicle.ts rename to typescript-express-reviews/src/api/Review/findByVehicle.ts diff --git a/typescript-express-reviews/src/api/index.ts b/typescript-express-reviews/src/api/index.ts index 3b1b6142..b6b7b905 100644 --- a/typescript-express-reviews/src/api/index.ts +++ b/typescript-express-reviews/src/api/index.ts @@ -3,7 +3,7 @@ import register from './User/register'; import login from './User/login'; import create from './Review/create'; import last5 from './Vehicle/findById'; -import findByVehicle from './Vehicle/findByVehicle'; +import findByVehicle from './Review/findByVehicle'; import bodyParser from 'body-parser'; import connect from '../models/connect'; diff --git a/typescript-express-reviews/tests/Vehicle.test.ts b/typescript-express-reviews/tests/Vehicle.test.ts index 5586c1dc..0db466fd 100644 --- a/typescript-express-reviews/tests/Vehicle.test.ts +++ b/typescript-express-reviews/tests/Vehicle.test.ts @@ -4,7 +4,7 @@ import Review from '../src/models/review'; import User from '../src/models/user'; import {describe, it } from 'mocha'; import last5 from '../src/api/Vehicle/findById'; -import findByVehicle from '../src/api/Vehicle/findByVehicle'; +import findByVehicle from '../src/api/Review/findByVehicle'; import assert from 'assert'; import sinon from 'sinon';