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