| 55 | |
| 56 | @dataclass |
| 57 | class TestImpactPlan: |
| 58 | file_deltas: FileDeltas = field(default_factory=FileDeltas) |
| 59 | changed_test_files: list[str] = field(default_factory=list) |
| 60 | deleted_test_files: list[str] = field(default_factory=list) |
| 61 | changed_e2e_files: list[str] = field(default_factory=list) |
| 62 | changed_workflow_files: list[str] = field(default_factory=list) |
| 63 | test_cases_added: int = 0 |
| 64 | test_cases_removed: int = 0 |
| 65 | assertions_added: int = 0 |
| 66 | assertions_removed: int = 0 |
| 67 | skips_added: int = 0 |
| 68 | continue_on_error_added: int = 0 |
| 69 | path_filters_added: int = 0 |
| 70 | retry_lines_added: int = 0 |
| 71 | workflow_jobs_removed: int = 0 |
| 72 | test_commands_removed: int = 0 |
| 73 | missing_patch_files: list[str] = field(default_factory=list) |
| 74 | expected_file_count: int | None = None |
| 75 | observed_file_count: int = 0 |
| 76 | warnings: list[Warning] = field(default_factory=list) |
| 77 | |
| 78 | @property |
| 79 | def coverage_risk(self) -> str: |
| 80 | if any(w.severity == "likely_reduced" for w in self.warnings): |
| 81 | return "likely reduced" |
| 82 | if self.warnings: |
| 83 | return "needs review" |
| 84 | return "neutral or increased" |
| 85 | |
| 86 | |
| 87 | def is_test_file(path: str) -> bool: |
no outgoing calls