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)
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"
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)
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)
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)
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
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']
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"}}
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'}}