@@ -238,3 +238,50 @@ def test_pull_through_metadata(python_remote_factory, python_distribution_factor
238238 r = requests .get (url2 )
239239 assert r .status_code == 200
240240 assert sha256 (r .content ).hexdigest () == package2 .metadata_digests ["sha256" ]
241+
242+
243+ @pytest .mark .parallel
244+ def test_pull_through_metadata_with_repo (
245+ python_repo_factory ,
246+ python_remote_factory ,
247+ python_distribution_factory ,
248+ pulpcore_bindings ,
249+ ):
250+ """Tests that metadata is correctly saved when using pull-through with a repository."""
251+ remote = python_remote_factory (url = PYPI_URL , includes = ["pip" ])
252+ repo = python_repo_factory ()
253+ distro = python_distribution_factory (repository = repo .pulp_href , remote = remote .pulp_href )
254+
255+ pip_url = f"{ distro .base_url } simple/pip/"
256+ project_page = ProjectPage .from_response (requests .get (pip_url ), "pip" )
257+ filename = "pip-26.0.1-py3-none-any.whl"
258+ package = next (p for p in project_page .packages if p .filename == filename )
259+ assert package .has_metadata
260+ assert "?redirect=" in package .url
261+
262+ # Retrieve the metadata and assert the content was not saved to the repository
263+ parts = urlsplit (package .url )
264+ url = urlunsplit ((parts [0 ], parts [1 ], parts [2 ] + ".metadata" , parts [3 ], parts [4 ]))
265+ r = requests .get (url )
266+ assert r .status_code == 200
267+ assert sha256 (r .content ).hexdigest () == package .metadata_digests ["sha256" ]
268+ project_page = ProjectPage .from_response (requests .get (pip_url ), "pip" )
269+ package = next (p for p in project_page .packages if p .filename == filename )
270+ assert package .has_metadata
271+ assert "?redirect=" in package .url
272+
273+ # Now retrieve the package and assert the content was saved with metadata
274+ r = requests .get (package .url )
275+ assert r .status_code == 200
276+ pa = pulpcore_bindings .ArtifactsApi .list (sha256 = package .digests ["sha256" ])
277+ assert pa .count == 1
278+ ma = pulpcore_bindings .ArtifactsApi .list (sha256 = package .metadata_digests ["sha256" ])
279+ assert ma .count == 1
280+
281+ # Check the simple page is updated to point to the local repository
282+ project_page = ProjectPage .from_response (requests .get (pip_url ), "pip" )
283+ package = next (p for p in project_page .packages if p .filename == filename )
284+ assert "?redirect=" not in package .url
285+ r = requests .get (package .metadata_url )
286+ assert r .status_code == 200
287+ assert sha256 (r .content ).hexdigest () == package .metadata_digests ["sha256" ]
0 commit comments