From 2a9d142baf2ef8bd7682c584552b2eed6aec21a0 Mon Sep 17 00:00:00 2001 From: Rhys Arkins <rhys@arkins.net> Date: Thu, 25 Apr 2019 12:28:40 +0200 Subject: [PATCH] fix(nuget): flexible query for non-nuget registries --- lib/datasource/nuget/v3.js | 16 +++++++++++----- test/datasource/nuget.spec.js | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/datasource/nuget/v3.js b/lib/datasource/nuget/v3.js index 2ccf6969d9..1b5a3073aa 100644 --- a/lib/datasource/nuget/v3.js +++ b/lib/datasource/nuget/v3.js @@ -60,7 +60,11 @@ async function getQueryUrl(url) { } async function getPkgReleases(registryUrl, feedUrl, pkgName) { - const queryUrl = `${feedUrl}?q=PackageId:${pkgName}&semVerLevel=2.0.0&prerelease=true`; + let queryUrl = `${feedUrl}?q=${pkgName}`; + if (registryUrl.toLowerCase() === defaultNugetFeed.toLowerCase()) { + queryUrl = queryUrl.replace('q=', 'q=PackageId:'); + queryUrl += '&semVerLevel=2.0.0&prerelease=true'; + } const dep = { pkgName, }; @@ -77,12 +81,14 @@ async function getPkgReleases(registryUrl, feedUrl, pkgName) { return null; } - // There are no pkgName is current feed - if (pkgUrlListRaw.body.totalHits === 0) { + const match = pkgUrlListRaw.body.data.find( + item => item.id.toLowerCase() === pkgName.toLowerCase() + ); + if (!match) { + // There are no pkgName is current feed return null; } - - dep.releases = (pkgUrlListRaw.body.data[0].versions || []).map(item => ({ + dep.releases = (match.versions || []).map(item => ({ version: item.version, })); diff --git a/test/datasource/nuget.spec.js b/test/datasource/nuget.spec.js index e1cc3abee4..0ef9a60c85 100644 --- a/test/datasource/nuget.spec.js +++ b/test/datasource/nuget.spec.js @@ -268,6 +268,21 @@ describe('datasource/nuget', () => { expect(res).toMatchSnapshot(); expect(res.sourceUrl).toBeDefined(); }); + it('processes real data (v3) feed is not a nuget.org with mismatch', async () => { + got.mockReturnValueOnce({ + body: JSON.parse(nugetIndexV3), + statusCode: 200, + }); + got.mockReturnValueOnce({ + body: JSON.parse(pkgListV3), + statusCode: 200, + }); + const res = await datasource.getPkgReleases({ + ...configV3NotNugetOrg, + lookupName: 'nun', + }); + expect(res).toBeNull(); + }); it('processes real data without project url (v3)', async () => { got.mockReturnValueOnce({ body: JSON.parse(nugetIndexV3), -- GitLab