From 7302c437e4695b0e8f1c4373bd47bdb8aaa0d7d2 Mon Sep 17 00:00:00 2001 From: Avi Sharvit Date: Fri, 16 Nov 2018 17:09:17 +0200 Subject: [PATCH] Fixes #14 - Custom seeder template --- .../md-seed-example/md-seed-generator.json | 3 -- .../sandbox-1/md-seed-config.js | 26 ++++++++++ .../generate-sandboxes/sandbox-1/package.json | 14 ++++++ .../sandbox-2/custom-seeder-template.js | 3 ++ .../sandbox-2/md-seed-config.js | 26 ++++++++++ .../generate-sandboxes/sandbox-2/package.json | 18 +++++++ src/e2e/generate.e2e.js | 46 ++++++++++-------- src/e2e/generate.e2e.js.md | 27 ++++++++++ src/e2e/generate.e2e.js.snap | Bin 770 -> 918 bytes .../sandbox-1/md-seed-generator.json | 3 -- src/e2e/run.e2e.js | 14 +----- src/e2e/utils/files-sandbox.js | 10 ++++ src/lib/config.js | 11 +++-- 13 files changed, 161 insertions(+), 40 deletions(-) delete mode 100644 examples/md-seed-example/md-seed-generator.json create mode 100644 src/e2e/generate-sandboxes/sandbox-1/md-seed-config.js create mode 100644 src/e2e/generate-sandboxes/sandbox-1/package.json create mode 100644 src/e2e/generate-sandboxes/sandbox-2/custom-seeder-template.js create mode 100644 src/e2e/generate-sandboxes/sandbox-2/md-seed-config.js create mode 100644 src/e2e/generate-sandboxes/sandbox-2/package.json delete mode 100644 src/e2e/run-sandboxes/sandbox-1/md-seed-generator.json diff --git a/examples/md-seed-example/md-seed-generator.json b/examples/md-seed-example/md-seed-generator.json deleted file mode 100644 index 5e10723..0000000 --- a/examples/md-seed-example/md-seed-generator.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "seedersFolder": "seeders" -} diff --git a/src/e2e/generate-sandboxes/sandbox-1/md-seed-config.js b/src/e2e/generate-sandboxes/sandbox-1/md-seed-config.js new file mode 100644 index 0000000..97ebfcd --- /dev/null +++ b/src/e2e/generate-sandboxes/sandbox-1/md-seed-config.js @@ -0,0 +1,26 @@ +import mongoose from 'mongoose'; + +const mongoURL = + process.env.MONGO_URL || + 'mongodb://localhost:27017/md-seed-generate-sandbox-1'; + +/** + * Seeders List + * order is important + * @type {Object} + */ +export const seedersList = {}; +/** + * Connect to mongodb implementation + * @return {Promise} + */ +export const connect = async () => + await mongoose.connect( + mongoURL, + { useNewUrlParser: true } + ); +/** + * Drop/Clear the database implementation + * @return {Promise} + */ +export const dropdb = async () => mongoose.connection.db.dropDatabase(); diff --git a/src/e2e/generate-sandboxes/sandbox-1/package.json b/src/e2e/generate-sandboxes/sandbox-1/package.json new file mode 100644 index 0000000..5b091cc --- /dev/null +++ b/src/e2e/generate-sandboxes/sandbox-1/package.json @@ -0,0 +1,14 @@ +{ + "name": "md-seed-example", + "version": "2.0.0", + "description": "Example of using mongoose-data-seed", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Avi Sharvit (https://sharvit.github.io)", + "license": "MIT", + "dependencies": { + "mongoose": "^5.0.0" + } +} diff --git a/src/e2e/generate-sandboxes/sandbox-2/custom-seeder-template.js b/src/e2e/generate-sandboxes/sandbox-2/custom-seeder-template.js new file mode 100644 index 0000000..b6dbff7 --- /dev/null +++ b/src/e2e/generate-sandboxes/sandbox-2/custom-seeder-template.js @@ -0,0 +1,3 @@ +console.log( + 'I am <%= seederName %> and I created by a custom seeder template.' +); diff --git a/src/e2e/generate-sandboxes/sandbox-2/md-seed-config.js b/src/e2e/generate-sandboxes/sandbox-2/md-seed-config.js new file mode 100644 index 0000000..97ebfcd --- /dev/null +++ b/src/e2e/generate-sandboxes/sandbox-2/md-seed-config.js @@ -0,0 +1,26 @@ +import mongoose from 'mongoose'; + +const mongoURL = + process.env.MONGO_URL || + 'mongodb://localhost:27017/md-seed-generate-sandbox-1'; + +/** + * Seeders List + * order is important + * @type {Object} + */ +export const seedersList = {}; +/** + * Connect to mongodb implementation + * @return {Promise} + */ +export const connect = async () => + await mongoose.connect( + mongoURL, + { useNewUrlParser: true } + ); +/** + * Drop/Clear the database implementation + * @return {Promise} + */ +export const dropdb = async () => mongoose.connection.db.dropDatabase(); diff --git a/src/e2e/generate-sandboxes/sandbox-2/package.json b/src/e2e/generate-sandboxes/sandbox-2/package.json new file mode 100644 index 0000000..948b819 --- /dev/null +++ b/src/e2e/generate-sandboxes/sandbox-2/package.json @@ -0,0 +1,18 @@ +{ + "name": "md-seed-example", + "version": "2.0.0", + "description": "Example of using mongoose-data-seed", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "Avi Sharvit (https://sharvit.github.io)", + "license": "MIT", + "dependencies": { + "mongoose": "^5.0.0" + }, + "mdSeed": { + "seedersFolder": "./my-custom-seeders-folder", + "customSeederTemplate": "./custom-seeder-template.js" + } +} diff --git a/src/e2e/generate.e2e.js b/src/e2e/generate.e2e.js index 844e170..d552a3d 100644 --- a/src/e2e/generate.e2e.js +++ b/src/e2e/generate.e2e.js @@ -8,26 +8,15 @@ import FilesSandbox from './utils/files-sandbox'; import { runCommand } from '../lib/commands/helpers'; import config from '../lib/config'; -const createSandbox = () => { - const sandbox = new FilesSandbox('generate-'); - - const { sandboxPath } = sandbox; +const getSandboxExamplePath = (exampleName = 'sandbox-1') => + path.join(__dirname, `./generate-sandboxes/${exampleName}`); - const examplesFolderName = 'md-seed-example'; +const createSandbox = async sandboxOriginFilesPath => { + const sandbox = new FilesSandbox('generate-'); - fs.copyFileSync( - path.join(__dirname, `../../examples/${examplesFolderName}/package.json`), - path.join(sandboxPath, 'package.json') - ); - fs.copyFileSync( - path.join( - __dirname, - `../../examples/${examplesFolderName}/md-seed-config.js` - ), - path.join(sandboxPath, 'md-seed-config.js') - ); + await sandbox.copyFolderToSandbox(sandboxOriginFilesPath); - config.update(sandboxPath); + config.update(sandbox.sandboxPath); return sandbox; }; @@ -36,7 +25,10 @@ const getFilesForSnapshot = sandbox => sandbox .readFiles() .filter( - ({ name }) => name !== 'md-seed-config.js' && name !== 'package.json' + ({ name }) => + name !== 'md-seed-config.js' && + name !== 'custom-seeder-template.js' && + name !== 'package.json' ); test.beforeEach('mock', t => { @@ -67,7 +59,7 @@ test.serial( ); test.serial('md-seed generate some-seeder', async t => { - const sandbox = createSandbox(); + const sandbox = await createSandbox(getSandboxExamplePath('sandbox-1')); await t.notThrows(runCommand('generate', 'some-name')); @@ -78,3 +70,19 @@ test.serial('md-seed generate some-seeder', async t => { t.snapshot(console.log.args, 'log results'); t.snapshot(files, 'sandbox content'); }); + +test.serial( + 'md-seed generate some-seeder with custom template and seeders folder', + async t => { + const sandbox = await createSandbox(getSandboxExamplePath('sandbox-2')); + + await t.notThrows(runCommand('generate', 'some-name')); + + const files = getFilesForSnapshot(sandbox); + + sandbox.clean(); + + t.snapshot(console.log.args, 'log results'); + t.snapshot(files, 'sandbox content'); + } +); diff --git a/src/e2e/generate.e2e.js.md b/src/e2e/generate.e2e.js.md index b4f6ba5..028b262 100644 --- a/src/e2e/generate.e2e.js.md +++ b/src/e2e/generate.e2e.js.md @@ -73,3 +73,30 @@ Generated by [AVA](https://ava.li). > Snapshot 1 'Must contain md-seed-config.js at the project root. run `md-seed init` to create the config file.' + +## md-seed generate some-seeder with custom template and seeders folder + +> log results + + [ + [ + 'CREATED my-custom-seeders-folder/some-name.seeder.js', + ], + ] + +> sandbox content + + [ + { + content: [ + { + content: `console.log(␊ + 'I am SomeName and I created by a custom seeder template.'␊ + );␊ + `, + name: 'some-name.seeder.js', + }, + ], + name: 'my-custom-seeders-folder', + }, + ] diff --git a/src/e2e/generate.e2e.js.snap b/src/e2e/generate.e2e.js.snap index 9840fa45bb2eba7183b94bde80f1219db3cae8bd..2d12156d68aae4a4ae23760305fb69fc18599770 100644 GIT binary patch literal 918 zcmV;H18Mw0RzVZ9cjneS zLUbdDAlPngX_rD*-4;O*yXvN^f>7wHi@GYcnA$~Y&&>VNycnqx!GU3B&OP5b-#K&6 z+zW(|L2~-W(CoF@JJZ7-&Tqe|zWAOJGrq><@Qv1wf9-hdowYOnoUZ>dgd!u|W$)6%2Ood+=FHtM9V`7VpWPuscK&*+_x|V3{cnDLyYa*ID`y-lo!FMmwF)5) zsaQ{Rkc>K?QFp9ykdHME@Z(IdB+v{N7zs6nulaCFm2e{{TSlqRq z;qmc^-F#O^QuL9tP+?^gxt-h_+A%vck!2}6VG7D93V3H7d;^Vzjyw;k3fc_XX%w=O z+2hwkgSk{`XiA}jNEESocy2{)e@Q{0ZSK2?Tw+ZPiIm!hBo(k&Y zDmmnJI)L$wQg5vB?iByvuV6V6IIkAiZS&_$ z>I~m}J2En2(K`q-r8_D87Ih286>}F%XhL_HNDA?wVOr|sF<7E^5&TOZ(Sc2g{#Fv* zgB||{&dW|8(ZNlKuH#eC%+Jn8G~!*EXjm!gb`@HQyJlc}hUqu8`T!gQL5%)j51snADdGvyePs*U?>nKg02S{60?5$ZFLZ|Zf} zKR%5{Rv+0`!h s1iY*+2t)`c@>e>9b3F(ki>UasYR0=Ue)OyE__J5xf2)H=D0Bz_0J&1j0RR91 literal 770 zcmV+d1O5C#RzV~aqi5@ukUwWotxZ#X&LL= zcy_V~Stw`x-~lvjJ;!#TKEVq0adwMx8oG*-8l@f$3-xjt?Bxk&+k~W-oURgS0Ho;$ zl=xf;qS`byiU1ae*s0&zIu{-3%U*})3G<4YLt2SzP3U?la+gs9CB4x7G4a>~9cRU2 zn+6>dnd}}r>gGGj7ralLp>kup6#I#zfgimC7u_m#Pf&t1i-g|pq3@AVYl~G9Nw-Bw zEAl;>D%<@$*qw`{A`QWn>+>YHBAlCk%UO}cRi^fxP^{2~BB2ns6R1ac&rAr^C=)$2i&L^LgvfBZQA2j1jgmo=SNwSXm#> z+Mjn6Ko&ZMGmzgfE*9!n%IwC%?DW0a8Q5QAaU02!6pWgpJ6#K8`yZrcv`h)}X~I1; z|3H^c>y5WVLqmo=h(IYmhVdJ~CW>?VEhtwAAJ>^A<^ioV#l$%nq1!DxFmXt_29i9PDA>?H z&6VrCL1bG*fwvIx(J?UVZxB)yg}fWzX^4oc8PSLsq$Eej9J)puus|>KQFBSElO*0$ ztK{-n1)OZ|_zw^CY(B-PmLGF~Mb}LB9&Nf&p!%|?*#CO^6Z^F7UyEhT9?S&*0K+17 Ar~m)} diff --git a/src/e2e/run-sandboxes/sandbox-1/md-seed-generator.json b/src/e2e/run-sandboxes/sandbox-1/md-seed-generator.json deleted file mode 100644 index 5e10723..0000000 --- a/src/e2e/run-sandboxes/sandbox-1/md-seed-generator.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "seedersFolder": "seeders" -} diff --git a/src/e2e/run.e2e.js b/src/e2e/run.e2e.js index e1b4858..896a09f 100644 --- a/src/e2e/run.e2e.js +++ b/src/e2e/run.e2e.js @@ -1,7 +1,6 @@ import test from 'ava'; import sinon from 'sinon'; import path from 'path'; -import { ncp } from 'ncp'; import FilesSandbox from './utils/files-sandbox'; @@ -11,21 +10,12 @@ import config from '../lib/config'; const getSandboxExamplePath = (exampleName = 'sandbox-1') => path.join(__dirname, `./run-sandboxes/${exampleName}`); -const copyFolder = (source, destination) => - new Promise((resolve, reject) => { - ncp(source, destination, err => { - if (err) return reject(err); - resolve(); - }); - }); - const createSandbox = async sandboxOriginFilesPath => { const sandbox = new FilesSandbox('run-'); - const { sandboxPath } = sandbox; - await copyFolder(sandboxOriginFilesPath, sandboxPath); + await sandbox.copyFolderToSandbox(sandboxOriginFilesPath); - config.update(sandboxPath); + config.update(sandbox.sandboxPath); return sandbox; }; diff --git a/src/e2e/utils/files-sandbox.js b/src/e2e/utils/files-sandbox.js index bfeb2c8..f9621fc 100644 --- a/src/e2e/utils/files-sandbox.js +++ b/src/e2e/utils/files-sandbox.js @@ -1,6 +1,7 @@ import fs from 'fs'; import path from 'path'; import rimraf from 'rimraf'; +import { ncp } from 'ncp'; const sandboxesPath = path.join(__dirname, '../../sandboxes'); @@ -29,6 +30,15 @@ export default class FilesSandbox { this.sandboxPath = fs.mkdtempSync(path.join(sandboxesPath, prefix)); } + copyFolderToSandbox(source) { + return new Promise((resolve, reject) => + ncp(source, this.sandboxPath, err => { + if (err) return reject(err); + resolve(); + }) + ); + } + readFiles() { return readFolderFiles(this.sandboxPath); } diff --git a/src/lib/config.js b/src/lib/config.js index 4a9438f..3930828 100644 --- a/src/lib/config.js +++ b/src/lib/config.js @@ -40,21 +40,26 @@ const config = { }, update(projectRoot = getProjectRoot()) { - const userGeneratorConfig = this.getUserGeneratorConfig(projectRoot); + const { seedersFolder, customSeederTemplate } = this.getUserGeneratorConfig( + projectRoot + ); - const userSeedersFolderName = userGeneratorConfig.seedersFolder; + const userSeedersFolderName = seedersFolder; const userSeedersFolderPath = path.join(projectRoot, userSeedersFolderName); const userConfigFilename = 'md-seed-config.js'; const userConfigFilepath = path.join(projectRoot, userConfigFilename); const userConfigExists = fs.existsSync(userConfigFilepath); - const seederTemplate = path.join(__dirname, '../../templates/seeder.js'); const configTemplate = path.join( __dirname, '../../templates/md-seed-config.js' ); + const seederTemplate = customSeederTemplate + ? path.join(projectRoot, customSeederTemplate) + : path.join(__dirname, '../../templates/seeder.js'); + this.projectRoot = projectRoot; this.userConfigFilename = userConfigFilename; this.userConfigFilepath = userConfigFilepath;