import os from unittest import mock import pytest from pipenv.utils import shell # This module is run only on Windows. pytestmark = pytest.mark.skipif( os.name != 'nt', reason="only relevant on windows", ) @pytest.mark.utils @pytest.mark.skipif(os.name != "nt", reason="Windows test only") @mock.patch('os.path.isfile') @mock.patch('shutil.which') def test_find_windows_executable_when_not_found(mocked_which, mocked_isfile): mocked_isfile.return_value = False mocked_which.return_value = None found = shell.find_windows_executable('fake/path', 'python') assert found is None assert mocked_isfile.call_count > 1 calls = [mock.call('fake\\path\\python')] + [ mock.call(f'fake\\path\\python{ext.lower()}') for ext in os.environ['PATHEXT'].split(';') ] assert mocked_isfile.mock_calls == calls @pytest.mark.utils @pytest.mark.skipif(os.name != "nt", reason="Windows test only") @mock.patch('os.path.isfile') @mock.patch('shutil.which') def test_find_windows_executable_when_found(mocked_which, mocked_isfile): mocked_isfile.return_value = False found_path = '/fake/known/system/path/pyenv' mocked_which.return_value = found_path found = shell.find_windows_executable('fake/path', 'pyenv') assert found is found_path assert mocked_isfile.call_count > 1 calls = [mock.call('fake\\path\\pyenv')] + [ mock.call(f'fake\\path\\pyenv{ext.lower()}') for ext in os.environ['PATHEXT'].split(';') ] assert mocked_isfile.mock_calls == calls