from __future__ import annotations from sync_state_machine.config.builder import _apply_strategy_overrides from sync_state_machine.config.strategy_config import StrategyConfig, StrategyRuntimeConfig def test_strategy_runtime_config_skip_sync_defaults_false() -> None: runtime_config = StrategyRuntimeConfig(node_type="project") assert runtime_config.skip_sync is False assert runtime_config.skip_post_check is False def test_apply_strategy_overrides_allows_skip_sync_override() -> None: resolved = _apply_strategy_overrides( node_types=["project"], strategy_overrides={ "project": { "skip_sync": True, "skip_post_check": True, } }, ) assert len(resolved) == 1 assert resolved[0].node_type == "project" assert resolved[0].skip_sync is True assert resolved[0].skip_post_check is True def test_strategy_config_supports_both_post_check_ignore_fields() -> None: config = StrategyConfig.model_validate( { "post_check_ignore_fields": ["code"], "post_check_ignore_list_item_fields": {"plan_node": ["is_audit"]}, "allow_many_to_one_auto_bind": True, } ) assert config.post_check_ignore_fields == ["code"] assert config.post_check_ignore_list_item_fields == {"plan_node": ["is_audit"]} assert config.allow_many_to_one_auto_bind is True