it('returns modified context with prompt answers', async () => { context = { bogus: true }; const result = await promptHook(gasket, context, { prompt }); assume(result).not.equals(context); assume(result).eqls({ ...context, ...mockAnswers }); });
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('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>']); });
describe('safeAssign', () => { it('assigns missing keys to target', () => { const target = {}; safeAssign(target, { one: 1 }); assume(target).eqls({ one: 1 }); }); it('does not override existing keys', () => { const target = { two: 2 }; safeAssign(target, { one: 1 }); assume(target).eqls({ two: 2, one: 1 }); }); });
it('[multiple] adds multiple field types', () => { pkg.extend({ name: 'my-app', dependencies: { 'some-pkg': 'latest' }, keys: ['some-key'] }); assume(pkg.fields).eqls({ name: 'my-app', dependencies: { 'some-pkg': 'latest' }, keys: ['some-key'] }); });
it('has expected hooks', () => { const expected = [ 'init', 'create', 'destroy', 'metadata' ]; assume(Plugin).to.have.property('hooks'); const hooks = Object.keys(Plugin.hooks); assume(hooks).eqls(expected); assume(hooks).is.length(expected.length); });
it('[semver] appends to blame when identical semver ranges provided', () => { pkg.source = { name: 'First plugin' }; pkg.add('dependencies', { 'some-pkg': '^1.2.0' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); pkg.source = { name: 'Second plugin' }; pkg.add('dependencies', { 'some-pkg': '^1.2.0' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); assume(pkg.blame.get(`dependencies.some-pkg`)).deep.equals([ 'First plugin', 'Second plugin' ]); });
it('[semver] merges existing fields', () => { pkg.extend({ dependencies: { 'some-pkg': 'latest' } }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': 'latest' }); pkg.extend({ dependencies: { 'some-other-pkg': '^0.1.2' } }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': 'latest', 'some-other-pkg': '^0.1.2' }); });
it('[semver] merges existing fields', () => { pkg.add('dependencies', { 'some-pkg': 'latest' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': 'latest' }); pkg.add('dependencies', { 'some-other-pkg': '^0.1.2' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': 'latest', 'some-other-pkg': '^0.1.2' }); });
it('[semver] does not overwrite existing values older semver ranges', () => { pkg.add('dependencies', { 'some-pkg': '^1.2.0' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); pkg.add('dependencies', { 'some-pkg': '^1.0.0' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); });
it('[semver] merges existing fields', () => { pkg.add('dependencies', { 'some-pkg': 'latest' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': 'latest' }); pkg.add('dependencies', { 'some-other-pkg': '^0.1.2' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': 'latest', 'some-other-pkg': '^0.1.2' }); });
it('[semver] appends to blame when identical semver ranges provided', () => { pkg.source = { name: 'First plugin' }; pkg.add('dependencies', { 'some-pkg': '^1.2.0' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); pkg.source = { name: 'Second plugin' }; pkg.add('dependencies', { 'some-pkg': '^1.2.0' }); assume(pkg.fields.dependencies).eqls({ 'some-pkg': '^1.2.0' }); assume(pkg.blame.get(`dependencies.some-pkg`)).deep.equals([ 'First plugin', 'Second plugin' ]); });
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('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('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>']); });