import os import sys from errno import EACCES, ENOENT, EPERM, EROFS import pytest from conda_package_handling import utils def test_rm_rf_file(testing_workdir): with open("dummy", "w") as f: f.write("weeee") utils.rm_rf("dummy") with open("dummy", "w") as f: f.write("weeee") utils.rm_rf(os.path.join(testing_workdir, "dummy")) @pytest.mark.parametrize("errno", (ENOENT, EACCES, EPERM, EROFS)) def test_rename_to_trash(testing_workdir, mocker, errno): unlink = mocker.patch("os.unlink") unlink.side_effect = EnvironmentError(errno, "") with open("dummy", "w") as f: f.write("weeee") utils.unlink_or_rename_to_trash("dummy") assert os.path.isfile("dummy.conda_trash") # force a second error for the inner rename try (after unlink fails) if sys.platform == "win32": with open("dummy", "w") as f: f.write("weeee") mocker.patch("os.rename") unlink.side_effect = EnvironmentError(errno, "") utils.unlink_or_rename_to_trash("dummy") assert os.path.isfile("dummy.conda_trash") def test_delete_trash(testing_workdir, mocker): isdir = mocker.patch("conda_package_handling.utils.isdir") isdir.return_value = True lexists = mocker.patch("conda_package_handling.utils.lexists") lexists.return_value = False mocker.patch("conda_package_handling.utils.rmdir") os.makedirs("folder") with open("folder/dummy.conda_trash", "w") as f: f.write("weeee") utils.rm_rf("folder") assert not os.path.isfile("folder/dummy.conda_trash")