44 lines
1.1 KiB
Python
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
|