Skip to content

Commit

Permalink
Merge 5eef695 into 39ce405
Browse files Browse the repository at this point in the history
  • Loading branch information
akhilome committed Oct 19, 2018
2 parents 39ce405 + 5eef695 commit c91bf35
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 1 deletion.
28 changes: 28 additions & 0 deletions server/controllers/menuController.js
Expand Up @@ -30,6 +30,34 @@ class MenuController {
res.status(500).json();
}
}

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

if (Number.isNaN(Number(id))) {
res.status(400).json({ status: 'error', message: 'invalid id type' });
return;
}

try {
const dbQuery = 'DELETE FROM menu WHERE id=$1 RETURNING *';
const deletedFood = (await pool.query(dbQuery, [Number(id)])).rows[0];

if (!deletedFood) {
res.status(404).json({
status: 'error',
message: 'no such food exists',
});
} else {
res.status(200).json({
status: 'success',
message: 'food item sucessfully removed from menu',
});
}
} catch (error) {
res.status(500).json();
}
}
}

export default MenuController;
1 change: 1 addition & 0 deletions server/routes/menuRouter.js
Expand Up @@ -13,5 +13,6 @@ router.post(
Sanitize.addFood,
MenuController.addFood,
);
router.delete('/:id', AuthHandler.authorize, AuthHandler.authorizeAdmin, MenuController.deleteFood);

export default router;
71 changes: 70 additions & 1 deletion tests/routes/menu.spec.js
Expand Up @@ -3,7 +3,7 @@ import 'chai/register-should';
import chaiHttp from 'chai-http';

import app from '../../server/index';
import { users, generateValidToken } from '../seed/seed';
import { users, populateMenu, generateValidToken } from '../seed/seed';

chai.use(chaiHttp);

Expand Down Expand Up @@ -129,3 +129,72 @@ describe('GET /menu', () => {
});
});
});

describe('DELETE /menu/:id', () => {
before(populateMenu);

it('should not delete food if user not authenticated', (done) => {
chai.request(app)
.del('/api/v1/menu/3')
.end((err, res) => {
if (err) done(err);

res.status.should.eql(401);
res.body.status.should.eql('error');
done();
});
});

it('should not delete food if user not an admin', (done) => {
chai.request(app)
.del('/api/v1/menu/3')
.set('x-auth', generateValidToken(users.validUser))
.end((err, res) => {
if (err) done(err);

res.status.should.eql(403);
res.body.status.should.eql('error');
done();
});
});

it('should delete food item if user is admin', (done) => {
chai.request(app)
.del('/api/v1/menu/3')
.set('x-auth', generateValidToken(users.admin))
.end((err, res) => {
if (err) done(err);

res.status.should.eql(200);
res.body.should.be.an('object');
res.body.status.should.eql('success');
done();
});
});

it('should not delete non-existent food item', (done) => {
chai.request(app)
.del('/api/v1/menu/30000')
.set('x-auth', generateValidToken(users.admin))
.end((err, res) => {
if (err) done(err);

res.status.should.eql(404);
res.body.status.should.eql('error');
done();
});
});

it('should not allow invalid food ids', (done) => {
chai.request(app)
.del('/api/v1/menu/hahaha')
.set('x-auth', generateValidToken(users.admin))
.end((err, res) => {
if (err) done(err);

res.status.should.eql(400);
res.body.status.should.eql('error');
done();
});
});
});
10 changes: 10 additions & 0 deletions tests/seed/seed.js
Expand Up @@ -104,8 +104,18 @@ const emptyTables = async () => {
await pool.query(createOrdersTableQuery);
};

const populateMenu = async () => {
const dbQuery = `INSERT INTO menu(food_name, price)
VALUES
('A snack!', 2000),
('Interesting Biscuits', 200000);
`;
await pool.query(dbQuery);
};

export {
users,
emptyTables,
populateMenu,
generateValidToken,
};

0 comments on commit c91bf35

Please sign in to comment.