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.
|
||||
|
||||
### 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
|
||||
|
||||
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);
|
||||
});
|
||||
};
|
||||
|
||||
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": {
|
||||
"start": "node app.js",
|
||||
"deploy": "gulp deploy",
|
||||
"testdata": "node lib/testdata.js",
|
||||
"test": "ava test/**/*.js --verbose"
|
||||
},
|
||||
"dependencies": {
|
||||
|
|
Loading…
Reference in New Issue