diff --git a/server/controllers/orderController.js b/server/controllers/orderController.js index ff46763..3a262bc 100644 --- a/server/controllers/orderController.js +++ b/server/controllers/orderController.js @@ -4,6 +4,18 @@ class OrderController { static getAllOrders(req, res) { res.status(200).json({ orders }); } + + static getOrder(req, res) { + const { order } = req; + + if (!order) { + return res.status(404).json({ + error: 'That order doesn\'t exist', + }); + } + + return res.status(200).json(order); + } } export default OrderController; diff --git a/server/middleware/findSingleOrder.js b/server/middleware/findSingleOrder.js new file mode 100644 index 0000000..2b8e6dd --- /dev/null +++ b/server/middleware/findSingleOrder.js @@ -0,0 +1,10 @@ +import orders from '../db/orders'; + +const findOrder = (req, res, next) => { + let { id } = req.params; + id = Number(id); + req.order = orders.find(order => order.id === id); + next(); +}; + +export default findOrder; diff --git a/server/routes/routes.js b/server/routes/routes.js index 032b3b2..651243c 100644 --- a/server/routes/routes.js +++ b/server/routes/routes.js @@ -1,5 +1,6 @@ import express from 'express'; import OrderController from '../controllers/orderController'; +import findOrder from '../middleware/findSingleOrder'; const router = express.Router(); @@ -10,5 +11,6 @@ router.get('/', (req, res) => { }); router.get('/orders', OrderController.getAllOrders); +router.get('/orders/:id', findOrder, OrderController.getOrder); export default router; diff --git a/tests/routes/routes.spec.js b/tests/routes/routes.spec.js index c877309..1c1451b 100644 --- a/tests/routes/routes.spec.js +++ b/tests/routes/routes.spec.js @@ -3,6 +3,7 @@ import 'chai/register-should'; import dirtyChai from 'dirty-chai'; import chaiHttp from 'chai-http'; import app from '../../server/index'; +import orders from '../../server/db/orders'; chai.use(chaiHttp); chai.use(dirtyChai); @@ -57,3 +58,44 @@ describe('GET /api/v1/orders/', () => { }); }); }); + +describe('GET /api/v1/orders/', () => { + const id = { + valid: undefined, + invalid: undefined, + }; + const keys = ['id', 'author', 'title', 'status', 'date']; + + before(() => { + id.valid = Math.ceil(Math.random() * orders.length); + id.invalid = orders.length + 1; + }); + + it('should respond with status 200 if order is found', (done) => { + chai.request(app) + .get(`/api/v1/orders/${id.valid}`) + .end((err, res) => { + res.should.have.status(200); + done(); + }); + }); + + it('should respond with status 404 and an error message if order is not found', (done) => { + chai.request(app) + .get(`/api/v1/orders/${id.invalid}`) + .end((err, res) => { + res.should.have.status(404); + res.body.should.be.an('object').that.has.property('error'); + done(); + }); + }); + + it('should respond with an object having correct data', (done) => { + chai.request(app) + .get(`/api/v1/orders/${id.valid}`) + .end((err, res) => { + res.body.should.be.an('object').which.has.all.keys(keys); + done(); + }); + }); +});