from errno import ENOENT, EACCES, EPERM, EROFS import os import sys 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') rename = 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 rmdir = 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')