it('has expected hooks', () => { const expected = [ 'init', 'metadata' ]; assume(plugin).to.have.property('hooks'); const hooks = Object.keys(plugin.hooks); assume(hooks).eqls(expected); assume(hooks).is.length(expected.length); });
it('executes expected bootstrap actions', async () => { const cmd = new CreateCommand(['myapp', '--presets=nextjs']); await cmd.run(); assume(actionStubs.mkDir).is.called(); assume(actionStubs.loadPreset).is.called(); assume(actionStubs.globalPrompts).is.called(); assume(actionStubs.setupPkg).is.called(); assume(actionStubs.writePkg).is.called(); assume(actionStubs.installModules).is.called(); assume(actionStubs.linkModules).is.called(); assume(actionStubs.postCreateHooks).is.called(); });
it('instantiates PackageJson app name and description', async () => { await setupPkg.wrapped(mockContext); assume(packageJsonSpy).is.called(); assume(packageJsonSpy.args[0][0]).property('name', mockContext.appName); assume(packageJsonSpy.args[0][0]).property('description', mockContext.appDescription); });
it('calls info with the correct package manager', async function () { stdout = '{}'; runner = sinon.stub().resolves({ stdout }); PackageManager = manager(runner); const pkg = new PackageManager({ packageManager }); await pkg.info(); assume(runner.called).is.true(); assume(runner.firstCall.args[0]).contains(packageManager); assume(runner.firstCall.args[1]).contains('info'); });
it('dumps log on errors', async () => { actionStubs.mkDir.rejects(new Error('YOUR DRIVE EXPLODED!')); const cmd = new CreateCommand(['myapp', '--presets=nextjs']); try { await cmd.run(); } catch (e) { assume(dumpErrorContext).is.called(); } });
it('executes printReport', async () => { const cmd = new CreateCommand(['myapp', '--presets=nextjs']); await cmd.run(); assume(actionStubs.printReport).is.called(); });
it('adds a json helper to handlebars', async () => { await generateFiles(mockContext); assume(registerHelperStub).is.called(); assume(registerHelperStub.args[0][0]).to.eqls('json'); });
it('returns object with stdout and parsed data', async function () { stdout = packageManager === 'yarn' ? '{ "data": "1.2.3" }' : '"1.2.3"'; runner = sinon.stub().resolves({ stdout }); PackageManager = manager(runner); const pkg = new PackageManager({ packageManager }); const res = await pkg.info(); assume(res).is.a('object'); assume(res.stdout).equals(stdout); assume(res.data).equals('1.2.3'); });
it('returns data object', async function () { stdout = packageManager === 'yarn' ? '{ "data": { "something": "^3.4.5" } }' : '{ "something": "^3.4.5" }'; runner = sinon.stub().resolves({ stdout }); PackageManager = manager(runner); const pkg = new PackageManager({ packageManager }); const res = await pkg.info(); assume(res.data).is.a('object'); assume(res.data).eqls({ something: '^3.4.5' }); });
it('prints exit message when no preset found', async () => { const cmd = new CreateCommand(['myapp']); try { await cmd.run(); } catch (e) { assume(consoleErrorStub).is.called(); } });
it('calls info with the --json flag', async function () { stdout = '{}'; runner = sinon.stub().resolves({ stdout }); PackageManager = manager(runner); const pkg = new PackageManager({ packageManager }); await pkg.info(); assume(runner.called).is.true(); assume(runner.firstCall.args[1]).contains('--json'); });
it('returns data array', async function () { stdout = packageManager === 'yarn' ? '{ "data": ["maintainer <my@email.com>"] }' : '["maintainer <my@email.com>"]'; runner = sinon.stub().resolves({ stdout }); PackageManager = manager(runner); const pkg = new PackageManager({ packageManager }); const res = await pkg.info(); assume(res.data).is.a('array'); assume(res.data).eqls(['maintainer <my@email.com>']); });
it('executes printReport', async () => { const cmd = new CreateCommand(['myapp', '--presets=nextjs']); await cmd.run(); assume(actionStubs.printReport).is.called(); });
it('prints exit message', async () => { actionStubs.mkDir.rejects(new Error('YOUR DRIVE EXPLODED!')); const cmd = new CreateCommand(['myapp', '--presets=nextjs']); try { await cmd.run(); } catch (e) { assume(consoleErrorStub).is.called(); } });
it('prints exit message when no preset found', async () => { const cmd = new CreateCommand(['myapp']); try { await cmd.run(); } catch (e) { assume(consoleErrorStub).is.called(); } });