Fixing tests
							parent
							
								
									3a61855609
								
							
						
					
					
						commit
						e48bd97bf7
					
				|  | @ -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", | ||||||
|  |  | ||||||
|  | @ -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", | ||||||
|  |  | ||||||
|  | @ -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}); | ||||||
|     }); |     }); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										72
									
								
								test/test.js
								
								
								
								
							
							
						
						
									
										72
									
								
								test/test.js
								
								
								
								
							|  | @ -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'); | ||||||
|  | }); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue