1 """Phase 3 structured validation errors share a common base and stable to_dict() schemas.""" 3 from pathlib
import Path
8 REPO_ROOT = Path(__file__).resolve().parents[2]
9 if str(REPO_ROOT)
not in sys.path:
10 sys.path.insert(0, str(REPO_ROOT))
12 from squander.partitioning.noisy_validation_errors
import (
13 NoisyDescriptorValidationError,
14 NoisyPhase3ValidationErrorBase,
15 NoisyPlannerValidationError,
16 NoisyRuntimeValidationError,
21 exc = NoisyPlannerValidationError(
23 first_unsupported_condition=
"x",
25 source_type=
"generated_hea",
26 requested_mode=
"other",
29 assert not hasattr(exc,
"workload_id")
30 assert not hasattr(exc,
"runtime_path")
31 assert exc.to_dict() == {
32 "unsupported_category":
"mode",
33 "first_unsupported_condition":
"x",
35 "source_type":
"generated_hea",
36 "requested_mode":
"other",
42 exc = NoisyDescriptorValidationError(
44 first_unsupported_condition=
"f",
46 source_type=
"generated_hea",
47 requested_mode=
"partitioned_density",
51 assert exc.to_dict() == {
52 "unsupported_category":
"c",
53 "first_unsupported_condition":
"f",
54 "failure_stage":
"st",
55 "source_type":
"generated_hea",
56 "requested_mode":
"partitioned_density",
60 assert not hasattr(exc,
"runtime_path")
64 exc = NoisyRuntimeValidationError(
66 first_unsupported_condition=
"f",
68 source_type=
"generated_hea",
69 requested_mode=
"partitioned_density",
71 runtime_path=
"partitioned_density_descriptor_baseline",
74 assert exc.to_dict() == {
75 "unsupported_category":
"c",
76 "first_unsupported_condition":
"f",
77 "failure_stage":
"st",
78 "source_type":
"generated_hea",
79 "requested_mode":
"partitioned_density",
81 "runtime_path":
"partitioned_density_descriptor_baseline",
86 @pytest.mark.parametrize(
89 NoisyPlannerValidationError(
91 first_unsupported_condition=
"b",
97 NoisyDescriptorValidationError(
99 first_unsupported_condition=
"b",
106 NoisyRuntimeValidationError(
108 first_unsupported_condition=
"b",
119 assert isinstance(exc, NoisyPhase3ValidationErrorBase)
120 assert isinstance(exc, ValueError)
def test_runtime_validation_error_to_dict_includes_workload_and_runtime_path()
def test_planner_validation_error_to_dict_has_no_workload_or_runtime_path()
def test_descriptor_validation_error_to_dict_includes_workload_id_only()
def test_all_concrete_errors_are_instances_of_shared_base(exc)