def test_integers_are_converted_to_strings(): staging = WarehouseProfile(name="staging") staging.username = 5555 assert staging.to_envvars() == { "WAREHOUSE_STAGING_HOST": "localhost", "WAREHOUSE_STAGING_USERNAME": "******", }
def test_const_values_set_on_live_profile_instance_override_envvars( profile_name, monkeypatch): wp = WarehouseProfile( name=profile_name, profile_is_live=True, values={ "host": "localhost.test", "username": "******" }, ) assert wp.profile_is_live assert wp.host == "localhost.test" assert wp.username == "test" assert wp.to_dict() == { "host": "localhost.test", "username": "******", "password": None, } monkeypatch.setenv(WarehouseProfile.host.get_envvar(wp), "ignored-host") monkeypatch.setenv(WarehouseProfile.password.get_envvar(wp), "not-ignored-password") assert wp.host == "localhost.test" assert wp.password == "not-ignored-password"
def test_concrete_frozen_profile(monkeypatch): monkeypatch.setenv("WAREHOUSE_PROFILE", "something_else") # ignored monkeypatch.setenv("WAREHOUSE_STAGING_PARENT_PROFILE", "not_production") # ignored monkeypatch.setenv("WAREHOUSE_STAGING_USERNAME", "staging-username") monkeypatch.setenv("WAREHOUSE_PRODUCTION_PASSWORD", "production-password") live = WarehouseProfile(name="staging", parent_name="production", profile_is_live=True) frozen = WarehouseProfile(name="staging", parent_name="production", profile_is_live=False) assert live.username == "staging-username" assert frozen.username is None assert live.password == "production-password" assert frozen.password is None assert live.host == "localhost" assert frozen.host == "localhost" frozen._do_load() assert live.host == frozen.host assert live.username == frozen.username assert live.password == frozen.password
def test_activates_live_profile(profile_name): wp = WarehouseProfile() instance = WarehouseProfile(name=profile_name) instance.activate() assert wp._active_profile_name == profile_name assert instance.profile_is_active
def test_sets_profile_property_value(name, profile_is_live): profile = WarehouseProfile(name=name, profile_is_live=profile_is_live) assert profile.username is None profile.username = "******" assert profile.username == "the-new-username" assert "username" not in profile.__dict__
def test_to_envvars_includes_parent_profile_setting(profile_is_live): staging = WarehouseProfile( name="staging", parent_name="production", profile_is_live=profile_is_live, values={"username": "******"}, ) assert staging.to_envvars() == { "WAREHOUSE_STAGING_PARENT_PROFILE": "production", "WAREHOUSE_STAGING_HOST": "localhost", "WAREHOUSE_STAGING_USERNAME": "******", }
def test_profile_delegate_as_property(monkeypatch): the_profile = WarehouseProfile(name="p1") class WarehouseConfig(WarehouseProfile): @property def profile_delegate(self): return the_profile # NB! In this case when the profile object is available at class declaration time # the above could also be expressed with just: # profile_delegate = the_profile @property def profile(self): return the_profile @property def username(self): return self.profile.username or "root" config = WarehouseConfig() assert config.profile_name == "p1" assert config.username == "root" assert config.host == "localhost" monkeypatch.setenv("WAREHOUSE_P1_HOST", "p1.host") assert config.host == "p1.host" assert config["host"] == "p1.host"
def test_frozen_profile_with_defaults(monkeypatch): wp = WarehouseProfile.load( name="staging", defaults={ "host": "default-host", "username": "******" }, ) assert wp._const_defaults == { "host": "default-host", "username": "******", } assert wp._const_values == {} assert wp.host == "default-host" assert wp.username == "default-username" monkeypatch.setenv("WAREHOUSE_STAGING_HOST", "custom-host") assert wp.host == "default-host" assert wp.username == "default-username" wp._do_load() assert wp.host == "custom-host" assert wp.username == "default-username"
def test_create_environment_with_and_without_activation(): wp: Union[WarehouseProfile, EnvvarProfile] = WarehouseProfile(name='for_this_test') original_values = wp.to_dict() env_with_activation = wp.create_env(username='******', password=None) assert env_with_activation == { 'WAREHOUSE_PROFILE': 'for_this_test', 'WAREHOUSE_FOR_THIS_TEST_HOST': 'localhost', 'WAREHOUSE_FOR_THIS_TEST_USERNAME': '******', 'WAREHOUSE_FOR_THIS_TEST_PASSWORD': None, } env_without_activation = wp.create_env(username='******', password=None, include_activation=False) assert env_without_activation == { 'WAREHOUSE_FOR_THIS_TEST_HOST': 'localhost', 'WAREHOUSE_FOR_THIS_TEST_USERNAME': '******', 'WAREHOUSE_FOR_THIS_TEST_PASSWORD': None, } # The profile remains unchanged assert original_values == wp.to_dict()
def test_activates_named_profile(): wp = WarehouseProfile() wp.activate("staging") assert wp._active_profile_name == "staging" wp.activate("production") assert wp._active_profile_name == "production" wp.activate(None) assert wp._active_profile_name is None
def test_custom_profile_is_frozen_but_could_be_active(monkeypatch): monkeypatch.setenv("WAREHOUSE_PROFILE", "staging") profile = WarehouseProfile.load("staging") assert profile.profile_name == "staging" assert profile.profile_is_active monkeypatch.setenv("WAREHOUSE_PROFILE", "") assert not profile.profile_is_active monkeypatch.setenv("WAREHOUSE_PROFILE", "staging") assert profile.profile_is_active
def test_environment_content_is_determined_at_creation_time(): wp: Union[WarehouseProfile, EnvvarProfile] = WarehouseProfile(name='creation') first = wp.create_env(username='******') second = wp.create_env(password='******') assert first['WAREHOUSE_CREATION_USERNAME'] == 'first_username' assert second['WAREHOUSE_CREATION_USERNAME'] is None assert first['WAREHOUSE_CREATION_PASSWORD'] is None assert second['WAREHOUSE_CREATION_PASSWORD'] == 'second_password'
def test_ultimate_live_profile(): profile = WarehouseProfile() assert profile.profile_root == "warehouse" assert profile._const_name is None assert profile._const_parent_name is None assert profile.profile_is_live is True assert not profile.profile_name assert not profile._profile_parent_name assert not profile._profile_parent assert profile.profile_is_active
def test_const_values_set_on_frozen_profile_instance(profile_name, monkeypatch): wp = WarehouseProfile.load(name=profile_name, values={ "host": "localhost.test", "username": "******" }) assert not wp.profile_is_live assert wp.host == "localhost.test" assert wp.username == "test" assert wp.to_dict() == { "host": "localhost.test", "username": "******", "password": None, }
def test_environment_applied(monkeypatch): wp: Union[WarehouseProfile, EnvvarProfile] = WarehouseProfile(name='env_test') outer_env = wp.create_env(username='******', password=None) # Environment content is determined at the time of the creation. inner_env = wp.create_env(password='******') assert wp.host == 'localhost' assert wp.username is None assert wp.password is None with outer_env.applied(monkeypatch): assert os.environ['WAREHOUSE_ENV_TEST_HOST'] == 'localhost' assert os.environ['WAREHOUSE_ENV_TEST_USERNAME'] == 'outer_username' assert 'WAREHOUSE_ENV_TEST_PASSWORD' not in os.environ assert wp.host == 'localhost' assert wp.username == 'outer_username' assert wp.password is None with inner_env.applied(monkeypatch): assert os.environ['WAREHOUSE_ENV_TEST_HOST'] == 'localhost' assert 'WAREHOUSE_ENV_TEST_USERNAME' not in os.environ assert os.environ[ 'WAREHOUSE_ENV_TEST_PASSWORD'] == 'inner_password' assert wp.host == 'localhost' assert wp.username is None assert wp.password == 'inner_password' assert wp.host == 'localhost' assert wp.username == 'outer_username' assert wp.password is None assert wp.host == 'localhost' assert wp.username is None assert wp.password is None
def test_default_profile_is_active_and_live(): profile = WarehouseProfile() assert profile.profile_name is None assert profile.profile_is_active assert profile.profile_is_live