it('adds env if mocha present', async () => { pkgHas.callsFake((_, name) => ['eslint', 'mocha'].includes(name)); await codeStyle.create(context, utils); assume(pkgAdd).calledWithMatch('eslintConfig', { env: { mocha: true } }); });
it('[semver] warns when newer range conflicts', () => { pkg.add('dependencies', { 'some-pkg': '^1.2.0' }, pluginOne); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); pkg.add('dependencies', { 'some-pkg': '^2.0.0' }, pluginTwo); assume(warnSpy).calledWithMatch('Conflicting versions for some-pkg in "dependencies"'); assume(warnSpy).calledWithMatch(`^1.2.0 provided by ${pluginOne.name}`); assume(warnSpy).calledWithMatch(`^2.0.0 provided by ${pluginTwo.name}`); assume(warnSpy).calledWithMatch('Using ^2.0.0, but'); });
it('rejects with an Error about ports on failure (with http)', async () => { createServersModule.yields(errs.create({ http: { errno: 'EADDRINUSE' } })); await start(); const expected = 'Port is already in use'; assume(gasketAPI.logger.error).calledWithMatch(expected); assume(debugStub.args[0][0].message).to.match(expected); assume(debugStub.args[0][1].http.errno).equals('EADDRINUSE'); });
it('adds posttest script for lint && stylelint', async () => { pkgHas.callsFake((_, name) => ['eslint', 'stylelint'].includes(name)); await codeStyle.create(context, utils); assume(pkgAdd).calledWithMatch('scripts', { posttest: sinon.match.string }); assume(utils.runScriptStr).calledWith('lint'); assume(utils.runScriptStr).calledWith('stylelint'); });
it('does not add posttest script if no eslint or stylelint', async () => { pkgHas.callsFake((_, name) => [].includes(name)); await codeStyle.create(context, utils); assume(pkgAdd).not.calledWithMatch('scripts', { posttest: sinon.match.string }); });
it('adds lint scripts if eslint present', async () => { pkgHas.callsFake((_, name) => ['eslint'].includes(name)); await codeStyle.create(context, utils); assume(pkgAdd).calledWithMatch('scripts', { 'lint': sinon.match.string, 'lint:fix': sinon.match.string }); assume(utils.runScriptStr).calledWith('lint -- --fix'); });
it('[semver] warns when older range conflicts', () => { pkg.add('dependencies', { 'some-pkg': '^2.2.0' }, pluginOne); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^2.2.0' }); pkg.add('dependencies', { 'some-pkg': '^1.0.0' }, pluginTwo); assume(warnSpy).calledWithMatch('Conflicting versions for some-pkg in "dependencies"'); assume(warnSpy).calledWithMatch(`^2.2.0 provided by ${pluginOne.name}`); assume(warnSpy).calledWithMatch(`^1.0.0 provided by ${pluginTwo.name}`); assume(warnSpy).calledWithMatch('Using ^2.2.0, but'); });
it('[semver] warns when previously forced range conflicts', () => { pkg.add('dependencies', { 'some-pkg': '^1.2.0' }, pluginOne, { force: true }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); pkg.add('dependencies', { 'some-pkg': '^2.0.0' }, pluginTwo); assume(warnSpy).calledWithMatch('Conflicting versions for some-pkg in "dependencies"'); assume(warnSpy).calledWithMatch(`^1.2.0 provided by ${pluginOne.name} (forced)`); assume(warnSpy).calledWithMatch(`^2.0.0 provided by ${pluginTwo.name}`); assume(warnSpy).calledWithMatch('Using ^1.2.0, but'); });
it('adds stylelint scripts if stylelint present', async () => { pkgHas.callsFake((prop, name) => prop === 'devDependencies' && ['stylelint'].includes(name)); await codeStyle.create(context, utils); assume(pkgAdd).calledWithMatch('scripts', { 'stylelint': sinon.match.string, 'stylelint:fix': sinon.match.string }); assume(utils.runScriptStr).calledWith('stylelint -- --fix'); });
it('adds stylelint scripts if stylelint present', async () => { pkgHas.callsFake((prop, name) => prop === 'devDependencies' && ['stylelint'].includes(name)); await codeStyle.create(context, utils); assume(pkgAdd).calledWithMatch('scripts', { 'stylelint': sinon.match.string, 'stylelint:fix': sinon.match.string }); assume(utils.runScriptStr).calledWith('stylelint -- --fix'); });
it('[semver] warns when older range conflicts', () => { pkg.add('dependencies', { 'some-pkg': '^2.2.0' }, pluginOne); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^2.2.0' }); pkg.add('dependencies', { 'some-pkg': '^1.0.0' }, pluginTwo); assume(warnSpy).calledWithMatch('Conflicting versions for some-pkg in "dependencies"'); assume(warnSpy).calledWithMatch(`^2.2.0 provided by ${pluginOne.name}`); assume(warnSpy).calledWithMatch(`^1.0.0 provided by ${pluginTwo.name}`); assume(warnSpy).calledWithMatch('Using ^2.2.0, but'); });
it('[semver] warns when previously forced range conflicts', () => { pkg.add('dependencies', { 'some-pkg': '^1.2.0' }, pluginOne, { force: true }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); pkg.add('dependencies', { 'some-pkg': '^2.0.0' }, pluginTwo); assume(warnSpy).calledWithMatch('Conflicting versions for some-pkg in "dependencies"'); assume(warnSpy).calledWithMatch(`^1.2.0 provided by ${pluginOne.name} (forced)`); assume(warnSpy).calledWithMatch(`^2.0.0 provided by ${pluginTwo.name}`); assume(warnSpy).calledWithMatch('Using ^1.2.0, but'); });
it('[semver] warns when attempted re-force range conflicts', () => { pkg.add('dependencies', { 'some-pkg': '^2.0.0' }, pluginOne, { force: true }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^2.0.0' }); pkg.add('dependencies', { 'some-pkg': '^1.2.0' }, pluginTwo, { force: true }); assume(warnSpy).calledWithMatch('Conflicting versions for some-pkg in "dependencies"'); assume(warnSpy).calledWithMatch(`^2.0.0 provided by ${pluginOne.name} (forced)`); assume(warnSpy).calledWithMatch(`^1.2.0 provided by ${pluginTwo.name} (cannot be forced)`); assume(warnSpy).calledWithMatch('Using ^2.0.0, but'); });
it('[semver] warns when attempted re-force range conflicts', () => { pkg.add('dependencies', { 'some-pkg': '^2.0.0' }, pluginOne, { force: true }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^2.0.0' }); pkg.add('dependencies', { 'some-pkg': '^1.2.0' }, pluginTwo, { force: true }); assume(warnSpy).calledWithMatch('Conflicting versions for some-pkg in "dependencies"'); assume(warnSpy).calledWithMatch(`^2.0.0 provided by ${pluginOne.name} (forced)`); assume(warnSpy).calledWithMatch(`^1.2.0 provided by ${pluginTwo.name} (cannot be forced)`); assume(warnSpy).calledWithMatch('Using ^2.0.0, but'); });
it('adds posttest script for lint && stylelint', async () => { pkgHas.callsFake((_, name) => ['eslint', 'stylelint'].includes(name)); await codeStyle.create(context, utils); assume(pkgAdd).calledWithMatch('scripts', { posttest: sinon.match.string }); assume(utils.runScriptStr).calledWith('lint'); assume(utils.runScriptStr).calledWith('stylelint'); });