# Created by AG on 22-12-2025 import random from typing import Any, Dict, List from copy import deepcopy from src.utils import _drop_required_field from src.payload_generation_utils import _generate_primitive_data_type from src.schema_builders import AvroContract, _generate_union, _generate_dict_contract from src.schema_builders import _generate_invalid_type, _generate_invalid_enum, _generate_invalid_required def generate_valid_payload( contract: Any, rng: random.Random ) -> Any: if isinstance(contract, list): return _generate_union(contract, rng) if isinstance(contract, str): return _generate_primitive_data_type(contract, rng) if isinstance(contract, dict): return _generate_dict_contract(contract, rng) return None def generate_invalid_payload( parsed_contract: AvroContract, rng: random.Random ) -> Dict[str, Any]: base_contract = generate_valid_payload(contract=parsed_contract, rng=rng) if not isinstance(base_contract, dict): return { "_is_invalid": True } if parsed_contract.get("type") != "record": return { "_is_invalid" : True } breaking_change: Dict[str, Any] = deepcopy(base_contract) breaking_changes: List = [ _drop_required_field, _generate_invalid_type, _generate_invalid_enum, _generate_invalid_required ] select_breaking_changes = rng.choice(breaking_changes) return select_breaking_changes(breaking_change, parsed_contract, rng)