Fixing tests

master
Mark Moffat 2019-06-11 14:42:07 +09:30
parent 3a61855609
commit e48bd97bf7
4 changed files with 66 additions and 29 deletions

9
package-lock.json generated
View File

@ -8874,6 +8874,15 @@
"superagent": "^3.8.3" "superagent": "^3.8.3"
} }
}, },
"supertest-session": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/supertest-session/-/supertest-session-4.0.0.tgz",
"integrity": "sha512-9d7KAL+K9hnnicov7USv/Nu1tSl40qSrOsB8zZHOEtfEzHaAoID6tbl1NeCVUg7SJreJMlNn+KJ88V7FW8gD6Q==",
"dev": true,
"requires": {
"object-assign": "^4.0.1"
}
},
"supports-color": { "supports-color": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",

View File

@ -7,7 +7,7 @@
"start": "node app.js", "start": "node app.js",
"deploy": "gulp deploy", "deploy": "gulp deploy",
"testdata": "node lib/testdata.js", "testdata": "node lib/testdata.js",
"test": "NODE_ENV=test ava test/test.js --verbose" "test": "NODE_ENV=test ava --verbose"
}, },
"dependencies": { "dependencies": {
"ajv": "^6.10.0", "ajv": "^6.10.0",
@ -61,6 +61,7 @@
"gulp-rename": "^1.4.0", "gulp-rename": "^1.4.0",
"mongodb-uri": "^0.9.7", "mongodb-uri": "^0.9.7",
"supertest": "^3.4.2", "supertest": "^3.4.2",
"supertest-session": "^4.0.0",
"wait.for": "^0.6.6" "wait.for": "^0.6.6"
}, },
"main": "app.js", "main": "app.js",

View File

