From 5ca5a124fa7e7f4e88f39acc16cbc14f8fbde9c6 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 4 Jun 2019 14:08:37 +0200
Subject: [PATCH] feat(pipenv): support index registry urls (#3885)

Closes #3865
---
 lib/manager/pipenv/extract.js                 | 10 ++++++++
 .../pipenv/__snapshots__/extract.spec.js.snap | 24 +++++++++++++++++++
 test/manager/pipenv/_fixtures/Pipfile5        | 12 ++++++++++
 test/manager/pipenv/extract.spec.js           | 12 ++++++++++
 4 files changed, 58 insertions(+)
 create mode 100644 test/manager/pipenv/_fixtures/Pipfile5

diff --git a/lib/manager/pipenv/extract.js b/lib/manager/pipenv/extract.js
index 9d903b2d21..a4ce2a6121 100644
--- a/lib/manager/pipenv/extract.js
+++ b/lib/manager/pipenv/extract.js
@@ -96,6 +96,16 @@ function extractFromSection(pipfile, section) {
         dep.datasource = 'pypi';
       }
       if (pipenvNestedVersion) dep.pipenvNestedVersion = pipenvNestedVersion;
+      if (requirements.index) {
+        if (is.array(pipfile.source)) {
+          const source = pipfile.source.find(
+            item => item.name === requirements.index
+          );
+          if (source) {
+            dep.registryUrls = [source.url];
+          }
+        }
+      }
       return dep;
     })
     .filter(Boolean);
diff --git a/test/manager/pipenv/__snapshots__/extract.spec.js.snap b/test/manager/pipenv/__snapshots__/extract.spec.js.snap
index 2d12887d66..6895affd9b 100644
--- a/test/manager/pipenv/__snapshots__/extract.spec.js.snap
+++ b/test/manager/pipenv/__snapshots__/extract.spec.js.snap
@@ -82,6 +82,9 @@ Object {
       "depName": "pywinusb",
       "depType": "packages",
       "pipenvNestedVersion": true,
+      "registryUrls": Array [
+        "https://pypi.python.org/simple",
+      ],
       "skipReason": "any-version",
     },
     Object {
@@ -143,3 +146,24 @@ Object {
   ],
 }
 `;
+
+exports[`lib/manager/pipenv/extract extractPackageFile() supports custom index 1`] = `
+Object {
+  "deps": Array [
+    Object {
+      "currentValue": "==0.21.0",
+      "datasource": "pypi",
+      "depName": "requests",
+      "depType": "packages",
+      "pipenvNestedVersion": true,
+      "registryUrls": Array [
+        "https://testpypi.python.org/pypi",
+      ],
+    },
+  ],
+  "registryUrls": Array [
+    "https://pypi.python.org/simple",
+    "https://testpypi.python.org/pypi",
+  ],
+}
+`;
diff --git a/test/manager/pipenv/_fixtures/Pipfile5 b/test/manager/pipenv/_fixtures/Pipfile5
new file mode 100644
index 0000000000..2c373c425e
--- /dev/null
+++ b/test/manager/pipenv/_fixtures/Pipfile5
@@ -0,0 +1,12 @@
+[[source]]
+url = "https://pypi.python.org/simple"
+verify_ssl = true
+name = "pypi"
+
+[[source]]
+url = "https://testpypi.python.org/pypi"
+verify_ssl = true
+name = "testpypi"
+
+[packages]
+requests = {version = "==0.21.0", index = "testpypi"}
diff --git a/test/manager/pipenv/extract.spec.js b/test/manager/pipenv/extract.spec.js
index 32dee60d20..39416bdcda 100644
--- a/test/manager/pipenv/extract.spec.js
+++ b/test/manager/pipenv/extract.spec.js
@@ -17,6 +17,10 @@ const pipfile4 = fs.readFileSync(
   'test/manager/pipenv/_fixtures/Pipfile4',
   'utf8'
 );
+const pipfile5 = fs.readFileSync(
+  'test/manager/pipenv/_fixtures/Pipfile5',
+  'utf8'
+);
 
 describe('lib/manager/pipenv/extract', () => {
   describe('extractPackageFile()', () => {
@@ -86,5 +90,13 @@ describe('lib/manager/pipenv/extract', () => {
       const res = extractPackageFile(pipfile4, config);
       expect(res).toMatchSnapshot();
     });
+    it('supports custom index', () => {
+      const res = extractPackageFile(pipfile5, config);
+      expect(res).toMatchSnapshot();
+      expect(res.registryUrls).toBeDefined();
+      expect(res.registryUrls).toHaveLength(2);
+      expect(res.deps[0].registryUrls).toBeDefined();
+      expect(res.deps[0].registryUrls).toHaveLength(1);
+    });
   });
 });
-- 
GitLab