mongoose-data-seed
Version:
Seed mongodb with data using mongoose models
480 lines (364 loc) • 23.6 kB
HTML
<html>
<head>
<meta charset="utf-8">
<base data-ice="baseUrl" href="../../../../">
<title data-ice="title">src/lib/core/md-seed-runner.test.js | mongoose-data-seed</title>
<link type="text/css" rel="stylesheet" href="css/style.css">
<link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css">
<script src="script/prettify/prettify.js"></script>
<script src="script/manual.js"></script>
<meta name="description" content="Seed mongodb with data using mongoose models"><meta property="twitter:card" content="summary"><meta property="twitter:title" content="mongoose-data-seed"><meta property="twitter:description" content="Seed mongodb with data using mongoose models"></head>
<body class="layout-container" data-ice="rootContainer">
<header>
<a href="./">Home</a>
<a href="identifiers.html">Reference</a>
<a href="source.html">Source</a>
<a href="test.html" data-ice="testLink">Test</a>
<div class="search-box">
<span>
<img src="./image/search.png">
<span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span>
</span>
<ul class="search-result"></ul>
</div>
<a style="position:relative; top:3px;" href="https://github.com/sharvit/mongoose-data-seed"><img width="20px" src="./image/github.png"></a></header>
<nav class="navigation" data-ice="nav"><div>
<ul>
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#lib">lib</a><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-config">config</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-configFilename">configFilename</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-defaultUserGeneratorConfig">defaultUserGeneratorConfig</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-systemConfigTemplate">systemConfigTemplate</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-systemSeederTemplate">systemSeederTemplate</a></span></span></li>
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#lib-commands">lib/commands</a><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-aliasToCommand">aliasToCommand</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-commandToFunction">commandToFunction</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getCommandAndArgvFromCli">getCommandAndArgvFromCli</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-isAlias">isAlias</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-runCommand">runCommand</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-aliases">aliases</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-availableCommandsList">availableCommandsList</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-commands">commands</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-commandsMap">commandsMap</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-defaultCommand">defaultCommand</a></span></span></li>
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#lib-commands-generate">lib/commands/generate</a><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-generateSeeder">generateSeeder</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-help">help</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-index">index</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getOptions">getOptions</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-validateOptions">validateOptions</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-optionDefinitions">optionDefinitions</a></span></span></li>
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#lib-commands-help">lib/commands/help</a><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-help">help</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-usageGuide">usageGuide</a></span></span></li>
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#lib-commands-init">lib/commands/init</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/commands/init/installer-logger.js~InstallerLogger.html">InstallerLogger</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-help">help</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-index">index</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getOptions">getOptions</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-promptMissingOptions">promptMissingOptions</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-runinstaller">runinstaller</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-optionDefinitions">optionDefinitions</a></span></span></li>
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#lib-commands-run">lib/commands/run</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/commands/run/run-logger.js~RunLogger.html">RunLogger</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-help">help</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-index">index</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getOptions">getOptions</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-run">run</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-optionDefinitions">optionDefinitions</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-usageGuide">usageGuide</a></span></span></li>
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#lib-core">lib/core</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/core/installer-error.js~InstallerError.html">InstallerError</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/core/installer.js~Installer.html">Installer</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/core/md-seed-runner-error.js~MdSeedRunnerError.html">MdSeedRunnerError</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/core/md-seed-runner.js~MdSeedRunner.html">MdSeedRunner</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/core/seeder-generator.js~SeederGenerator.html">SeederGenerator</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-typedef">T</span><span data-ice="name"><span><a href="typedef/index.html#static-typedef-InstallerConfig">InstallerConfig</a></span></span></li>
<li data-ice="doc"><a data-ice="dirPath" class="nav-dir-path" href="identifiers.html#lib-utils">lib/utils</a><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/utils/base-logger.js~BaseLogger.html">BaseLogger</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/lib/utils/seeder.js~Seeder.html">Seeder</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-exit">exit</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getFolderNameFromPath">getFolderNameFromPath</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-getObjectWithSelectedKeys">getObjectWithSelectedKeys</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-normalizeSeederFileName">normalizeSeederFileName</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-normalizeSeederName">normalizeSeederName</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-validateSeederTemplatePath">validateSeederTemplatePath</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-validateSeedersFolderName">validateSeedersFolderName</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-function">F</span><span data-ice="name"><span><a href="function/index.html#static-function-validateUserConfig">validateUserConfig</a></span></span></li>
<li data-ice="doc"><span data-ice="kind" class="kind-variable">V</span><span data-ice="name"><span><a href="variable/index.html#static-variable-ExitCodes">ExitCodes</a></span></span></li>
</ul>
</div>
</nav>
<div class="content" data-ice="content"><h1 data-ice="title">src/lib/core/md-seed-runner.test.js</h1>
<pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import test from 'ava';
import sinon from 'sinon';
import { toArray } from 'rxjs/operators';
import { mockImports, resetImports } from '../utils/test-helpers';
import MdSeedRunnerError from './md-seed-runner-error';
import MdSeedRunner, {
__RewireAPI__ as moduleRewireAPI,
} from './md-seed-runner';
const helpData = {
connect: sinon.stub().resolves(),
dropdb: sinon.stub().resolves(),
seedersList: {
Users: 'users-seeder',
Posts: 'posts-seeder',
},
};
test.beforeEach('mock imports', t => {
const mocks = {
getObjectWithSelectedKeys: sinon.stub(),
normalizeSeederName: sinon.stub().returnsArg(0),
};
t.context = { mocks };
mockImports({ moduleRewireAPI, mocks });
});
test.afterEach.always('unmock imports', t => {
const imports = Object.keys(t.context.mocks);
resetImports({ moduleRewireAPI, imports });
});
test('Should create a run-logger instance', t => {
const seedRunner = new MdSeedRunner({ ...helpData });
t.is(seedRunner.connect, helpData.connect);
t.is(seedRunner.dropdb, helpData.dropdb);
t.is(seedRunner.seedersList, helpData.seedersList);
t.is(typeof seedRunner.run, 'function');
});
test('Should run', t => {
const seedRunner = new MdSeedRunner({ ...helpData });
sinon.stub(seedRunner, '_run');
const observable = seedRunner.run();
t.true(
seedRunner._run.calledWith({ selectedSeeders: [], dropDatabase: false })
);
t.is(typeof observable.subscribe, 'function');
});
test('Should run with args', t => {
const seedRunner = new MdSeedRunner({ ...helpData });
sinon.stub(seedRunner, '_run');
const selectedSeeders = Object.keys(helpData.seedersList);
const dropDatabase = true;
const observable = seedRunner.run({ selectedSeeders, dropDatabase });
t.true(seedRunner._run.calledWith({ selectedSeeders, dropDatabase }));
t.is(typeof observable.subscribe, 'function');
});
test('Should _run', async t => {
t.plan(4);
const seedRunner = new MdSeedRunner({ ...helpData });
sinon.stub(seedRunner, '_connectToMongodb').resolves();
sinon.stub(seedRunner, '_dropDatabase').resolves();
sinon.stub(seedRunner, '_runSeeders').resolves();
const selectedSeeders = Object.keys(helpData.seedersList);
const dropDatabase = false;
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results));
await seedRunner._run({ selectedSeeders, dropDatabase });
t.true(seedRunner._connectToMongodb.called);
t.true(seedRunner._runSeeders.calledWith(selectedSeeders));
t.false(seedRunner._dropDatabase.called);
});
test('Should _run and drop database', async t => {
t.plan(4);
const seedRunner = new MdSeedRunner({ ...helpData });
sinon.stub(seedRunner, '_connectToMongodb').resolves();
sinon.stub(seedRunner, '_dropDatabase').resolves();
sinon.stub(seedRunner, '_runSeeders').resolves();
const selectedSeeders = Object.keys(helpData.seedersList);
const dropDatabase = true;
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results));
await seedRunner._run({ selectedSeeders, dropDatabase });
t.true(seedRunner._connectToMongodb.called);
t.true(seedRunner._runSeeders.calledWith(selectedSeeders));
t.true(seedRunner._dropDatabase.called);
});
test('Should _run and fail', async t => {
t.plan(4);
const seedRunner = new MdSeedRunner({ ...helpData });
sinon.stub(seedRunner, '_connectToMongodb').rejects();
sinon.stub(seedRunner, '_dropDatabase').resolves();
sinon.stub(seedRunner, '_runSeeders').resolves();
const selectedSeeders = Object.keys(helpData.seedersList);
const dropDatabase = true;
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.catch(error => t.snapshot(error));
await seedRunner._run({ selectedSeeders, dropDatabase });
t.true(seedRunner._connectToMongodb.called);
t.false(seedRunner._runSeeders.called);
t.false(seedRunner._dropDatabase.called);
});
test('Should _run and fail with type and payload', async t => {
t.plan(4);
const seedRunner = new MdSeedRunner({ ...helpData });
const error = new MdSeedRunnerError({
type: 'some-type',
payload: { some: 'data' },
error: new Error('some error message'),
});
sinon.stub(seedRunner, '_connectToMongodb').rejects(error);
sinon.stub(seedRunner, '_dropDatabase').resolves();
sinon.stub(seedRunner, '_runSeeders').resolves();
const selectedSeeders = Object.keys(helpData.seedersList);
const dropDatabase = true;
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.catch(error => t.snapshot(error));
await seedRunner._run({ selectedSeeders, dropDatabase });
t.true(seedRunner._connectToMongodb.called);
t.false(seedRunner._runSeeders.called);
t.false(seedRunner._dropDatabase.called);
});
test('Should _connectToMongodb', async t => {
t.plan(2);
const seedRunner = new MdSeedRunner({ ...helpData });
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results));
await seedRunner._connectToMongodb();
seedRunner._subject.complete();
t.true(helpData.connect.called);
});
test('Should _connectToMongodb and fail', async t => {
t.plan(3);
const data = {
...helpData,
connect: sinon.stub().rejects(new Error('some-error')),
};
const seedRunner = new MdSeedRunner({ ...data });
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results, 'observable results'));
try {
await seedRunner._connectToMongodb();
} catch (error) {
t.snapshot(error, 'connect to mongodb error');
}
seedRunner._subject.complete();
t.true(data.connect.called);
});
test('Should _dropDatabase', async t => {
t.plan(2);
const seedRunner = new MdSeedRunner({ ...helpData });
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results));
await seedRunner._dropDatabase();
seedRunner._subject.complete();
t.true(helpData.dropdb.called);
});
test('Should _dropDatabase and fail', async t => {
t.plan(3);
const data = {
...helpData,
dropdb: sinon.stub().rejects(new Error('some-error')),
};
const seedRunner = new MdSeedRunner({ ...data });
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results, 'observable results'));
try {
await seedRunner._dropDatabase();
} catch (error) {
t.snapshot(error, 'dropdb error');
}
seedRunner._subject.complete();
t.true(data.dropdb.called);
});
test('Should _runSeeders', async t => {
t.plan(3);
const selectedSeeders = Object.keys(helpData.seedersList);
const seedRunner = new MdSeedRunner({ ...helpData });
sinon
.stub(seedRunner, '_loadSelectedSeeders')
.withArgs(selectedSeeders)
.returns(selectedSeeders);
sinon.stub(seedRunner, '_runSeeder').resolves();
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results, 'observable results'));
await seedRunner._runSeeders(selectedSeeders);
seedRunner._subject.complete();
t.true(seedRunner._loadSelectedSeeders.calledWith(selectedSeeders));
t.snapshot(seedRunner._runSeeder.args, '_runSeeder args');
});
test('Should _runSeeder', async t => {
t.plan(3);
const name = 'User';
const Seeder = sinon.stub();
Seeder.prototype.seed = sinon.stub().resolves('some-results');
const seedRunner = new MdSeedRunner({ ...helpData });
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results, 'observable results'));
await seedRunner._runSeeder({ Seeder, name });
seedRunner._subject.complete();
t.true(Seeder.called);
t.true(Seeder.prototype.seed.called);
});
test('Should _runSeeder and fail', async t => {
t.plan(4);
const name = 'User';
const Seeder = sinon.stub();
Seeder.prototype.seed = sinon.stub().rejects(new Error('some-error'));
const seedRunner = new MdSeedRunner({ ...helpData });
seedRunner._subject
.asObservable()
.pipe(toArray())
.toPromise()
.then(results => t.snapshot(results, 'observable results'));
try {
await seedRunner._runSeeder({ Seeder, name });
} catch (error) {
t.snapshot(error, '_runSeeder error');
}
seedRunner._subject.complete();
t.true(Seeder.called);
t.true(Seeder.prototype.seed.called);
});
test('should _loadSelectedSeeders with no args', t => {
const seedRunner = new MdSeedRunner({ ...helpData });
const selectedSeeders = seedRunner._loadSelectedSeeders();
t.is(selectedSeeders, helpData.seedersList);
});
test('should _loadSelectedSeeders with empty array', t => {
const seedRunner = new MdSeedRunner({ ...helpData });
const selectedSeeders = seedRunner._loadSelectedSeeders([]);
t.is(selectedSeeders, helpData.seedersList);
});
test('should _loadSelectedSeeders', t => {
const { getObjectWithSelectedKeys } = t.context.mocks;
const seedRunner = new MdSeedRunner({ ...helpData });
seedRunner._loadSelectedSeeders(['User']);
t.true(getObjectWithSelectedKeys.calledWith(helpData.seedersList, ['User']));
});
</code></pre>
</div>
<footer class="footer">
Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(1.1.0)</span><img src="./image/esdoc-logo-mini-black.png"></a>
</footer>
<script src="script/search_index.js"></script>
<script src="script/search.js"></script>
<script src="script/pretty-print.js"></script>
<script src="script/inherited-summary.js"></script>
<script src="script/test-summary.js"></script>
<script src="script/inner-link.js"></script>
<script src="script/patch-for-local.js"></script>
</body>
</html>