1
0
mirror of https://github.com/TheLocehiliosan/yadm synced 2024-10-27 20:34:27 +00:00
TheLocehiliosan_yadm/test/test_config.py
jonasc 60b23e33e8
Assert existence of config file's parent directory
Fixes TheLocehiliosan/yadm#226

When a config file path is passed to yadm whose parent directory does
not exist, git (and hence yadm) fails without writing the file.
Yadm should, however, make sure that the directory exists s.t. git can
just write to the file.
2020-07-08 15:13:03 -05:00

164 lines
3.8 KiB
Python

"""Test config"""
import os
import pytest
TEST_SECTION = 'test'
TEST_ATTRIBUTE = 'attribute'
TEST_KEY = f'{TEST_SECTION}.{TEST_ATTRIBUTE}'
TEST_VALUE = 'testvalue'
TEST_FILE = f'[{TEST_SECTION}]\n\t{TEST_ATTRIBUTE} = {TEST_VALUE}'
def test_config_no_params(runner, yadm_y, supported_configs):
"""No parameters
Display instructions
Display supported configs
Exit with 0
"""
run = runner(yadm_y('config'))
assert run.success
assert run.err == ''
assert 'Please read the CONFIGURATION section' in run.out
for config in supported_configs:
assert config in run.out
def test_config_read_missing(runner, yadm_y):
"""Read missing attribute
Display an empty value
Exit with 0
"""
run = runner(yadm_y('config', TEST_KEY))
assert run.success
assert run.err == ''
assert run.out == ''
def test_config_write(runner, yadm_y, paths):
"""Write attribute
Display no output
Update configuration file
Exit with 0
"""
run = runner(yadm_y('config', TEST_KEY, TEST_VALUE))
assert run.success
assert run.err == ''
assert run.out == ''
assert paths.config.read().strip() == TEST_FILE
def test_config_read(runner, yadm_y, paths):
"""Read attribute
Display value
Exit with 0
"""
paths.config.write(TEST_FILE)
run = runner(yadm_y('config', TEST_KEY))
assert run.success
assert run.err == ''
assert run.out.strip() == TEST_VALUE
def test_config_update(runner, yadm_y, paths):
"""Update attribute
Display no output
Update configuration file
Exit with 0
"""
paths.config.write(TEST_FILE)
run = runner(yadm_y('config', TEST_KEY, TEST_VALUE + 'extra'))
assert run.success
assert run.err == ''
assert run.out == ''
assert paths.config.read().strip() == TEST_FILE + 'extra'
@pytest.mark.usefixtures('ds1_repo_copy')
def test_config_local_read(runner, yadm_y, paths, supported_local_configs):
"""Read local attribute
Display value from the repo config
Exit with 0
"""
# populate test values
for config in supported_local_configs:
os.system(
f'GIT_DIR="{paths.repo}" '
f'git config --local "{config}" "value_of_{config}"')
# run yadm config
for config in supported_local_configs:
run = runner(yadm_y('config', config))
assert run.success
assert run.err == ''
assert run.out.strip() == f'value_of_{config}'
@pytest.mark.usefixtures('ds1_repo_copy')
def test_config_local_write(runner, yadm_y, paths, supported_local_configs):
"""Write local attribute
Display no output
Write value to the repo config
Exit with 0
"""
# run yadm config
for config in supported_local_configs:
run = runner(yadm_y('config', config, f'value_of_{config}'))
assert run.success
assert run.err == ''
assert run.out == ''
# verify test values
for config in supported_local_configs:
run = runner(
command=('git', 'config', config),
env={'GIT_DIR': paths.repo})
assert run.success
assert run.err == ''
assert run.out.strip() == f'value_of_{config}'
def test_config_without_parent_directory(runner, yadm_y, paths):
"""Write and read attribute to/from config file with non-existent parent directory
Update configuration file
Display value
Exit with 0
"""
config_file = paths.root + '/folder/does/not/exist/config'
run = runner(yadm_y('--yadm-config', config_file, 'config', TEST_KEY, TEST_VALUE))
assert run.success
assert run.err == ''
assert run.out == ''
paths.config.write(TEST_FILE)
run = runner(yadm_y('--yadm-config', config_file, 'config', TEST_KEY))
assert run.success
assert run.err == ''
assert run.out.strip() == TEST_VALUE