test('expired data', async t => { const alfy = createAlfy(); alfy.cache.set('expire', {foo: 'bar'}, {maxAge: 5000}); t.true(alfy.cache.has('expire')); t.deepEqual(alfy.cache.get('expire'), {foo: 'bar'}); await delay(5000); t.false(alfy.cache.has('expire')); t.falsy(alfy.cache.get('expire')); t.falsy(alfy.cache.store.expire); });
test.serial('buffer: false > promise does not resolve when output is big and "all" is used but not read', async t => { const subprocess = execa('max-buffer', {buffer: false, all: true, timeout: BUFFER_TIMEOUT}); subprocess.stdout.resume(); subprocess.stderr.resume(); const {timedOut} = await t.throwsAsync(subprocess); t.true(timedOut); });
test.serial('public-package published on npm registry: should fail when npm registry not pingable', async t => { execaStub.createStub([{ command: 'npm ping', exitCode: 1, exitCodeName: 'EPERM', stdout: '', stderr: 'failed' }]); await t.throwsAsync(run(testedModule('1.0.0', {name: 'test'}, {})), {message: 'Connection to npm registry failed'}); t.true(SilentRenderer.tasks.some(task => task.title === 'Ping npm registry' && task.hasFailed())); });
test('maxAge option', t => { const alfy = createAlfy(); alfy.cache.set('hello', {hello: 'world'}, {maxAge: 300000}); const age = alfy.cache.store.hello.timestamp - Date.now(); t.true(age <= 300000 && age >= 299000); t.true(alfy.cache.has('hello')); t.deepEqual(alfy.cache.get('hello'), {hello: 'world'}); });
test.serial('should fail when prerelease version of public package without dist tag given', async t => { await t.throwsAsync(run(testedModule('2.0.0-1', {name: 'test', version: '1.0.0'}, {yarn: false})), {message: 'You must specify a dist-tag using --tag when publishing a pre-release version. This prevents accidentally tagging unstable versions as "latest". https://docs.npmjs.com/cli/dist-tag'}); t.true(SilentRenderer.tasks.some(task => task.title === 'Check for pre-release version' && task.hasFailed())); });
test('version.isPrereleaseOrIncrement', t => { t.false(version.isPrereleaseOrIncrement('patch')); t.false(version.isPrereleaseOrIncrement('minor')); t.false(version.isPrereleaseOrIncrement('major')); t.true(version.isPrereleaseOrIncrement('prepatch')); t.true(version.isPrereleaseOrIncrement('preminor')); t.true(version.isPrereleaseOrIncrement('premajor')); t.true(version.isPrereleaseOrIncrement('prerelease')); });
test('version.isLowerThanOrEqualTo', t => { t.true(version('1.0.0').isLowerThanOrEqualTo('0.0.1')); t.true(version('1.0.0').isLowerThanOrEqualTo('0.1.0')); t.true(version('1.0.0').isLowerThanOrEqualTo('1.0.0-0')); t.true(version('1.0.0').isLowerThanOrEqualTo('1.0.0-beta')); t.true(version('1.0.0').isLowerThanOrEqualTo('1.0.0')); t.false(version('1.0.0').isLowerThanOrEqualTo('1.0.1')); t.false(version('1.0.0').isLowerThanOrEqualTo('1.1.0')); t.false(version('1.0.0').isLowerThanOrEqualTo('2.0.0')); t.false(version('1.0.0').isLowerThanOrEqualTo('2.0.0-0')); t.false(version('1.0.0').isLowerThanOrEqualTo('2.0.0-beta')); });
test.serial('should fail when release branch is not specified, current branch is not main/master and publishing from any branch not permitted', async t => { execaStub.createStub([ { command: 'git symbolic-ref --short HEAD', exitCode: 0, stdout: 'feature' } ]); await t.throwsAsync(run(testedModule({})), {message: 'Not on `main`/`master` branch. Use --any-branch to publish anyway, or set a different release branch using --branch.'}); t.true(SilentRenderer.tasks.some(task => task.title === 'Check current branch' && task.hasFailed())); });