@@ -360,3 +360,62 @@ async def run_test(selenium, url, wheel_name):
360360 ]
361361
362362 run_test (selenium_standalone_micropip , url , SNOWBALL_WHEEL )
363+
364+
365+ @pytest .mark .asyncio
366+ async def test_reinstall_different_version (
367+ mock_fetch : mock_fetch_cls ,
368+ mock_importlib ,
369+ ) -> None :
370+ import importlib .metadata
371+
372+ dummy = "dummy"
373+ version_old = "1.0.0"
374+ version_new = "2.0.0"
375+
376+ mock_fetch .add_pkg_version (dummy , version_old )
377+ mock_fetch .add_pkg_version (dummy , version_new )
378+
379+ await micropip .install (f"{ dummy } =={ version_old } " )
380+ assert micropip .list ()[dummy ].version == version_old
381+ assert importlib .metadata .version (dummy ) == version_old
382+
383+ await micropip .install (f"{ dummy } =={ version_new } " )
384+ assert micropip .list ()[dummy ].version == version_new
385+ assert importlib .metadata .version (dummy ) == version_new
386+
387+ await micropip .install (f"{ dummy } =={ version_old } " )
388+ assert micropip .list ()[dummy ].version == version_old
389+ assert importlib .metadata .version (dummy ) == version_old
390+
391+
392+ @pytest .mark .asyncio
393+ async def test_force_reinstall (
394+ mock_fetch : mock_fetch_cls ,
395+ mock_importlib ,
396+ ) -> None :
397+ import importlib .metadata
398+
399+ dummy = "dummy"
400+ version_old = "1.0.0"
401+
402+ mock_fetch .add_pkg_version (dummy , version_old )
403+
404+ await micropip .install (f"{ dummy } =={ version_old } " )
405+ assert micropip .list ()[dummy ].version == version_old
406+ assert importlib .metadata .version (dummy ) == version_old
407+
408+ dist_path = importlib .metadata .distribution (dummy )._path # type: ignore[attr-defined]
409+ assert dist_path .exists ()
410+
411+ # create a dummy file in the dist_info directory, then force reinstall
412+ # the package. The dummy file should be removed.
413+ dummy_file = dist_path / "dummy"
414+ dummy_file .touch ()
415+ assert dummy_file .exists ()
416+
417+ await micropip .install (f"{ dummy } =={ version_old } " , force_reinstall = True )
418+ assert micropip .list ()[dummy ].version == version_old
419+ assert importlib .metadata .version (dummy ) == version_old
420+
421+ assert not dummy_file .exists ()
0 commit comments