diff --git a/tests/unit/test_base_command.py b/tests/unit/test_base_command.py index fc6cf2b7a..ba34b3922 100644 --- a/tests/unit/test_base_command.py +++ b/tests/unit/test_base_command.py @@ -2,6 +2,8 @@ import logging import os import time +from mock import patch + from pip._internal.cli.base_command import Command from pip._internal.utils.logging import BrokenStdoutLoggingError @@ -72,6 +74,16 @@ class TestCommand(object): assert 'Traceback (most recent call last):' in stderr +@patch('pip._internal.cli.req_command.Command.handle_pip_version_check') +def test_handle_pip_version_check_called(mock_handle_version_check): + """ + Check that Command.handle_pip_version_check() is called. + """ + cmd = FakeCommand() + cmd.main([]) + mock_handle_version_check.assert_called_once() + + class Test_base_command_logging(object): """ Test `pip.base_command.Command` setting up logging consumers based on diff --git a/tests/unit/test_commands.py b/tests/unit/test_commands.py index 42a18a819..be6c78352 100644 --- a/tests/unit/test_commands.py +++ b/tests/unit/test_commands.py @@ -1,4 +1,5 @@ import pytest +from mock import patch from pip._internal.cli.req_command import ( IndexGroupCommand, @@ -7,6 +8,10 @@ from pip._internal.cli.req_command import ( ) from pip._internal.commands import commands_dict, create_command +# These are the expected names of the commands whose classes inherit from +# IndexGroupCommand. +EXPECTED_INDEX_GROUP_COMMANDS = ['download', 'install', 'list', 'wheel'] + def check_commands(pred, expected): """ @@ -51,19 +56,50 @@ def test_index_group_commands(): """ Test the commands inheriting from IndexGroupCommand. """ - expected = ['download', 'install', 'list', 'wheel'] - def is_index_group_command(command): return isinstance(command, IndexGroupCommand) - check_commands(is_index_group_command, expected) + check_commands(is_index_group_command, EXPECTED_INDEX_GROUP_COMMANDS) # Also check that the commands inheriting from IndexGroupCommand are # exactly the commands with the --no-index option. def has_option_no_index(command): return command.parser.has_option('--no-index') - check_commands(has_option_no_index, expected) + check_commands(has_option_no_index, EXPECTED_INDEX_GROUP_COMMANDS) + + +@pytest.mark.parametrize('command_name', EXPECTED_INDEX_GROUP_COMMANDS) +@pytest.mark.parametrize( + 'disable_pip_version_check, no_index, expected_called', + [ + # pip_version_check() is only called when both + # disable_pip_version_check and no_index are False. + (False, False, True), + (False, True, False), + (True, False, False), + (True, True, False), + ], +) +@patch('pip._internal.cli.req_command.pip_version_check') +def test_index_group_handle_pip_version_check( + mock_version_check, command_name, disable_pip_version_check, no_index, + expected_called, +): + """ + Test whether pip_version_check() is called when handle_pip_version_check() + is called, for each of the IndexGroupCommand classes. + """ + command = create_command(command_name) + options = command.parser.get_default_values() + options.disable_pip_version_check = disable_pip_version_check + options.no_index = no_index + + command.handle_pip_version_check(options) + if expected_called: + mock_version_check.assert_called_once() + else: + mock_version_check.assert_not_called() def test_requirement_commands():