30
30
import httpretty
31
31
32
32
from _pytest .monkeypatch import MonkeyPatch
33
+ from packaging .utils import NormalizedName
33
34
34
35
from poetry .config .config import Config
35
36
@@ -45,16 +46,13 @@ class MockRepository(LegacyRepository):
45
46
def __init__ (self ) -> None :
46
47
super ().__init__ ("legacy" , url = "http://legacy.foo.bar" , disable_cache = True )
47
48
48
- def _get_page (self , endpoint : str ) -> SimpleRepositoryPage | None :
49
- parts = endpoint .split ("/" )
50
- name = parts [1 ]
51
-
49
+ def _get_page (self , name : NormalizedName ) -> SimpleRepositoryPage | None :
52
50
fixture = self .FIXTURES / (name + ".html" )
53
51
if not fixture .exists ():
54
52
return None
55
53
56
54
with fixture .open (encoding = "utf-8" ) as f :
57
- return SimpleRepositoryPage (self ._url + endpoint , f .read ())
55
+ return SimpleRepositoryPage (self ._url + f"/ { name } /" , f .read ())
58
56
59
57
def _download (self , url : str , dest : Path ) -> None :
60
58
filename = urlparse .urlparse (url ).path .rsplit ("/" )[- 1 ]
@@ -73,7 +71,7 @@ def test_packages_property_returns_empty_list() -> None:
73
71
def test_page_relative_links_path_are_correct () -> None :
74
72
repo = MockRepository ()
75
73
76
- page = repo .get_page ("/ relative" )
74
+ page = repo .get_page ("relative" )
77
75
assert page is not None
78
76
79
77
for link in page .links :
@@ -84,7 +82,7 @@ def test_page_relative_links_path_are_correct() -> None:
84
82
def test_page_absolute_links_path_are_correct () -> None :
85
83
repo = MockRepository ()
86
84
87
- page = repo .get_page ("/ absolute" )
85
+ page = repo .get_page ("absolute" )
88
86
assert page is not None
89
87
90
88
for link in page .links :
@@ -95,7 +93,7 @@ def test_page_absolute_links_path_are_correct() -> None:
95
93
def test_page_clean_link () -> None :
96
94
repo = MockRepository ()
97
95
98
- page = repo .get_page ("/ relative" )
96
+ page = repo .get_page ("relative" )
99
97
assert page is not None
100
98
101
99
cleaned = page .clean_link ('https://legacy.foo.bar/test /the"/cleaning\0 ' )
@@ -105,7 +103,7 @@ def test_page_clean_link() -> None:
105
103
def test_page_invalid_version_link () -> None :
106
104
repo = MockRepository ()
107
105
108
- page = repo .get_page ("/ invalid-version" )
106
+ page = repo .get_page ("invalid-version" )
109
107
assert page is not None
110
108
111
109
links = list (page .links )
@@ -123,7 +121,7 @@ def test_page_invalid_version_link() -> None:
123
121
124
122
def test_sdist_format_support () -> None :
125
123
repo = MockRepository ()
126
- page = repo .get_page ("/ relative" )
124
+ page = repo .get_page ("relative" )
127
125
assert page is not None
128
126
bz2_links = list (filter (lambda link : link .ext == ".tar.bz2" , page .links ))
129
127
assert len (bz2_links ) == 1
@@ -434,8 +432,8 @@ def test_package_yanked(
434
432
435
433
def test_package_partial_yank ():
436
434
class SpecialMockRepository (MockRepository ):
437
- def _get_page (self , endpoint : str ) -> SimpleRepositoryPage | None :
438
- return super ()._get_page (f"/ { endpoint . strip ( '/' ) } _partial_yank/" )
435
+ def _get_page (self , name : NormalizedName ) -> SimpleRepositoryPage | None :
436
+ return super ()._get_page (canonicalize_name ( f" { name } -partial-yank" ) )
439
437
440
438
repo = MockRepository ()
441
439
package = repo .package ("futures" , Version .parse ("3.2.0" ))
@@ -481,31 +479,31 @@ def __init__(
481
479
482
480
483
481
def test_get_200_returns_page (http : type [httpretty .httpretty ]) -> None :
484
- repo = MockHttpRepository ({"/foo" : 200 }, http )
482
+ repo = MockHttpRepository ({"/foo/ " : 200 }, http )
485
483
486
- assert repo .get_page ("/ foo" )
484
+ assert repo .get_page ("foo" )
487
485
488
486
489
487
@pytest .mark .parametrize ("status_code" , [401 , 403 , 404 ])
490
488
def test_get_40x_and_returns_none (
491
489
http : type [httpretty .httpretty ], status_code : int
492
490
) -> None :
493
- repo = MockHttpRepository ({"/foo" : status_code }, http )
491
+ repo = MockHttpRepository ({"/foo/ " : status_code }, http )
494
492
495
- assert repo .get_page ("/ foo" ) is None
493
+ assert repo .get_page ("foo" ) is None
496
494
497
495
498
496
def test_get_5xx_raises (http : type [httpretty .httpretty ]) -> None :
499
- repo = MockHttpRepository ({"/foo" : 500 }, http )
497
+ repo = MockHttpRepository ({"/foo/ " : 500 }, http )
500
498
501
499
with pytest .raises (RepositoryError ):
502
- repo .get_page ("/ foo" )
500
+ repo .get_page ("foo" )
503
501
504
502
505
503
def test_get_redirected_response_url (
506
504
http : type [httpretty .httpretty ], monkeypatch : MonkeyPatch
507
505
) -> None :
508
- repo = MockHttpRepository ({"/foo" : 200 }, http )
506
+ repo = MockHttpRepository ({"/foo/ " : 200 }, http )
509
507
redirect_url = "http://legacy.redirect.bar"
510
508
511
509
def get_mock (
@@ -517,7 +515,7 @@ def get_mock(
517
515
return response
518
516
519
517
monkeypatch .setattr (repo .session , "get" , get_mock )
520
- page = repo .get_page ("/ foo" )
518
+ page = repo .get_page ("foo" )
521
519
assert page is not None
522
520
assert page ._url == "http://legacy.redirect.bar/foo/"
523
521
0 commit comments