test('returns config from home directory when global binary is used and `.np-config.js` exists in home directory', async t => { const homedirStub = sinon.stub(); homedirStub.returns(path.resolve(fixtureBasePath, 'homedir2')); const configs = await getConfigsWhenGlobalBinaryIsUsed(homedirStub); configs.forEach(config => t.deepEqual(config, {source: 'homedir/.np-config.js'})); });
test('invalid version', async t => { const cache = tempfile(); const alfy = createAlfy({cache, version: '1.0.0'}); t.deepEqual(await alfy.fetch(`${URL}/cache-version`, {maxAge: 5000}), {foo: 'bar'}); t.deepEqual(await alfy.fetch(`${URL}/cache-version`, {maxAge: 5000}), {foo: 'bar'}); t.deepEqual(alfy.cache.store['https://foo.bar/cache-version{"json":true,"maxAge":5000}'].data, {foo: 'bar'}); const alfy2 = createAlfy({cache, version: '1.0.0'}); t.deepEqual(await alfy2.fetch(`${URL}/cache-version`, {maxAge: 5000}), {foo: 'bar'}); const alfy3 = createAlfy({cache, version: '1.0.1'}); t.deepEqual(await alfy3.fetch(`${URL}/cache-version`, {maxAge: 5000}), {unicorn: 'rainbow'}); t.deepEqual(alfy.cache.store['https://foo.bar/cache-version{"json":true,"maxAge":5000}'].data, {unicorn: 'rainbow'}); });
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('do not extend environment with `extendEnv: false`', async t => { const {stdout} = await execa('environment', [], {env: {BAR: 'bar', PATH: process.env.PATH}, extendEnv: false}); t.deepEqual(stdout.split('\n'), ['undefined', 'bar']); });
test('no cache', async t => { const alfy = createAlfy(); t.deepEqual(await alfy.fetch(`${URL}/no-cache`), {foo: 'bar'}); t.falsy(alfy.cache.get(`${URL}/no-cache`)); });
test('.matches()', t => { t.deepEqual(alfyInstance.matches('Unicorn', ['foo', 'unicorn']), ['unicorn']); t.deepEqual(alfyInstance.matches('Unicorn', [{name: 'foo'}, {name: 'unicorn'}], 'name'), [{name: 'unicorn'}]); t.deepEqual(alfyInstance.matches('Foobar', [{name: 'foo', sub: 'bar'}, {name: 'unicorn', sub: 'rainbow'}], (item, input) => item.name + item.sub === input), [{name: 'foo', sub: 'bar'}]); });
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('returns config from package directory when local binary is used and `.np-config.js` exists in package directory', async t => { const configs = await getConfigsWhenLocalBinaryIsUsed(path.resolve(fixtureBasePath, 'local2')); configs.forEach(config => t.deepEqual(config, {source: 'packagedir/.np-config.js'})); });
test('version.SEMVER_INCREMENTS', t => { t.deepEqual(version.SEMVER_INCREMENTS, ['patch', 'minor', 'major', 'prepatch', 'preminor', 'premajor', 'prerelease']); });
test('use environment variables by default', async t => { const {stdout} = await execa('environment'); t.deepEqual(stdout.split('\n'), ['foo', 'undefined']); });
test('transform', async t => { const alfy = createAlfy(); const result = await alfy.fetch(`${URL}/no-cache`, { transform: response => { response.unicorn = 'rainbow'; return response; } }); t.deepEqual(result, { foo: 'bar', unicorn: 'rainbow' }); });
test('cache', async t => { const alfy = createAlfy(); t.deepEqual(await alfy.fetch(`${URL}/cache`, {maxAge: 5000}), {hello: 'world'}); t.deepEqual(await alfy.fetch(`${URL}/cache`, {maxAge: 5000}), {hello: 'world'}); await delay(5000); t.deepEqual(await alfy.fetch(`${URL}/cache`, {maxAge: 5000}), {hello: 'world!'}); });
test('cache key', async t => { const alfy = createAlfy(); t.deepEqual(await alfy.fetch(`${URL}/cache-key`, {query: {unicorn: 'rainbow'}, maxAge: 5000}), {unicorn: 'rainbow'}); t.truthy(alfy.cache.store['https://foo.bar/cache-key{"json":true,"query":{"unicorn":"rainbow"},"maxAge":5000}']); });
test('returns config from home directory when global binary is used and `.np-config-json` exists in home directory', async t => { const homedirStub = sinon.stub(); homedirStub.returns(path.resolve(fixtureBasePath, 'homedir1')); const configs = await getConfigsWhenGlobalBinaryIsUsed(homedirStub); configs.forEach(config => t.deepEqual(config, {source: 'homedir/.np-config.json'})); });
test('extend environment variables by default', async t => { const {stdout} = await execa('environment', [], {env: {BAR: 'bar'}}); t.deepEqual(stdout.split('\n'), ['foo', 'bar']); });