Skip to content

Commit

Permalink
Merge 4b68c2b into 94348af
Browse files Browse the repository at this point in the history
  • Loading branch information
akhilome committed Oct 2, 2018
2 parents 94348af + 4b68c2b commit dfe7a6c
Show file tree
Hide file tree
Showing 5 changed files with 85 additions and 39 deletions.
43 changes: 37 additions & 6 deletions server/controllers/orderController.js
Expand Up @@ -29,16 +29,47 @@ class OrderController {
}
}

static getOrder(req, res) {
const { order } = req;
static async getOrder(req, res) {
const { id } = req.params;

if (!order) {
return res.status(404).json({
error: 'That order doesn\'t exist',
if (Number.isNaN(Number(id))) {
return res.status(400).json({
status: 'error',
message: 'invalid order id format',
});
}

return res.status(200).json(order);
try {
const allOrders = (await pool.query('SELECT orders.id, menu.food_name, users.name, orders.date, orders.status FROM orders JOIN menu ON orders.item = menu.id JOIN users ON orders.author = users.id')).rows;

const targetOrder = allOrders
.map((foundOrder) => {
const formatted = {
id: foundOrder.id,
author: foundOrder.name,
title: foundOrder.food_name,
date: foundOrder.date,
status: foundOrder.status,
};
return formatted;
})
.find(order => order.id === Number(id));

if (!targetOrder) {
return res.status(404).json({
status: 'error',
message: 'no such order exists',
});
}

return res.status(200).json({
status: 'success',
message: 'order fetched successfully',
targetOrder,
});
} catch (error) {
return res.status(500).json(error);
}
}

static async newOrder(req, res) {
Expand Down
1 change: 1 addition & 0 deletions server/routes/ordersRouter.js
Expand Up @@ -7,5 +7,6 @@ const router = new Router();
router.get('/users/:id/orders', AuthHandler.authorize, OrderController.getAllUserOrders);
router.post('/orders', AuthHandler.authorize, OrderController.newOrder);
router.get('/orders', AuthHandler.authorize, AuthHandler.authorizeAdmin, OrderController.getAllOrders);
router.get('/orders/:id', AuthHandler.authorize, AuthHandler.authorizeAdmin, OrderController.getOrder);

export default router;
1 change: 0 additions & 1 deletion server/routes/routes.js
Expand Up @@ -10,7 +10,6 @@ router.get('/', (req, res) => {
});
});

router.get('/orders/:id', findOrder, OrderController.getOrder);
router.put('/orders/:id', findOrder, OrderController.updateOrder);

export default router;
47 changes: 47 additions & 0 deletions tests/routes/orders.spec.js
Expand Up @@ -179,3 +179,50 @@ describe('GET /orders', () => {
});
});
});

describe('GET /orders/:id', () => {
before(async () => {
await emptyTablesPromise;
await populateUsersTablePromise;
await populateMenuTablePromise;
await populateOrdersTablePromise;
});

it('should not get order if user is not an admin', (done) => {
chai.request(app)
.get(`/api/v1/orders/${1}`)
.set('x-auth', generateValidToken(seedData.users.validUser))
.end((err, res) => {
if (err) done(err);

res.status.should.eql(403);
done();
});
});

it('should not get order if invalid order id is provided', (done) => {
chai.request(app)
.get('/api/v1/orders/somethingwrong')
.set('x-auth', generateValidToken(seedData.users.admin))
.end((err, res) => {
if (err) done(err);

res.status.should.eql(400);
done();
});
});

it('should return a 404 if order id doesn\'t exist', (done) => {
chai.request(app)
.get('/api/v1/orders/5')
.set('x-auth', generateValidToken(seedData.users.admin))
.end((err, res) => {
if (err) done(err);

res.status.should.eql(404);
done();
});
});

// TODO: test for successfully fetched order
});
32 changes: 0 additions & 32 deletions tests/routes/routes.spec.js
Expand Up @@ -13,8 +13,6 @@ const id = {
invalid: null,
};

const keys = ['id', 'author', 'title', 'status', 'date'];

describe('GET /api/v1/', () => {
it('should respond with a 200 status code', (done) => {
chai.request(app)
Expand All @@ -35,36 +33,6 @@ describe('GET /api/v1/', () => {
});
});

describe('GET /api/v1/orders/<orderId>', () => {
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();
});
});
});

describe('PUT /api/v1/orders/<orderId>', () => {
it('should respond with an error if no status is provided', (done) => {
chai.request(app)
Expand Down

0 comments on commit dfe7a6c

Please sign in to comment.