import pytest from agebd.subs import SubstitutionsConfig from agebd.utils import get_git_root from ci.check_subs import ( check_declared, check_location, check_no_legacy_delimiters, check_subs, ) REPO_ROOT = get_git_root(__file__) @pytest.fixture def config(): return SubstitutionsConfig.load(REPO_ROOT / "config") def test_repo_satisfies_the_substitution_contract(): check_subs() def test_undeclared_token_in_a_render_path_is_reported(config): errors = check_declared(config, "qt/A_BD_Tune.ui", "AGEBD-TUNE@@agebd_env_sufix_upper@@:AO") assert len(errors) == 1 assert "agebd_env_sufix_upper" in errors[0] def test_declared_token_in_a_render_path_is_accepted(config): assert check_declared(config, "qt/A_BD_Tune.ui", "@@agebd_env_suffix_upper@@") == [] def test_token_outside_a_rendered_path_is_reported(config): errors = check_location(config, "bin/start_service.sh", "SUFFIX=@@agebd_env_suffix_upper@@") assert len(errors) == 1 assert "never rendered" in errors[0] def test_token_in_a_render_path_is_accepted(config): assert check_location(config, "qt/A_BD_Tune.ui", "@@agebd_env_suffix_upper@@") == [] def test_token_in_a_passthrough_path_is_accepted(config): assert ( check_location( config, "templates/service/{{service_name_lower}}/current/ioc/x.jinja", "@@agebd_env_suffix_upper@@", ) == [] ) def test_legacy_delimiters_are_reported(config): errors = check_no_legacy_delimiters( config, "qt/A_BD_Tune.ui", "AGEBD-TUNE{{ agebd_env_suffix_upper }}:AO" ) assert len(errors) == 1 assert "@@agebd_env_suffix_upper@@" in errors[0] def test_creation_time_tokens_are_left_alone(config): """{{ service_name_upper }} is copier's, not ours.""" assert ( check_no_legacy_delimiters( config, "templates/service/x/current/ioc/y.jinja", "{{ service_name_upper }}" ) == [] )