@ -4,7 +4,6 @@ const colors = require('colors');
const async = require('async'); const async = require('async');
const _ = require('lodash'); const _ = require('lodash');
const common = require('../lib/common'); const common = require('../lib/common');
const ObjectId = require('mongodb').ObjectID;
// These is the customer facing routes // These is the customer facing routes
router.get('/payment/:orderId', async (req, res, next) => { router.get('/payment/:orderId', async (req, res, next) => {
@ -233,11 +232,13 @@ router.post('/product/updatecart', (req, res, next) => {
// Remove single product from cart // Remove single product from cart
router.post('/product/removefromcart', (req, res, next) => { router.post('/product/removefromcart', (req, res, next) => {
const db = req.app.db; const db = req.app.db;
let itemRemoved = false;
// remove item from cart // remove item from cart
async.each(req.session.cart, (item, callback) => { async.each(req.session.cart, (item, callback) => {
if(item){ if(item){
if(item.productId === req.body.cart_index){ if(item.productId === req.body.cartId){
itemRemoved = true;
req.session.cart = _.pull(req.session.cart, item); req.session.cart = _.pull(req.session.cart, item);
} }
} }
@ -249,7 +250,11 @@ router.post('/product/removefromcart', (req, res, next) => {
}); });
// update total cart amount // update total cart amount
common.updateTotalCartAmount(req, res); common.updateTotalCartAmount(req, res);
res.status(200).json({message: 'Product successfully removed', totalCartItems: Object.keys(req.session.cart).length});
if(itemRemoved === false){
return res.status(400).json({message: 'Product not found in cart'});
}
return res.status(200).json({message: 'Product successfully removed', totalCartItems: Object.keys(req.session.cart).length});
}); });
}); });

View File

@ -2,7 +2,7 @@ const test = require('ava');
const fs = require('fs'); const fs = require('fs');
const app = require('../app'); const app = require('../app');
const common = require('../lib/common'); const common = require('../lib/common');
const request = require('supertest'); const session = require('supertest-session');
// Get test data to compare in tests // Get test data to compare in tests
const rawTestData = fs.readFileSync('./bin/testdata.json', 'utf-8'); const rawTestData = fs.readFileSync('./bin/testdata.json', 'utf-8');
@ -14,9 +14,11 @@ let config;
let products; let products;
let customers; let customers;
let users; let users;
let request = null;
function setup(db){ function setup(db){
return Promise.all([ return Promise.all([
db.cart.remove({}, {}),
db.users.remove({}, {}), db.users.remove({}, {}),
db.customers.remove({}, {}), db.customers.remove({}, {}),
db.products.remove({}, {}), db.products.remove({}, {}),
@ -34,7 +36,9 @@ function setup(db){
// Start up app and wait for it to be ready // Start up app and wait for it to be ready
test.before(async () => { test.before(async () => {
return await new Promise(resolve => { // Create a session
request = session(app);
await new Promise(resolve => {
app.on('appStarted', async () => { app.on('appStarted', async () => {
// Set some stuff now we have the app started // Set some stuff now we have the app started
config = app.config; config = app.config;
@ -52,97 +56,115 @@ test.before(async () => {
}); });
test.serial('[Success] Get products JSON', async t => { test.serial('[Success] Get products JSON', async t => {
const res = await request(app) const res = await request
.get('?json=true') .get('?json=true')
.expect(200) .expect(200);
if(res.body.length < config.productsPerPage){ if(res.body.length < config.productsPerPage){
t.is(res.body.length, testData.products.length); t.is(res.body.length, products.length);
}else{ }else{
t.is(res.body.length, config.productsPerPage); t.is(res.body.length, config.productsPerPage);
} }
}); });
test.serial('[Success] User Login', async t => { test.serial('[Success] User Login', async t => {
const res = await request(app) const res = await request
.post('/admin/login_action') .post('/admin/login_action')
.send({ .send({
email: users[0].userEmail, email: users[0].userEmail,
password: 'test' password: 'test'
}) })
.expect(200) .expect(200);
t.deepEqual(res.body.message, 'Login successful'); t.deepEqual(res.body.message, 'Login successful');
}); });
test.serial('[Fail] Incorrect user password', async t => { test.serial('[Fail] Incorrect user password', async t => {
const res = await request(app) const res = await request
.post('/admin/login_action') .post('/admin/login_action')
.send({ .send({
email: users[0].userEmail, email: users[0].userEmail,
password: 'test1' password: 'test1'
}) })
.expect(400) .expect(400);
t.deepEqual(res.body.message, 'Access denied. Check password and try again.'); t.deepEqual(res.body.message, 'Access denied. Check password and try again.');
}); });
test.serial('[Fail] Customer login with incorrect email', async t => { test.serial('[Fail] Customer login with incorrect email', async t => {
const res = await request(app) const res = await request
.post('/customer/login_action') .post('/customer/login_action')
.send({ .send({
loginEmail: 'test1@test.com', loginEmail: 'test1@test.com',
loginPassword: 'test' loginPassword: 'test'
}) })
.expect(400) .expect(400);
t.deepEqual(res.body.message, 'A customer with that email does not exist.'); t.deepEqual(res.body.message, 'A customer with that email does not exist.');
}); });
test.serial('[Success] Customer login with correct email', async t => { test.serial('[Success] Customer login with correct email', async t => {
const res = await request(app) const res = await request
.post('/customer/login_action') .post('/customer/login_action')
.send({ .send({
loginEmail: customers[0].email, loginEmail: customers[0].email,
loginPassword: 'test' loginPassword: 'test'
}) })
.expect(200) .expect(200);
t.deepEqual(res.body.message, 'Successfully logged in'); t.deepEqual(res.body.message, 'Successfully logged in');
}); });
test.serial('[Success] Add product to cart', async t => { test.serial('[Success] Add product to cart', async t => {
const res = await request(app) const res = await request
.post('/product/addtocart') .post('/product/addtocart')
.send({ .send({
productId: products[0]._id, productId: products[0]._id,
productQuantity: 1, productQuantity: 1,
productOptions: JSON.stringify(products[0].productOptions) productOptions: JSON.stringify(products[0].productOptions)
}) })
.expect(200) .expect(200);
const sessions = await db.cart.find({}).toArray();
if(!sessions || sessions.length === 0){
t.fail();
}
t.deepEqual(res.body.message, 'Cart successfully updated'); t.deepEqual(res.body.message, 'Cart successfully updated');
}); });
test.serial('[Fail] Add product to cart with not enough stock', async t => { test.serial('[Fail] Add product to cart with not enough stock', async t => {
const res = await request(app) const res = await request
.post('/product/addtocart') .post('/product/addtocart')
.send({ .send({
productId: products[0]._id, productId: products[0]._id,
productQuantity: 100, productQuantity: 100,
productOptions: JSON.stringify(products[0].productOptions) productOptions: JSON.stringify(products[0].productOptions)
}) })
.expect(400) .expect(400);
t.deepEqual(res.body.message, 'There is insufficient stock of this product.'); t.deepEqual(res.body.message, 'There is insufficient stock of this product.');
}); });
test.serial('[Fail] Add incorrect product to cart', async t => { test.serial('[Fail] Add incorrect product to cart', async t => {
const res = await request(app) const res = await request
.post('/product/addtocart') .post('/product/addtocart')
.send({ .send({
id: 'fake_product_id', id: 'fake_product_id',
state: false state: false
}) })
.expect(400) .expect(400);
t.deepEqual(res.body.message, 'Error updating cart. Please try again.'); t.deepEqual(res.body.message, 'Error updating cart. Please try again.');
}); });
test.serial('[Success] Remove item previously added to cart', async t => {
const res = await request
.post('/product/removefromcart')
.send({
cartId: products[0]._id
})
.expect(200);
t.deepEqual(res.body.message, 'Product successfully removed');
});
test.serial('[Fail] Try remove an item which is not in the cart', async t => {
const res = await request
.post('/product/removefromcart')
.send({
cartId: 'bogus_product_id'
})
.expect(400);
t.deepEqual(res.body.message, 'Product not found in cart');
});