From a407d8f76708dcc692d35eb48a54c0017d0dad9c Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Sat, 5 Jan 2019 08:24:03 +0100 Subject: [PATCH] refactor: use purl for all npm getPkgReleases --- lib/datasource/npm/releases.js | 9 +-- .../npm/__snapshots__/index.spec.js.snap | 56 ++++++++----------- test/datasource/npm/index.spec.js | 42 +++++++------- 3 files changed, 46 insertions(+), 61 deletions(-) diff --git a/lib/datasource/npm/releases.js b/lib/datasource/npm/releases.js index 9cd98b79a8..b7e14f324e 100644 --- a/lib/datasource/npm/releases.js +++ b/lib/datasource/npm/releases.js @@ -1,5 +1,3 @@ -const is = require('@sindresorhus/is'); - const { getDependency } = require('./get'); const { setNpmrc } = require('./npmrc'); @@ -7,16 +5,11 @@ module.exports = { getPkgReleases, }; -async function getPkgReleases(input, config) { - if (is.string(input)) { - const depName = input; - return getDependency(depName, global.testNpmRetries); - } +async function getPkgReleases(purl, config) { if (config) { const trustLevel = config.global ? config.global.trustLevel : 'low'; setNpmrc(config.npmrc, trustLevel); } - const purl = input; const res = await getDependency(purl.fullname, global.testNpmRetries); if (res) { res.tags = res['dist-tags']; diff --git a/test/datasource/npm/__snapshots__/index.spec.js.snap b/test/datasource/npm/__snapshots__/index.spec.js.snap index a2243acfcc..51a07a9fdf 100644 --- a/test/datasource/npm/__snapshots__/index.spec.js.snap +++ b/test/datasource/npm/__snapshots__/index.spec.js.snap @@ -2,9 +2,6 @@ exports[`api/npm should fetch package info from custom registry 1`] = ` Object { - "dist-tags": Object { - "latest": "0.0.1", - }, "homepage": undefined, "latestVersion": "0.0.1", "name": "foobar", @@ -22,17 +19,16 @@ Object { "version": "0.0.2", }, ], - "renovate-config": undefined, "sourceUrl": "https://github.com/renovateapp/dummy", + "tags": Object { + "latest": "0.0.1", + }, "versions": Object {}, } `; exports[`api/npm should fetch package info from npm 1`] = ` Object { - "dist-tags": Object { - "latest": "0.0.1", - }, "homepage": undefined, "latestVersion": "0.0.1", "name": "foobar", @@ -50,17 +46,16 @@ Object { "version": "0.0.2", }, ], - "renovate-config": undefined, "sourceUrl": "https://github.com/renovateapp/dummy", + "tags": Object { + "latest": "0.0.1", + }, "versions": Object {}, } `; exports[`api/npm should handle no time 1`] = ` Object { - "dist-tags": Object { - "latest": "0.0.1", - }, "homepage": undefined, "latestVersion": "0.0.1", "name": "foobar", @@ -76,8 +71,10 @@ Object { "version": "0.0.2", }, ], - "renovate-config": undefined, "sourceUrl": "https://github.com/renovateapp/dummy", + "tags": Object { + "latest": "0.0.1", + }, "versions": Object {}, } `; @@ -111,9 +108,6 @@ Object { exports[`api/npm should replace any environment variable in npmrc 1`] = ` Object { - "dist-tags": Object { - "latest": "0.0.1", - }, "homepage": undefined, "latestVersion": "0.0.1", "name": "foobar", @@ -131,8 +125,10 @@ Object { "version": "0.0.2", }, ], - "renovate-config": undefined, "sourceUrl": "https://github.com/renovateapp/dummy", + "tags": Object { + "latest": "0.0.1", + }, "versions": Object {}, } `; @@ -147,9 +143,6 @@ Object { Marking the latest version of an npm package as deprecated results in the entire package being considered deprecated, so contact the package author you think this is a mistake.", "deprecationSource": "npm", - "dist-tags": Object { - "latest": "0.0.2", - }, "homepage": undefined, "latestVersion": "0.0.2", "name": "foobar", @@ -168,8 +161,10 @@ Marking the latest version of an npm package as deprecated results in the entire "version": "0.0.2", }, ], - "renovate-config": undefined, "sourceUrl": "https://github.com/renovateapp/dummy", + "tags": Object { + "latest": "0.0.2", + }, "versions": Object {}, } `; @@ -190,9 +185,6 @@ Object { exports[`api/npm should send an authorization header if provided 1`] = ` Object { - "dist-tags": Object { - "latest": "0.0.1", - }, "homepage": undefined, "latestVersion": "0.0.1", "name": "foobar", @@ -210,17 +202,16 @@ Object { "version": "0.0.2", }, ], - "renovate-config": undefined, "sourceUrl": "https://github.com/renovateapp/dummy", + "tags": Object { + "latest": "0.0.1", + }, "versions": Object {}, } `; exports[`api/npm should use NPM_TOKEN if provided 1`] = ` Object { - "dist-tags": Object { - "latest": "0.0.1", - }, "homepage": undefined, "latestVersion": "0.0.1", "name": "foobar", @@ -238,17 +229,16 @@ Object { "version": "0.0.2", }, ], - "renovate-config": undefined, "sourceUrl": "https://github.com/renovateapp/dummy", + "tags": Object { + "latest": "0.0.1", + }, "versions": Object {}, } `; exports[`api/npm should use default registry if missing from npmrc 1`] = ` Object { - "dist-tags": Object { - "latest": "0.0.1", - }, "homepage": undefined, "latestVersion": "0.0.1", "name": "foobar", @@ -266,8 +256,10 @@ Object { "version": "0.0.2", }, ], - "renovate-config": undefined, "sourceUrl": "https://github.com/renovateapp/dummy", + "tags": Object { + "latest": "0.0.1", + }, "versions": Object {}, } `; diff --git a/test/datasource/npm/index.spec.js b/test/datasource/npm/index.spec.js index 2421e78b1d..6a510e17ba 100644 --- a/test/datasource/npm/index.spec.js +++ b/test/datasource/npm/index.spec.js @@ -53,14 +53,14 @@ describe('api/npm', () => { .get('/foobar') .reply(200, missingVersions); global.testNpmRetries = 1; - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toBe(null); }); it('should fetch package info from npm', async () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(200, npmResponse); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toMatchSnapshot(); expect(getRelease(res, '0.0.1').canBeUnpublished).toBe(false); expect(getRelease(res, '0.0.2').canBeUnpublished).toBe(false); @@ -194,7 +194,7 @@ describe('api/npm', () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(200, deprecatedPackage); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toMatchSnapshot(); expect(res.deprecationMessage).toMatchSnapshot(); }); @@ -210,7 +210,7 @@ describe('api/npm', () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(200, npmResponse); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toMatchSnapshot(); expect(getRelease(res, '0.0.1').canBeUnpublished).toBe(false); expect(getRelease(res, '0.0.2').canBeUnpublished).toBeUndefined(); @@ -222,7 +222,7 @@ describe('api/npm', () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(200, npmResponse); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(getRelease(res, '0.0.1').canBeUnpublished).toBe(false); expect(getRelease(res, '0.0.2').canBeUnpublished).toBe(true); }); @@ -230,14 +230,14 @@ describe('api/npm', () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(401); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toBeNull(); }); it('should return null if lookup fails', async () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(404); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toBeNull(); }); it('should throw error for unparseable', async () => { @@ -250,7 +250,7 @@ describe('api/npm', () => { let e; try { global.testNpmRetries = 1; - await npm.getPkgReleases('foobar'); + await npm.getPkgReleases({ fullname: 'foobar' }); } catch (err) { e = err; } @@ -266,7 +266,7 @@ describe('api/npm', () => { let e; try { global.testNpmRetries = 1; - await npm.getPkgReleases('foobar'); + await npm.getPkgReleases({ fullname: 'foobar' }); } catch (err) { e = err; } @@ -279,7 +279,7 @@ describe('api/npm', () => { let e; try { global.testNpmRetries = 0; - await npm.getPkgReleases('foobar'); + await npm.getPkgReleases({ fullname: 'foobar' }); } catch (err) { e = err; } @@ -292,7 +292,7 @@ describe('api/npm', () => { let e; try { global.testNpmRetries = 0; - await npm.getPkgReleases('foobar'); + await npm.getPkgReleases({ fullname: 'foobar' }); } catch (err) { e = err; } @@ -309,7 +309,7 @@ describe('api/npm', () => { .get('/foobar') .reply(200); global.testNpmRetries = 2; - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toMatchSnapshot(); }); it('should throw error for others', async () => { @@ -318,7 +318,7 @@ describe('api/npm', () => { .reply(451); let e; try { - await npm.getPkgReleases('foobar'); + await npm.getPkgReleases({ fullname: 'foobar' }); } catch (err) { e = err; } @@ -332,7 +332,7 @@ describe('api/npm', () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(200, npmResponse); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toMatchSnapshot(); }); it('should use NPM_TOKEN if provided', async () => { @@ -341,7 +341,7 @@ describe('api/npm', () => { .reply(200, npmResponse); const oldToken = process.env.NPM_TOKEN; process.env.NPM_TOKEN = 'some-token'; - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); process.env.NPM_TOKEN = oldToken; expect(res).toMatchSnapshot(); }); @@ -355,7 +355,7 @@ describe('api/npm', () => { .get('/foobar') .reply(200, npmResponse); npm.setNpmrc('foo=bar'); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toMatchSnapshot(); }); it('should cache package info from npm', async () => { @@ -363,15 +363,15 @@ describe('api/npm', () => { nock('https://registry.npmjs.org') .get('/foobar') .reply(200, npmResponse); - const res1 = await npm.getPkgReleases('foobar'); - const res2 = await npm.getPkgReleases('foobar'); + const res1 = await npm.getPkgReleases({ fullname: 'foobar' }); + const res2 = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res1).not.toBe(null); expect(res1).toEqual(res2); }); it('should use global cache', async () => { const dummyValue = 'abc123'; await global.renovateCache.set('datasource-npm', 'foobar', dummyValue, 10); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toEqual(dummyValue); }); it('should fetch package info from custom registry', async () => { @@ -382,7 +382,7 @@ describe('api/npm', () => { 'registry=https://npm.mycustomregistry.com/\n//npm.mycustomregistry.com/:_auth = ' + Buffer.from('abcdef').toString('base64') ); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toMatchSnapshot(); }); it('should replace any environment variable in npmrc', async () => { @@ -392,7 +392,7 @@ describe('api/npm', () => { process.env.REGISTRY = 'https://registry.from-env.com'; // eslint-disable-next-line no-template-curly-in-string npm.setNpmrc('registry=${REGISTRY}', 'high'); - const res = await npm.getPkgReleases('foobar'); + const res = await npm.getPkgReleases({ fullname: 'foobar' }); expect(res).toMatchSnapshot(); }); it('should throw error if necessary env var is not present', () => { -- GitLab