Skip to content

Commit

Permalink
fix(stencil-init.spec.js): fixed a broken test
Browse files Browse the repository at this point in the history
  • Loading branch information
MaxGenash committed Aug 7, 2020
1 parent 8bdd3d4 commit 66ab50d
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 30 deletions.
16 changes: 8 additions & 8 deletions bin/stencil-init
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#!/usr/bin/env node

require('colors');
var stencilInit = require('../lib/stencil-init');
var pkg = require('../package.json');
var Program = require('commander');
var JspmAssembler = require('../lib/jspm-assembler');
var ThemeConfig = require('../lib/theme-config');
var dotStencilFilePath = './.stencil';
var versionCheck = require('../lib/version-check');
const StencilInit = require('../lib/stencil-init');
const pkg = require('../package.json');
const Program = require('commander');
const JspmAssembler = require('../lib/jspm-assembler');
const ThemeConfig = require('../lib/theme-config');
const dotStencilFilePath = './.stencil';
const versionCheck = require('../lib/version-check');

Program
.version(pkg.version)
Expand All @@ -20,4 +20,4 @@ if (!versionCheck()) {
return;
}

stencilInit(JspmAssembler, ThemeConfig, dotStencilFilePath, Program.url, Program.token, Program.port);
StencilInit.run(JspmAssembler, ThemeConfig, dotStencilFilePath, Program.url, Program.token, Program.port);
45 changes: 30 additions & 15 deletions bin/stencil-init.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,45 +3,60 @@
const Code = require('code');
const Sinon = require('sinon');
const Lab = require('@hapi/lab');
const Fs = require('fs');
const lab = exports.lab = Lab.script();
const describe = lab.describe;
const Inquirer = require('inquirer');
const expect = Code.expect;
const it = lab.it;
const StencilInit = require('../lib/stencil-init');
const JspmAssembler = require('../lib/jspm-assembler');
const ThemeConfig = require('../lib/theme-config');

describe('stencil init', () => {
let sandbox;
let consoleErrorStub;
let JspmAssemblerStub;
let ThemeConfigStub;
let inquirerPromptStub;

lab.beforeEach(() => {
sandbox = Sinon.createSandbox();

sandbox.stub(console, 'log');
sandbox.stub(console, 'error');
consoleErrorStub = sandbox.stub(console, 'error');

inquirerPromptStub = sandbox.stub(Inquirer, 'prompt');
inquirerPromptStub.returns({});

ThemeConfigStub = sandbox.stub(ThemeConfig);
ThemeConfigStub.getInstance = sandbox.stub().returns({
getConfig: sandbox.stub().returns({}),
});
JspmAssemblerStub = sandbox.stub(JspmAssembler);

sandbox.stub(Fs, 'writeFileSync');
});

lab.afterEach(() => {
sandbox.restore();
});

var inquirer = Sinon.spy(Inquirer, 'prompt');

it('should call prompt', () => {
const dotStencilFile = '../_mocks/bin/dotStencilFile.json';
const jspmAssembler = Sinon.stub();
const themeConfig = Sinon.spy();
it('Should call prompt on run and not log errors if the .stencil file is valid', async () => {
const dotStencilFilePath = './test/_mocks/bin/dotStencilFile.json';

StencilInit(jspmAssembler, themeConfig, dotStencilFile);
await StencilInit.run(JspmAssemblerStub, ThemeConfigStub, dotStencilFilePath);

expect(inquirer.calledOnce).to.be.true();
expect(consoleErrorStub.calledOnce).to.be.false();
expect(inquirerPromptStub.calledOnce).to.be.true();
});

it('should not call prompt with bad JSON from dotStencilFile', () => {
const dotStencilFile = '../_mocks/malformedSchema.json';
const jspmAssembler = Sinon.stub();
const themeConfig = Sinon.spy();
it('Should inform the user if the .stencil file is broken but continue running', async () => {
const dotStencilFilePath = './test/_mocks/malformedSchema.json';

StencilInit(jspmAssembler, themeConfig, dotStencilFile);
await StencilInit.run(JspmAssemblerStub, ThemeConfigStub, dotStencilFilePath);

expect(inquirer.calledOnce).to.be.false();
expect(consoleErrorStub.calledOnce).to.be.true();
expect(inquirerPromptStub.calledOnce).to.be.true();
});
});
20 changes: 13 additions & 7 deletions lib/stencil-init.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ async function performAnswers(JspmAssembler, ThemeConfig, stencilConfig, dotSten
const performedStencilConfig = stencilConfig ? hoek.applyToDefaults(stencilConfig, answers) : answers;

Fs.writeFileSync(dotStencilFilePath, JSON.stringify(performedStencilConfig, null, 2));
const ready = 'You are now ready to go! To start developing, run $ ' + 'stencil start'.cyan;

// bundle dev dependencies
const themeConfig = ThemeConfig.getInstance(themePath).getConfig();
Expand All @@ -42,19 +41,21 @@ async function performAnswers(JspmAssembler, ThemeConfig, stencilConfig, dotSten
const bundleTask = promisify(JspmAssembler.assemble.bind(JspmAssembler));
await bundleTask(themeConfig.jspm, themePath);
}

console.log(ready);
}

async function implementation(JspmAssembler, ThemeConfig, dotStencilFilePath, url, token, port) {
async function run(JspmAssembler, ThemeConfig, dotStencilFilePath, url, token, port) {
let stencilConfig;

if (Fs.existsSync(dotStencilFilePath)) {
const dotStencilFile = Fs.readFileSync(dotStencilFilePath, { encoding: 'utf-8' });
try {
stencilConfig = jsonLint.parse(dotStencilFile, dotStencilFilePath);
} catch (e) {
return console.error(e.fileName, e.stack);
} catch (err) {
console.error(
'Detected a broken .stencil file: ',
err,
'\nThe file will be rewritten with your answers',
);
}
}

Expand Down Expand Up @@ -100,6 +101,11 @@ async function implementation(JspmAssembler, ThemeConfig, dotStencilFilePath, ur
const answers = await Inquirer.prompt(questions);

await performAnswers(JspmAssembler, ThemeConfig, stencilConfig, dotStencilFilePath, answers);

console.log('You are now ready to go! To start developing, run $ ' + 'stencil start'.cyan);
}

module.exports = implementation;
module.exports = {
performAnswers,
run,
};

0 comments on commit 66ab50d

Please sign in to comment.