o2o-plagiarism-ai/tests/test_case_coverage.py

44 lines
1.1 KiB
Python

"""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