|  | @@ -0,0 +1,58 @@
 | 
	
		
			
				|  |  | +import pytest
 | 
	
		
			
				|  |  | +from flexmock import flexmock
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +from borgmatic.config import constants as module
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +@pytest.mark.parametrize(
 | 
	
		
			
				|  |  | +    'value,expected_value',
 | 
	
		
			
				|  |  | +    (
 | 
	
		
			
				|  |  | +        ('3', 3),
 | 
	
		
			
				|  |  | +        ('0', 0),
 | 
	
		
			
				|  |  | +        ('-3', -3),
 | 
	
		
			
				|  |  | +        ('1234', 1234),
 | 
	
		
			
				|  |  | +        ('true', True),
 | 
	
		
			
				|  |  | +        ('True', True),
 | 
	
		
			
				|  |  | +        ('false', False),
 | 
	
		
			
				|  |  | +        ('False', False),
 | 
	
		
			
				|  |  | +        ('thing', 'thing'),
 | 
	
		
			
				|  |  | +        ({}, {}),
 | 
	
		
			
				|  |  | +        ({'foo': 'bar'}, {'foo': 'bar'}),
 | 
	
		
			
				|  |  | +        ([], []),
 | 
	
		
			
				|  |  | +        (['foo', 'bar'], ['foo', 'bar']),
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +def test_coerce_scalar_converts_value(value, expected_value):
 | 
	
		
			
				|  |  | +    assert module.coerce_scalar(value) == expected_value
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +def test_apply_constants_with_empty_constants_passes_through_value():
 | 
	
		
			
				|  |  | +    assert module.apply_constants(value='thing', constants={}) == 'thing'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +@pytest.mark.parametrize(
 | 
	
		
			
				|  |  | +    'value,expected_value',
 | 
	
		
			
				|  |  | +    (
 | 
	
		
			
				|  |  | +        (None, None),
 | 
	
		
			
				|  |  | +        ('thing', 'thing'),
 | 
	
		
			
				|  |  | +        ('{foo}', 'bar'),
 | 
	
		
			
				|  |  | +        ('abc{foo}', 'abcbar'),
 | 
	
		
			
				|  |  | +        ('{foo}xyz', 'barxyz'),
 | 
	
		
			
				|  |  | +        ('{foo}{baz}', 'barquux'),
 | 
	
		
			
				|  |  | +        ('{int}', '3'),
 | 
	
		
			
				|  |  | +        ('{bool}', 'True'),
 | 
	
		
			
				|  |  | +        (['thing', 'other'], ['thing', 'other']),
 | 
	
		
			
				|  |  | +        (['thing', '{foo}'], ['thing', 'bar']),
 | 
	
		
			
				|  |  | +        (['{foo}', '{baz}'], ['bar', 'quux']),
 | 
	
		
			
				|  |  | +        ({'key': 'value'}, {'key': 'value'}),
 | 
	
		
			
				|  |  | +        ({'key': '{foo}'}, {'key': 'bar'}),
 | 
	
		
			
				|  |  | +        (3, 3),
 | 
	
		
			
				|  |  | +        (True, True),
 | 
	
		
			
				|  |  | +        (False, False),
 | 
	
		
			
				|  |  | +    ),
 | 
	
		
			
				|  |  | +)
 | 
	
		
			
				|  |  | +def test_apply_constants_makes_string_substitutions(value, expected_value):
 | 
	
		
			
				|  |  | +    flexmock(module).should_receive('coerce_scalar').replace_with(lambda value: value)
 | 
	
		
			
				|  |  | +    constants = {'foo': 'bar', 'baz': 'quux', 'int': 3, 'bool': True}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    assert module.apply_constants(value, constants) == expected_value
 |