UNPKG

mongoose-data-seed

Version:

Seed mongodb with data using mongoose models

480 lines (364 loc) 23.6 kB
<!DOCTYPE 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 &apos;ava&apos;; import sinon from &apos;sinon&apos;; import { toArray } from &apos;rxjs/operators&apos;; import { mockImports, resetImports } from &apos;../utils/test-helpers&apos;; import MdSeedRunnerError from &apos;./md-seed-runner-error&apos;; import MdSeedRunner, { __RewireAPI__ as moduleRewireAPI, } from &apos;./md-seed-runner&apos;; const helpData = { connect: sinon.stub().resolves(), dropdb: sinon.stub().resolves(), seedersList: { Users: &apos;users-seeder&apos;, Posts: &apos;posts-seeder&apos;, }, }; test.beforeEach(&apos;mock imports&apos;, t =&gt; { const mocks = { getObjectWithSelectedKeys: sinon.stub(), normalizeSeederName: sinon.stub().returnsArg(0), }; t.context = { mocks }; mockImports({ moduleRewireAPI, mocks }); }); test.afterEach.always(&apos;unmock imports&apos;, t =&gt; { const imports = Object.keys(t.context.mocks); resetImports({ moduleRewireAPI, imports }); }); test(&apos;Should create a run-logger instance&apos;, t =&gt; { 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, &apos;function&apos;); }); test(&apos;Should run&apos;, t =&gt; { const seedRunner = new MdSeedRunner({ ...helpData }); sinon.stub(seedRunner, &apos;_run&apos;); const observable = seedRunner.run(); t.true( seedRunner._run.calledWith({ selectedSeeders: [], dropDatabase: false }) ); t.is(typeof observable.subscribe, &apos;function&apos;); }); test(&apos;Should run with args&apos;, t =&gt; { const seedRunner = new MdSeedRunner({ ...helpData }); sinon.stub(seedRunner, &apos;_run&apos;); 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, &apos;function&apos;); }); test(&apos;Should _run&apos;, async t =&gt; { t.plan(4); const seedRunner = new MdSeedRunner({ ...helpData }); sinon.stub(seedRunner, &apos;_connectToMongodb&apos;).resolves(); sinon.stub(seedRunner, &apos;_dropDatabase&apos;).resolves(); sinon.stub(seedRunner, &apos;_runSeeders&apos;).resolves(); const selectedSeeders = Object.keys(helpData.seedersList); const dropDatabase = false; seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; 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(&apos;Should _run and drop database&apos;, async t =&gt; { t.plan(4); const seedRunner = new MdSeedRunner({ ...helpData }); sinon.stub(seedRunner, &apos;_connectToMongodb&apos;).resolves(); sinon.stub(seedRunner, &apos;_dropDatabase&apos;).resolves(); sinon.stub(seedRunner, &apos;_runSeeders&apos;).resolves(); const selectedSeeders = Object.keys(helpData.seedersList); const dropDatabase = true; seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; 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(&apos;Should _run and fail&apos;, async t =&gt; { t.plan(4); const seedRunner = new MdSeedRunner({ ...helpData }); sinon.stub(seedRunner, &apos;_connectToMongodb&apos;).rejects(); sinon.stub(seedRunner, &apos;_dropDatabase&apos;).resolves(); sinon.stub(seedRunner, &apos;_runSeeders&apos;).resolves(); const selectedSeeders = Object.keys(helpData.seedersList); const dropDatabase = true; seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .catch(error =&gt; t.snapshot(error)); await seedRunner._run({ selectedSeeders, dropDatabase }); t.true(seedRunner._connectToMongodb.called); t.false(seedRunner._runSeeders.called); t.false(seedRunner._dropDatabase.called); }); test(&apos;Should _run and fail with type and payload&apos;, async t =&gt; { t.plan(4); const seedRunner = new MdSeedRunner({ ...helpData }); const error = new MdSeedRunnerError({ type: &apos;some-type&apos;, payload: { some: &apos;data&apos; }, error: new Error(&apos;some error message&apos;), }); sinon.stub(seedRunner, &apos;_connectToMongodb&apos;).rejects(error); sinon.stub(seedRunner, &apos;_dropDatabase&apos;).resolves(); sinon.stub(seedRunner, &apos;_runSeeders&apos;).resolves(); const selectedSeeders = Object.keys(helpData.seedersList); const dropDatabase = true; seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .catch(error =&gt; t.snapshot(error)); await seedRunner._run({ selectedSeeders, dropDatabase }); t.true(seedRunner._connectToMongodb.called); t.false(seedRunner._runSeeders.called); t.false(seedRunner._dropDatabase.called); }); test(&apos;Should _connectToMongodb&apos;, async t =&gt; { t.plan(2); const seedRunner = new MdSeedRunner({ ...helpData }); seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; t.snapshot(results)); await seedRunner._connectToMongodb(); seedRunner._subject.complete(); t.true(helpData.connect.called); }); test(&apos;Should _connectToMongodb and fail&apos;, async t =&gt; { t.plan(3); const data = { ...helpData, connect: sinon.stub().rejects(new Error(&apos;some-error&apos;)), }; const seedRunner = new MdSeedRunner({ ...data }); seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; t.snapshot(results, &apos;observable results&apos;)); try { await seedRunner._connectToMongodb(); } catch (error) { t.snapshot(error, &apos;connect to mongodb error&apos;); } seedRunner._subject.complete(); t.true(data.connect.called); }); test(&apos;Should _dropDatabase&apos;, async t =&gt; { t.plan(2); const seedRunner = new MdSeedRunner({ ...helpData }); seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; t.snapshot(results)); await seedRunner._dropDatabase(); seedRunner._subject.complete(); t.true(helpData.dropdb.called); }); test(&apos;Should _dropDatabase and fail&apos;, async t =&gt; { t.plan(3); const data = { ...helpData, dropdb: sinon.stub().rejects(new Error(&apos;some-error&apos;)), }; const seedRunner = new MdSeedRunner({ ...data }); seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; t.snapshot(results, &apos;observable results&apos;)); try { await seedRunner._dropDatabase(); } catch (error) { t.snapshot(error, &apos;dropdb error&apos;); } seedRunner._subject.complete(); t.true(data.dropdb.called); }); test(&apos;Should _runSeeders&apos;, async t =&gt; { t.plan(3); const selectedSeeders = Object.keys(helpData.seedersList); const seedRunner = new MdSeedRunner({ ...helpData }); sinon .stub(seedRunner, &apos;_loadSelectedSeeders&apos;) .withArgs(selectedSeeders) .returns(selectedSeeders); sinon.stub(seedRunner, &apos;_runSeeder&apos;).resolves(); seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; t.snapshot(results, &apos;observable results&apos;)); await seedRunner._runSeeders(selectedSeeders); seedRunner._subject.complete(); t.true(seedRunner._loadSelectedSeeders.calledWith(selectedSeeders)); t.snapshot(seedRunner._runSeeder.args, &apos;_runSeeder args&apos;); }); test(&apos;Should _runSeeder&apos;, async t =&gt; { t.plan(3); const name = &apos;User&apos;; const Seeder = sinon.stub(); Seeder.prototype.seed = sinon.stub().resolves(&apos;some-results&apos;); const seedRunner = new MdSeedRunner({ ...helpData }); seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; t.snapshot(results, &apos;observable results&apos;)); await seedRunner._runSeeder({ Seeder, name }); seedRunner._subject.complete(); t.true(Seeder.called); t.true(Seeder.prototype.seed.called); }); test(&apos;Should _runSeeder and fail&apos;, async t =&gt; { t.plan(4); const name = &apos;User&apos;; const Seeder = sinon.stub(); Seeder.prototype.seed = sinon.stub().rejects(new Error(&apos;some-error&apos;)); const seedRunner = new MdSeedRunner({ ...helpData }); seedRunner._subject .asObservable() .pipe(toArray()) .toPromise() .then(results =&gt; t.snapshot(results, &apos;observable results&apos;)); try { await seedRunner._runSeeder({ Seeder, name }); } catch (error) { t.snapshot(error, &apos;_runSeeder error&apos;); } seedRunner._subject.complete(); t.true(Seeder.called); t.true(Seeder.prototype.seed.called); }); test(&apos;should _loadSelectedSeeders with no args&apos;, t =&gt; { const seedRunner = new MdSeedRunner({ ...helpData }); const selectedSeeders = seedRunner._loadSelectedSeeders(); t.is(selectedSeeders, helpData.seedersList); }); test(&apos;should _loadSelectedSeeders with empty array&apos;, t =&gt; { const seedRunner = new MdSeedRunner({ ...helpData }); const selectedSeeders = seedRunner._loadSelectedSeeders([]); t.is(selectedSeeders, helpData.seedersList); }); test(&apos;should _loadSelectedSeeders&apos;, t =&gt; { const { getObjectWithSelectedKeys } = t.context.mocks; const seedRunner = new MdSeedRunner({ ...helpData }); seedRunner._loadSelectedSeeders([&apos;User&apos;]); t.true(getObjectWithSelectedKeys.calledWith(helpData.seedersList, [&apos;User&apos;])); }); </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>