rougail-output-formatter/tests/test_load.py

106 lines
4.1 KiB
Python
Raw Permalink Normal View History

2024-12-23 20:54:52 +01:00
from pytest import fixture # , raises
from pathlib import Path
2025-04-27 09:27:04 +02:00
from yamllint import linter
from yamllint.config import YamlLintConfig
2024-12-23 20:54:52 +01:00
from rougail import Rougail
from rougail.output_formatter import RougailOutputFormatter as RougailOutput
from rougail_tests.utils import get_structures_list, get_rougail_config, config_to_dict
excludes = [
2025-04-27 09:27:04 +02:00
# "16_5test_redefine",
2024-12-23 20:54:52 +01:00
]
test_ok = get_structures_list(excludes)
# test_ok = [Path('../rougail-tests/structures/04_5validators_warnings')]
2024-12-23 20:54:52 +01:00
def idfn(fixture_value):
return fixture_value.name
@fixture(scope="module", params=test_ok, ids=idfn)
def test_dir(request):
return request.param
def get_output_director(namespace):
return Path(__file__).parent / 'results'
def _test_structural_files(file_name, namespace, rougailconfig):
##################################
rougailconfig['step.output'] = 'formatter'
##################################
config = None
generated_output = RougailOutput(config, rougailconfig=rougailconfig).run()[1] + '\n'
2024-12-23 20:54:52 +01:00
output_file = get_output_director(namespace) / file_name.parent.parent.name / file_name.parent.name / file_name.name
if not output_file.is_file():
if not output_file.parent.is_dir():
output_file.parent.mkdir(parents=True)
output_file.write_text(file_name.read_text())
with output_file.open() as outfh:
attented_output = outfh.read()
assert generated_output == attented_output, f'filename {output_file}'
2025-04-27 09:27:04 +02:00
conf = YamlLintConfig('extends: default')
problems = list(linter.run(generated_output, conf, ''))
assert problems == [], f'filename {output_file}'
2024-12-23 20:54:52 +01:00
def test_structural_files_formatter(test_dir):
namespace = False
rougailconfig = get_rougail_config(test_dir, namespace)
if not rougailconfig:
return
2025-09-22 14:24:23 +02:00
dirs = rougailconfig['main_structural_directories']
2024-12-23 20:54:52 +01:00
for dir_name in dirs:
for file_name in Path(dir_name).iterdir():
if file_name.suffix in [".yml", ".yaml"]:
2025-09-22 14:24:23 +02:00
rougailconfig["main_structural_directories"] = [str(file_name)]
2024-12-23 20:54:52 +01:00
_test_structural_files(file_name, namespace, rougailconfig)
def test_structural_files_formatter_namespace(test_dir):
namespace = True
rougailconfig = get_rougail_config(test_dir, namespace)
if not rougailconfig:
return
2025-09-22 14:24:23 +02:00
for dir_name in rougailconfig['main_structural_directories']:
2024-12-23 20:54:52 +01:00
for file_name in Path(dir_name).iterdir():
if file_name.suffix in [".yml", ".yaml"]:
2025-09-22 14:24:23 +02:00
rougailconfig["main_structural_directories"] = [str(file_name)]
2024-12-23 20:54:52 +01:00
_test_structural_files(file_name, namespace, rougailconfig)
2025-09-22 14:24:23 +02:00
for namespace, dirs_name in rougailconfig['extra_namespaces'].items():
2024-12-23 20:54:52 +01:00
rougailconfig["main_namespace"] = namespace
for dir_name in dirs_name:
for file_name in Path(dir_name).iterdir():
if file_name.suffix in [".yml", ".yaml"]:
2025-09-22 14:24:23 +02:00
rougailconfig["main_structural_directories"] = [str(file_name)]
2024-12-23 20:54:52 +01:00
_test_structural_files(file_name, namespace, rougailconfig)
def test_structural_files_formatter_load(test_dir):
namespace = True
rougailconfig = get_rougail_config(test_dir, namespace)
if not rougailconfig:
return
output_director = get_output_director(namespace) / test_dir.name
if not output_director.is_dir():
return
rougail = Rougail(rougailconfig)
config = rougail.run()
before_config_dict = dict(config_to_dict(config.value.get()))
#
2025-09-22 14:24:23 +02:00
rougailconfig['main_structural_directories'] = [str(output_director / Path(dirpath).name) for dirpath in rougailconfig["main_structural_directories"]]
extra_namespaces = {}
for ns, dirpaths in rougailconfig['extra_namespaces'].items():
extra_namespaces[ns] = [str(output_director / Path(dirpath).name) for dirpath in dirpaths]
rougailconfig['extra_namespaces'] = extra_namespaces
2024-12-23 20:54:52 +01:00
rougail = Rougail(rougailconfig)
config = rougail.run()
after_config_dict = dict(config_to_dict(config.value.get()))
assert before_config_dict == after_config_dict, f'directory {test_dir}'