Skip to content

Commit 4bf1b67

Browse files
committed
Build fake wheels for --user tests
The old INITools tests rely on setup.py, which relies on distutils and generates a ton of issues. Build fake wheels directly to avoid dealing with them.
1 parent b850d53 commit 4bf1b67

File tree

1 file changed

+91
-44
lines changed

1 file changed

+91
-44
lines changed

tests/functional/test_install_user.py

Lines changed: 91 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
"""
22
tests specific to "pip install --user"
33
"""
4+
import os
45
import textwrap
56
from os.path import curdir, isdir, isfile
67
from pathlib import Path
78

89
import pytest
910

1011
from tests.lib import pyversion # noqa: F401
11-
from tests.lib import PipTestEnvironment, TestData, need_svn
12+
from tests.lib import (
13+
PipTestEnvironment,
14+
TestData,
15+
create_basic_wheel_for_package,
16+
need_svn,
17+
)
1218
from tests.lib.local_repos import local_checkout
1319
from tests.lib.venv import VirtualEnvironment
1420

@@ -142,7 +148,6 @@ def test_install_user_conflict_in_usersite(
142148
result2.did_create(egg_info_folder)
143149
assert not isfile(initools_v3_file), initools_v3_file
144150

145-
@pytest.mark.network
146151
@pytest.mark.incompatible_with_test_venv
147152
def test_install_user_conflict_in_globalsite(
148153
self, virtualenv: VirtualEnvironment, script: PipTestEnvironment
@@ -151,30 +156,41 @@ def test_install_user_conflict_in_globalsite(
151156
Test user install with conflict in global site ignores site and
152157
installs to usersite
153158
"""
154-
_patch_dist_in_site_packages(virtualenv)
159+
create_basic_wheel_for_package(script, "initools", "0.1")
160+
create_basic_wheel_for_package(script, "initools", "0.2")
155161

156-
script.pip("install", "INITools==0.2", "--no-binary=:all:")
162+
_patch_dist_in_site_packages(virtualenv)
157163

158-
result2 = script.pip("install", "--user", "INITools==0.1", "--no-binary=:all:")
164+
script.pip(
165+
"install",
166+
"--no-index",
167+
"--find-links",
168+
script.scratch_path,
169+
"initools==0.2",
170+
)
171+
result2 = script.pip(
172+
"install",
173+
"--no-index",
174+
"--find-links",
175+
script.scratch_path,
176+
"--user",
177+
"initools==0.1",
178+
)
159179

160180
# usersite has 0.1
161-
# we still test for egg-info because no-binary implies setup.py install
162-
egg_info_folder = script.user_site / f"INITools-0.1-py{pyversion}.egg-info"
181+
dist_info_folder = script.user_site / "initools-0.1.dist-info"
163182
initools_folder = script.user_site / "initools"
164-
result2.did_create(egg_info_folder)
183+
result2.did_create(dist_info_folder)
165184
result2.did_create(initools_folder)
166185

167186
# site still has 0.2 (can't look in result1; have to check)
168-
egg_info_folder = (
169-
script.base_path
170-
/ script.site_packages
171-
/ f"INITools-0.2-py{pyversion}.egg-info"
187+
dist_info_folder = (
188+
script.base_path / script.site_packages / "initools-0.2.dist-info"
172189
)
173190
initools_folder = script.base_path / script.site_packages / "initools"
174-
assert isdir(egg_info_folder)
191+
assert isdir(dist_info_folder)
175192
assert isdir(initools_folder)
176193

177-
@pytest.mark.network
178194
@pytest.mark.incompatible_with_test_venv
179195
def test_upgrade_user_conflict_in_globalsite(
180196
self, virtualenv: VirtualEnvironment, script: PipTestEnvironment
@@ -183,31 +199,42 @@ def test_upgrade_user_conflict_in_globalsite(
183199
Test user install/upgrade with conflict in global site ignores site and
184200
installs to usersite
185201
"""
202+
create_basic_wheel_for_package(script, "initools", "0.2")
203+
create_basic_wheel_for_package(script, "initools", "0.3.1")
204+
186205
_patch_dist_in_site_packages(virtualenv)
187206

188-
script.pip("install", "INITools==0.2", "--no-binary=:all:")
207+
script.pip(
208+
"install",
209+
"--no-index",
210+
"--find-links",
211+
script.scratch_path,
212+
"initools==0.2",
213+
)
189214
result2 = script.pip(
190-
"install", "--user", "--upgrade", "INITools", "--no-binary=:all:"
215+
"install",
216+
"--no-index",
217+
"--find-links",
218+
script.scratch_path,
219+
"--user",
220+
"--upgrade",
221+
"initools",
191222
)
192223

193224
# usersite has 0.3.1
194-
# we still test for egg-info because no-binary implies setup.py install
195-
egg_info_folder = script.user_site / f"INITools-0.3.1-py{pyversion}.egg-info"
225+
dist_info_folder = script.user_site / "initools-0.3.1.dist-info"
196226
initools_folder = script.user_site / "initools"
197-
result2.did_create(egg_info_folder)
227+
result2.did_create(dist_info_folder)
198228
result2.did_create(initools_folder)
199229

200230
# site still has 0.2 (can't look in result1; have to check)
201-
egg_info_folder = (
202-
script.base_path
203-
/ script.site_packages
204-
/ f"INITools-0.2-py{pyversion}.egg-info"
231+
dist_info_folder = (
232+
script.base_path / script.site_packages / "initools-0.2.dist-info"
205233
)
206234
initools_folder = script.base_path / script.site_packages / "initools"
207-
assert isdir(egg_info_folder), result2.stdout
235+
assert isdir(dist_info_folder), result2.stdout
208236
assert isdir(initools_folder)
209237

210-
@pytest.mark.network
211238
@pytest.mark.incompatible_with_test_venv
212239
def test_install_user_conflict_in_globalsite_and_usersite(
213240
self, virtualenv: VirtualEnvironment, script: PipTestEnvironment
@@ -216,34 +243,54 @@ def test_install_user_conflict_in_globalsite_and_usersite(
216243
Test user install with conflict in globalsite and usersite ignores
217244
global site and updates usersite.
218245
"""
219-
_patch_dist_in_site_packages(virtualenv)
246+
initools_v3_file_name = os.path.join("initools", "configparser.py")
247+
create_basic_wheel_for_package(script, "initools", "0.1")
248+
create_basic_wheel_for_package(script, "initools", "0.2")
249+
create_basic_wheel_for_package(
250+
script,
251+
"initools",
252+
"0.3",
253+
extra_files={initools_v3_file_name: "# Hi!"},
254+
)
220255

221-
script.pip("install", "INITools==0.2", "--no-binary=:all:")
222-
script.pip("install", "--user", "INITools==0.3", "--no-binary=:all:")
256+
_patch_dist_in_site_packages(virtualenv)
223257

224-
result3 = script.pip("install", "--user", "INITools==0.1", "--no-binary=:all:")
258+
script.pip(
259+
"install",
260+
"--no-index",
261+
"--find-links",
262+
script.scratch_path,
263+
"initools==0.2",
264+
)
265+
script.pip(
266+
"install",
267+
"--no-index",
268+
"--find-links",
269+
script.scratch_path,
270+
"--user",
271+
"initools==0.3",
272+
)
273+
result3 = script.pip(
274+
"install",
275+
"--no-index",
276+
"--find-links",
277+
script.scratch_path,
278+
"--user",
279+
"initools==0.1",
280+
)
225281

226282
# usersite has 0.1
227-
# we still test for egg-info because no-binary implies setup.py install
228-
egg_info_folder = script.user_site / f"INITools-0.1-py{pyversion}.egg-info"
229-
initools_v3_file = (
230-
# file only in 0.3
231-
script.base_path
232-
/ script.user_site
233-
/ "initools"
234-
/ "configparser.py"
235-
)
236-
result3.did_create(egg_info_folder)
283+
dist_info_folder = script.user_site / "initools-0.1.dist-info"
284+
result3.did_create(dist_info_folder)
285+
initools_v3_file = script.base_path / script.user_site / initools_v3_file_name
237286
assert not isfile(initools_v3_file), initools_v3_file
238287

239288
# site still has 0.2 (can't just look in result1; have to check)
240-
egg_info_folder = (
241-
script.base_path
242-
/ script.site_packages
243-
/ f"INITools-0.2-py{pyversion}.egg-info"
289+
dist_info_folder = (
290+
script.base_path / script.site_packages / "initools-0.2.dist-info"
244291
)
245292
initools_folder = script.base_path / script.site_packages / "initools"
246-
assert isdir(egg_info_folder)
293+
assert isdir(dist_info_folder)
247294
assert isdir(initools_folder)
248295

249296
@pytest.mark.network

0 commit comments

Comments
 (0)