pip/tests/unit/test_configuration.py

209 lines
7.0 KiB
Python

"""Tests for all things related to the configuration
"""
import os
import pytest
from mock import MagicMock
from pip.exceptions import ConfigurationError
from pip.locations import new_config_file, site_config_files, venv_config_file
from tests.lib.configuration_helpers import ConfigurationMixin, kinds
class TestConfigurationLoading(ConfigurationMixin):
def test_global_loading(self):
self.patch_configuration(kinds.GLOBAL, {"test.hello": "1"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "1"
def test_user_loading(self):
self.patch_configuration(kinds.USER, {"test.hello": "2"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "2"
def test_venv_loading(self):
self.patch_configuration(kinds.VENV, {"test.hello": "3"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "3"
def test_environment_config_loading(self):
contents = """
[test]
hello = 4
"""
with self.tmpfile(contents) as config_file:
os.environ["PIP_CONFIG_FILE"] = config_file
self.configuration.load()
assert self.configuration.get_value("test.hello") == "4", \
self.configuration._config
def test_environment_var_loading(self):
os.environ["PIP_HELLO"] = "5"
self.configuration.load()
assert self.configuration.get_value(":env:.hello") == "5"
@pytest.mark.skipif("sys.platform == 'win32'")
def test_environment_var_does_not_load_lowercase(self):
os.environ["pip_hello"] = "5"
self.configuration.load()
with pytest.raises(ConfigurationError):
self.configuration.get_value(":env:.hello")
def test_environment_var_does_not_load_version(self):
os.environ["PIP_VERSION"] = "True"
self.configuration.load()
with pytest.raises(ConfigurationError):
self.configuration.get_value(":env:.version")
class TestConfigurationPrecedence(ConfigurationMixin):
# Tests for methods to that determine the order of precedence of
# configuration options
def test_env_overides_venv(self):
self.patch_configuration(kinds.VENV, {"test.hello": "1"})
self.patch_configuration(kinds.ENV, {"test.hello": "0"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "0"
def test_env_overides_user(self):
self.patch_configuration(kinds.USER, {"test.hello": "2"})
self.patch_configuration(kinds.ENV, {"test.hello": "0"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "0"
def test_env_overides_global(self):
self.patch_configuration(kinds.GLOBAL, {"test.hello": "3"})
self.patch_configuration(kinds.ENV, {"test.hello": "0"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "0"
def test_venv_overides_user(self):
self.patch_configuration(kinds.USER, {"test.hello": "2"})
self.patch_configuration(kinds.VENV, {"test.hello": "1"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "1"
def test_venv_overides_global(self):
self.patch_configuration(kinds.GLOBAL, {"test.hello": "3"})
self.patch_configuration(kinds.VENV, {"test.hello": "1"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "1"
def test_user_overides_global(self):
self.patch_configuration(kinds.GLOBAL, {"test.hello": "3"})
self.patch_configuration(kinds.USER, {"test.hello": "2"})
self.configuration.load()
assert self.configuration.get_value("test.hello") == "2"
def test_env_not_overriden_by_environment_var(self):
self.patch_configuration(kinds.ENV, {"test.hello": "1"})
os.environ["PIP_HELLO"] = "5"
self.configuration.load()
assert self.configuration.get_value("test.hello") == "1"
assert self.configuration.get_value(":env:.hello") == "5"
def test_venv_not_overriden_by_environment_var(self):
self.patch_configuration(kinds.VENV, {"test.hello": "2"})
os.environ["PIP_HELLO"] = "5"
self.configuration.load()
assert self.configuration.get_value("test.hello") == "2"
assert self.configuration.get_value(":env:.hello") == "5"
def test_user_not_overriden_by_environment_var(self):
self.patch_configuration(kinds.USER, {"test.hello": "3"})
os.environ["PIP_HELLO"] = "5"
self.configuration.load()
assert self.configuration.get_value("test.hello") == "3"
assert self.configuration.get_value(":env:.hello") == "5"
def test_global_not_overriden_by_environment_var(self):
self.patch_configuration(kinds.GLOBAL, {"test.hello": "4"})
os.environ["PIP_HELLO"] = "5"
self.configuration.load()
assert self.configuration.get_value("test.hello") == "4"
assert self.configuration.get_value(":env:.hello") == "5"
class TestConfigurationModification(ConfigurationMixin):
# Tests for methods to that modify the state of a Configuration
def test_no_specific_given_modification(self):
self.configuration.load()
try:
self.configuration.set_value("test.hello", "10")
except ConfigurationError:
pass
else:
assert False, "Should have raised an error."
def test_venv_modification(self):
self.configuration.load_only = kinds.VENV
self.configuration.load()
# Mock out the method
mymock = MagicMock(spec=self.configuration._mark_as_modified)
self.configuration._mark_as_modified = mymock
self.configuration.set_value("test.hello", "10")
# get the path to venv config file
assert mymock.call_count == 1
assert mymock.call_args[0][0] == venv_config_file
def test_user_modification(self):
# get the path to local config file
self.configuration.load_only = kinds.USER
self.configuration.load()
# Mock out the method
mymock = MagicMock(spec=self.configuration._mark_as_modified)
self.configuration._mark_as_modified = mymock
self.configuration.set_value("test.hello", "10")
# get the path to user config file
assert mymock.call_count == 1
assert mymock.call_args[0][0] == new_config_file
def test_global_modification(self):
# get the path to local config file
self.configuration.load_only = kinds.GLOBAL
self.configuration.load()
# Mock out the method
mymock = MagicMock(spec=self.configuration._mark_as_modified)
self.configuration._mark_as_modified = mymock
self.configuration.set_value("test.hello", "10")
# get the path to user config file
assert mymock.call_count == 1
assert mymock.call_args[0][0] == site_config_files[-1]