Refactoring product route
parent
87a722d03e
commit
b41461c8a3
|
@ -25,7 +25,7 @@ router.get('/admin/products', restrict, async (req, res, next) => {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/admin/products/filter/:search', async (req, res, next) => {
|
router.get('/admin/products/filter/:search', restrict, async (req, res, next) => {
|
||||||
const db = req.app.db;
|
const db = req.app.db;
|
||||||
const searchTerm = req.params.search;
|
const searchTerm = req.params.search;
|
||||||
const productsIndex = req.app.productsIndex;
|
const productsIndex = req.app.productsIndex;
|
||||||
|
@ -37,6 +37,12 @@ router.get('/admin/products/filter/:search', async (req, res, next) => {
|
||||||
|
|
||||||
// we search on the lunr indexes
|
// we search on the lunr indexes
|
||||||
const results = await db.products.find({ _id: { $in: lunrIdArray } }).toArray();
|
const results = await db.products.find({ _id: { $in: lunrIdArray } }).toArray();
|
||||||
|
|
||||||
|
if(req.apiAuthenticated){
|
||||||
|
res.status(200).json(results);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
res.render('products', {
|
res.render('products', {
|
||||||
title: 'Results',
|
title: 'Results',
|
||||||
results: results,
|
results: results,
|
||||||
|
@ -205,6 +211,11 @@ router.get('/admin/product/edit/:id', restrict, checkAccess, async (req, res) =>
|
||||||
const images = await common.getImages(req.params.id, req, res);
|
const images = await common.getImages(req.params.id, req, res);
|
||||||
const product = await db.products.findOne({ _id: common.getId(req.params.id) });
|
const product = await db.products.findOne({ _id: common.getId(req.params.id) });
|
||||||
if(!product){
|
if(!product){
|
||||||
|
// If API request, return json
|
||||||
|
if(req.apiAuthenticated){
|
||||||
|
res.status(400).json({ message: 'Product not found' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
req.session.message = 'Product not found';
|
req.session.message = 'Product not found';
|
||||||
req.session.messageType = 'danger';
|
req.session.messageType = 'danger';
|
||||||
res.redirect('/admin/products');
|
res.redirect('/admin/products');
|
||||||
|
@ -215,6 +226,12 @@ router.get('/admin/product/edit/:id', restrict, checkAccess, async (req, res) =>
|
||||||
options = product.productOptions;
|
options = product.productOptions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If API request, return json
|
||||||
|
if(req.apiAuthenticated){
|
||||||
|
res.status(200).json(product);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
res.render('product_edit', {
|
res.render('product_edit', {
|
||||||
title: 'Edit product',
|
title: 'Edit product',
|
||||||
result: product,
|
result: product,
|
||||||
|
|
|
@ -134,6 +134,37 @@ test('[Success] Search products', async t => {
|
||||||
t.deepEqual(res.body.length, 2);
|
t.deepEqual(res.body.length, 2);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('[Success] Filter products', async t => {
|
||||||
|
const res = await g.request
|
||||||
|
.get('/admin/products/filter/backpack')
|
||||||
|
.set('apiKey', g.users[0].apiKey)
|
||||||
|
.expect(200);
|
||||||
|
|
||||||
|
// Should be two backpack products
|
||||||
|
t.deepEqual(res.body.length, 2);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('[Success] Edit a product', async t => {
|
||||||
|
const res = await g.request
|
||||||
|
.get(`/admin/product/edit/${g.products[0]._id}`)
|
||||||
|
.set('apiKey', g.users[0].apiKey)
|
||||||
|
.expect(200);
|
||||||
|
|
||||||
|
// Products should match
|
||||||
|
t.deepEqual(res.body._id.toString(), g.products[0]._id.toString());
|
||||||
|
t.deepEqual(res.body.productPermalink, g.products[0].productPermalink);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('[Fail] Edit an invalid product', async t => {
|
||||||
|
const res = await g.request
|
||||||
|
.get('/admin/product/edit/some_invalid_product')
|
||||||
|
.set('apiKey', g.users[0].apiKey)
|
||||||
|
.expect(400);
|
||||||
|
|
||||||
|
// Check the returned message
|
||||||
|
t.deepEqual(res.body.message, 'Product not found');
|
||||||
|
});
|
||||||
|
|
||||||
test('[Success] Add a product', async t => {
|
test('[Success] Add a product', async t => {
|
||||||
const product = {
|
const product = {
|
||||||
productPermalink: 'test-jacket',
|
productPermalink: 'test-jacket',
|
||||||
|
|
Loading…
Reference in New Issue