Example #1
0
def test_set_subconfig_over_option():
    """Test that overwritting an option with a subconfig is not possible"""
    config = Configuration()
    config.add_option('test', option_type=int)
    config.test = 1
    assert config.test == 1
    with pytest.raises(TypeError) as exc:
        config.test = Configuration()
    assert "Cannot overwrite option test with a configuration" in str(exc.value)
Example #2
0
def test_set_str_value():
    """Test that a string option can have its value set"""
    config = Configuration()
    config.add_option("test", option_type=str)

    with pytest.raises(ConfigurationError):
        config.test

    config.test = "1"
    assert config.test == "1"
    config.test = 1
    assert config.test == "1"
Example #3
0
def test_set_real_value():
    """Test that a float option can have its value set"""
    config = Configuration()
    config.add_option('test', option_type=float)

    with pytest.raises(ConfigurationError) as exc:
        config.test

    config.test = 1
    assert config.test == 1.0
    config.test = "1"
    assert config.test == 1.0
    with pytest.raises(TypeError) as exc:
        config.test = "voici_voila"
    assert "<class 'float'> cannot be set to voici_voila with type <class 'str'>" in str(exc.value)
Example #4
0
def test_set_int_value():
    """Test that an integer option can have its value set"""
    config = Configuration()
    config.add_option("test", option_type=int)

    with pytest.raises(ConfigurationError) as exc:
        config.test

    config.test = 1
    assert config.test == 1
    config.test = "1"
    assert config.test == 1
    with pytest.raises(TypeError) as exc:
        config.test = "voici_voila"
    assert "<class 'int'> cannot be set to voici_voila with type <class 'str'>" in str(
        exc.value)
Example #5
0
def test_set_non_existing_option():
    """Test that setting a non existing option crash"""
    config = Configuration()
    with pytest.raises(TypeError) as exc:
        config.test = 1
    assert "Can only set test as a Configuration, not <class 'int'>" in str(
        exc.value)
Example #6
0
def test_set_subconfig():
    """Test that setting a subconfig works"""
    config = Configuration()
    config.test = Configuration()

    assert isinstance(config.test, Configuration)

    with pytest.raises(ConfigurationError):
        config.test.voici_voila
Example #7
0
def test_local_precedence(yaml_path):
    """Test local setting has precedence over env var values"""
    config = Configuration()
    config.add_option('test', option_type=str, default="voici_voila", env_var="TOP_SECRET_MESSAGE")
    assert config.test == "voici_voila"

    config.load_yaml(yaml_path)
    assert config.test == "from my yaml!"

    os.environ['TOP_SECRET_MESSAGE'] = 'coussi_coussa'
    assert config.test == "coussi_coussa"

    config.test = "comme_ci_comme_ca"
    assert config.test == "comme_ci_comme_ca"

    del os.environ['TOP_SECRET_MESSAGE']
Example #8
0
def test_to_dict():
    """Test dictionary representation of the configuration"""
    config = Configuration()
    config.add_option("test", option_type=str, default="voici_voila")
    config.nested = Configuration()
    config.nested.add_option("test2", option_type=str, default="zici")

    assert config.to_dict() == {
        "test": "voici_voila",
        "nested": {
            "test2": "zici"
        }
    }

    config.test = "hello"
    config.nested.test2 = "labas"

    assert config.to_dict() == {"test": "hello", "nested": {"test2": "labas"}}
Example #9
0
def test_to_dict():
    """Test dictionary representation of the configuration"""
    config = Configuration()
    config.add_option('test', option_type=str, default="voici_voila")
    config.nested = Configuration()
    config.nested.add_option('test2', option_type=str, default="zici")

    assert config.to_dict() == {
        'test': 'voici_voila',
        'nested': {
            'test2': 'zici'
        }
    }

    config.test = 'hello'
    config.nested.test2 = 'labas'

    assert config.to_dict() == {'test': 'hello', 'nested': {'test2': 'labas'}}