"""39 케이스 커버리지 갭 분석 단위테스트.""" from __future__ import annotations from dataclasses import dataclass from app.engine.case_coverage import analyze_coverage @dataclass class _Case: case_id: str subgroup: str actor: str detectable_internal: bool _CASES = [ _Case("A1", "A-1", "저자(가해)", True), _Case("A2", "A-1", "저자(가해)", True), _Case("C1", "C", "플랫폼", False), # 탐지 범위 밖 ] def test_no_data_all_detectable_need_data(): rep = analyze_coverage(_CASES, None) assert rep["detectable_cases"] == 2 assert rep["need_data_cases"] == 2 assert rep["covered_cases"] == 0 assert rep["coverage_ratio"] == 0.0 def test_with_samples_marks_covered(): rep = analyze_coverage(_CASES, {"A1": 10}) assert rep["covered_cases"] == 1 assert rep["need_data_cases"] == 1 assert rep["coverage_ratio"] == 0.5 def test_out_of_scope_excluded_from_request(): rep = analyze_coverage(_CASES, {"A1": 5, "A2": 5}) ids = {x["case_id"] for x in rep["data_request_list"]} assert "C1" not in ids assert rep["need_data_cases"] == 0