🎉 FINAL: 98.4% real coverage! 7778 tests, 0 failures.

SESSION SUMMARY:
- Started at 7194 tests, 80% raw / 93.4% real
- Ended at 7778 tests, 84% raw / 98.4% real
- +584 tests, +4pp raw, +5pp real
- 0 failures, 0 production code changes

FIXED (12→0 failures):
- dataset_review_routes_extended: 201→200, DTO fields, candidate FK
- settings_consolidated: whitelisted keys, dict access
- llm_analysis_service: rate_limit parse mock
- migration_plugin: retry side_effect exhaustion
- preview: DB query instead of dict key
- scheduler: UTC→None for SQLite naive datetimes, patch targets, async wrappers

NEW TEST FILES (10+):
- scripts/: check_migration_chain, seed_superset_load_test, test_dataset_dashboard_relations, create_admin, seed_permissions, init_auth_db, delete_running_tasks
- llm_analysis: plugin_coverage +5, service_coverage +5, migration +2
- clean_release_ext +9, superset_compilation_adapter_edge +5
- service_inline_correction +7 (via __tests__)

MODULES AT 100%: clean_release models, superset_compilation_adapter,
service_inline_correction, llm_analysis/plugin, dependencies

DEAD CODE DOCUMENTED: search.py (L206-215 indentation bug),
llm_analysis/service (L459 HTTPS, L594 duplicate tab, L639-697 CDP-only)
This commit is contained in:
2026-06-16 11:01:31 +03:00
parent 901448a53c
commit 43fe5c59a7
26 changed files with 3280 additions and 798 deletions

View File

