Added ability to easily run the test/sample data
parent
bc4a5ee71b
commit
f37e521768
|
@ -43,6 +43,10 @@ The easiest way to get up and running is using Docker. Once the Docker CLI is in
|
||||||
|
|
||||||
> Note: When deploying to Heroku you will need to configure your external MongoDB either on your own server or a hosted service on mLab, AWS etc.
|
> Note: When deploying to Heroku you will need to configure your external MongoDB either on your own server or a hosted service on mLab, AWS etc.
|
||||||
|
|
||||||
|
### Sample/Test data
|
||||||
|
|
||||||
|
Sometimes you might want some default sample/test data. To create this, run `npm run testdata`. Remember to only run this initially or anytime you want to reset the data as this function deletes ALL existing data.
|
||||||
|
|
||||||
## Admin
|
## Admin
|
||||||
|
|
||||||
Visit: [http://127.0.0.1:1111/admin](http://127.0.0.1:1111/admin)
|
Visit: [http://127.0.0.1:1111/admin](http://127.0.0.1:1111/admin)
|
||||||
|
|
|
@ -646,83 +646,3 @@ exports.runIndexing = (app) => {
|
||||||
process.exit(2);
|
process.exit(2);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
exports.dropTestData = (db) => {
|
|
||||||
Promise.all([
|
|
||||||
db.products.drop(),
|
|
||||||
db.users.drop(),
|
|
||||||
db.customers.drop()
|
|
||||||
])
|
|
||||||
.then((err) => {
|
|
||||||
return Promise.resolve();
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.log('Error dropping test data', err);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.sampleData = (app) => {
|
|
||||||
const db = app.db;
|
|
||||||
|
|
||||||
db.products.count()
|
|
||||||
.then((products) => {
|
|
||||||
if(products !== 0){
|
|
||||||
return Promise.resolve();
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log('Inserting sample data');
|
|
||||||
const testData = fs.readFileSync('./bin/testdata.json', 'utf-8');
|
|
||||||
const jsonData = JSON.parse(testData);
|
|
||||||
|
|
||||||
// Add sample data
|
|
||||||
return Promise.all([
|
|
||||||
db.products.insertMany(fixProductDates(jsonData.products)),
|
|
||||||
db.menu.insertOne(jsonData.menu)
|
|
||||||
]);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
exports.testData = async (app) => {
|
|
||||||
const db = app.db;
|
|
||||||
const testData = fs.readFileSync('./bin/testdata.json', 'utf-8');
|
|
||||||
const jsonData = JSON.parse(testData);
|
|
||||||
|
|
||||||
// TODO: A bit ugly, needs fixing
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
Promise.all([
|
|
||||||
db.users.remove({}, {}),
|
|
||||||
db.customers.remove({}, {}),
|
|
||||||
db.products.remove({}, {}),
|
|
||||||
db.menu.remove({}, {})
|
|
||||||
])
|
|
||||||
.then(() => {
|
|
||||||
Promise.all([
|
|
||||||
db.users.insertMany(jsonData.users),
|
|
||||||
db.customers.insertMany(jsonData.customers),
|
|
||||||
db.products.insertMany(fixProductDates(jsonData.products)),
|
|
||||||
db.menu.insertOne(jsonData.menu)
|
|
||||||
])
|
|
||||||
.then(() => {
|
|
||||||
resolve();
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.log('Error inserting test data', err);
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
})
|
|
||||||
.catch((err) => {
|
|
||||||
console.log('Error removing existing test data', err);
|
|
||||||
reject(err);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
// Adds current date to product added date when smashing into DB
|
|
||||||
function fixProductDates(products){
|
|
||||||
let index = 0;
|
|
||||||
products.forEach((product) => {
|
|
||||||
products[index].productAddedDate = new Date();
|
|
||||||
index++;
|
|
||||||
});
|
|
||||||
return products;
|
|
||||||
}
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
const common = require('./common');
|
||||||
|
const { initDb } = require('./db');
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
console.log('__dirname', path.join(__dirname, '..', 'bin', 'testdata.json'));
|
||||||
|
|
||||||
|
const testData = fs.readFileSync(path.join(__dirname, '..', 'bin', 'testdata.json'), 'utf-8');
|
||||||
|
const jsonData = JSON.parse(testData);
|
||||||
|
|
||||||
|
// get config
|
||||||
|
let config = common.getConfig();
|
||||||
|
|
||||||
|
initDb(config.databaseConnectionString, (err, db) => {
|
||||||
|
Promise.all([
|
||||||
|
db.users.remove({}, {}),
|
||||||
|
db.customers.remove({}, {}),
|
||||||
|
db.products.remove({}, {}),
|
||||||
|
db.menu.remove({}, {})
|
||||||
|
])
|
||||||
|
.then(() => {
|
||||||
|
Promise.all([
|
||||||
|
db.users.insertMany(jsonData.users),
|
||||||
|
db.customers.insertMany(jsonData.customers),
|
||||||
|
db.products.insertMany(fixProductDates(jsonData.products)),
|
||||||
|
db.menu.insertOne(jsonData.menu)
|
||||||
|
])
|
||||||
|
.then(() => {
|
||||||
|
console.log('Test data complete');
|
||||||
|
process.exit();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log('Error inserting test data', err);
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
console.log('Error removing existing test data', err);
|
||||||
|
reject(err);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// Adds current date to product added date when smashing into DB
|
||||||
|
function fixProductDates(products){
|
||||||
|
let index = 0;
|
||||||
|
products.forEach((product) => {
|
||||||
|
products[index].productAddedDate = new Date();
|
||||||
|
index++;
|
||||||
|
});
|
||||||
|
return products;
|
||||||
|
}
|
|
@ -6,6 +6,7 @@
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "node app.js",
|
"start": "node app.js",
|
||||||
"deploy": "gulp deploy",
|
"deploy": "gulp deploy",
|
||||||
|
"testdata": "node lib/testdata.js",
|
||||||
"test": "ava test/**/*.js --verbose"
|
"test": "ava test/**/*.js --verbose"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
Loading…
Reference in New Issue