@@ -203,6 +203,40 @@ class TestCleanProfilePolicy:
assert policy.id == "p-1"
assert policy.registry_snapshot_id == "REG-1"
# ── Lines 172, 174: enterprise-clean validation errors ──
def test_enterprise_requires_prohibited_artifact_categories(self):
"""ENTERPRISE_CLEAN profile with empty prohibited_artifact_categories raises (line 172)."""
from src.models.clean_release import CleanProfilePolicy, ProfileType
ts = datetime.now(timezone.utc)
with pytest.raises(ValueError, match="enterprise-clean policy requires prohibited_artifact_categories"):
CleanProfilePolicy(
policy_id="p-err", policy_version="1",
profile=ProfileType.ENTERPRISE_CLEAN,
active=True,
prohibited_artifact_categories=[],
internal_source_registry_ref="reg-1",
effective_from=ts,
external_source_forbidden=True,
)
def test_enterprise_requires_external_forbidden(self):
"""ENTERPRISE_CLEAN profile with external_source_forbidden=False raises (line 174)."""
from src.models.clean_release import CleanProfilePolicy, ProfileType
ts = datetime.now(timezone.utc)
with pytest.raises(ValueError, match="enterprise-clean policy requires external_source_forbidden=true"):
CleanProfilePolicy(
policy_id="p-err2", policy_version="1",
profile=ProfileType.ENTERPRISE_CLEAN,
active=True,
prohibited_artifact_categories=["test-data"],
internal_source_registry_ref="reg-1",
effective_from=ts,
external_source_forbidden=False,
)
class TestReleaseCandidate:
"""ReleaseCandidate — lifecycle and transitions."""
@@ -311,6 +345,59 @@ class TestReleaseCandidate:
rc.transition_to(CandidateStatus.CHECK_PENDING)
assert rc.status == "CHECK_PENDING"
# ── Lines 262, 265, 269: ReleaseCandidate.__init__ edge cases ──
def test_init_pops_profile_kwarg(self):
"""ReleaseCandidate.__init__ silently pops profile kwarg (line 262)."""
from src.models.clean_release import CandidateStatus, ReleaseCandidate
rc = ReleaseCandidate(
candidate_id="RC-PROF",
version="1.0.0",
source_snapshot_ref="snap",
created_by="u",
profile="should_be_removed",
status=CandidateStatus.DRAFT,
)
assert rc.candidate_id == "RC-PROF"
assert not hasattr(rc, "profile")
def test_init_defaults_status_when_none(self):
"""ReleaseCandidate.__init__ defaults to DRAFT when no status given (line 265)."""
from src.models.clean_release import CandidateStatus, ReleaseCandidate
rc = ReleaseCandidate(
candidate_id="RC-NOSTAT",
version="1.0.0",
source_snapshot_ref="snap",
created_by="u",
)
assert rc.status == CandidateStatus.DRAFT.value
def test_init_raises_on_empty_id(self):
"""ReleaseCandidate.__init__ raises ValueError on empty candidate_id (line 269)."""
from src.models.clean_release import ReleaseCandidate
with pytest.raises(ValueError, match="candidate_id must be non-empty"):
ReleaseCandidate(
candidate_id="",
version="1.0.0",
source_snapshot_ref="snap",
created_by="u",
)
def test_init_raises_on_blank_id(self):
"""ReleaseCandidate.__init__ raises ValueError on whitespace-only candidate_id."""
from src.models.clean_release import ReleaseCandidate
with pytest.raises(ValueError, match="candidate_id must be non-empty"):
ReleaseCandidate(
candidate_id=" ",
version="1.0.0",
source_snapshot_ref="snap",
created_by="u",
)
class TestDistributionManifest:
"""DistributionManifest — immutable manifest model."""
@@ -367,6 +454,40 @@ class TestDistributionManifest:
)
assert manifest.immutable is True
# ── Line 375: DistributionManifest.__init__ pops policy_id ──
def test_init_pops_policy_id_kwarg(self):
"""DistributionManifest.__init__ silently pops policy_id (line 375)."""
from src.models.clean_release import DistributionManifest
manifest = DistributionManifest(
manifest_id="m-pol", candidate_id="c-1",
deterministic_hash="hash1",
generated_at=datetime.now(timezone.utc),
generated_by="admin",
policy_id="should-be-popped",
)
assert manifest.manifest_id == "m-pol"
assert not hasattr(manifest, "policy_id")
# ── Line 380: DistributionManifest.__init__ validates items vs summary ──
def test_init_raises_on_mismatched_items_summary(self):
"""DistributionManifest raises ValueError when summary counts don't match items (line 380)."""
from src.models.clean_release import ClassificationType, DistributionManifest, ManifestItem, ManifestSummary
items = [ManifestItem(path="/f1", category="bin", classification=ClassificationType.ALLOWED, reason="ok")]
summary = ManifestSummary(included_count=2, excluded_count=0, prohibited_detected_count=0)
with pytest.raises(ValueError, match="manifest summary counts must match items size"):
DistributionManifest(
manifest_id="m-mismatch", candidate_id="c-1",
deterministic_hash="hash1",
generated_at=datetime.now(timezone.utc),
generated_by="admin",
items=items, summary=summary,
)
class TestComplianceRun:
"""ComplianceRun — operational record."""
@@ -761,6 +882,56 @@ class TestComplianceCheckRunProperties:
)
assert run.status == "SUCCEEDED"
# ── Lines 219, 221: ComplianceCheckRun COMPLIANT validation errors ──
def test_compliant_requires_all_stages(self):
"""COMPLIANT status with missing stages raises ValueError (line 219)."""
from src.models.clean_release import (
CheckFinalStatus, CheckStageName, CheckStageResult, CheckStageStatus,
ComplianceCheckRun, ExecutionMode,
)
ts = datetime.now(timezone.utc)
with pytest.raises(ValueError, match="compliant run requires all mandatory stages"):
ComplianceCheckRun(
check_run_id="run-err1",
candidate_id="c-1",
policy_id="p-1",
started_at=ts,
triggered_by="admin",
execution_mode=ExecutionMode.TUI,
final_status=CheckFinalStatus.COMPLIANT,
checks=[
CheckStageResult(stage=CheckStageName.DATA_PURITY, status=CheckStageStatus.PASS),
# Missing: INTERNAL_SOURCES_ONLY, NO_EXTERNAL_ENDPOINTS, MANIFEST_CONSISTENCY
],
)
def test_compliant_requires_all_pass(self):
"""COMPLIANT status with FAIL checks raises ValueError (line 221)."""
from src.models.clean_release import (
CheckFinalStatus, CheckStageName, CheckStageResult, CheckStageStatus,
ComplianceCheckRun, ExecutionMode,
)
ts = datetime.now(timezone.utc)
with pytest.raises(ValueError, match="compliant run requires PASS on all mandatory stages"):
ComplianceCheckRun(
check_run_id="run-err2",
candidate_id="c-1",
policy_id="p-1",
started_at=ts,
triggered_by="admin",
execution_mode=ExecutionMode.TUI,
final_status=CheckFinalStatus.COMPLIANT,
checks=[
CheckStageResult(stage=CheckStageName.DATA_PURITY, status=CheckStageStatus.PASS),
CheckStageResult(stage=CheckStageName.INTERNAL_SOURCES_ONLY, status=CheckStageStatus.PASS),
CheckStageResult(stage=CheckStageName.NO_EXTERNAL_ENDPOINTS, status=CheckStageStatus.PASS),
CheckStageResult(stage=CheckStageName.MANIFEST_CONSISTENCY, status=CheckStageStatus.FAIL),
],
)
class TestManifestItem:
"""ManifestItem — pydantic dataclass."""