File size: 6,113 Bytes
cc036ff
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
"""Phase 206 final coverage aggregation tests."""
import json
import pytest
from pathlib import Path


def test_phase_206_80_percent_target_achieved():
    """Verify Phase 206 achieved 80% overall coverage."""
    with open('coverage.json', 'r') as f:
        coverage = json.load(f)

    overall = coverage['totals']
    assert overall['percent_covered'] >= 80.0, f"Coverage target not met: {overall['percent_covered']:.2f}%"

    # Verify expansion strategy worked (more files under test)
    assert len(coverage['files']) >= 10, f"Expected at least 10 files under test, got {len(coverage['files'])}"


def test_coverage_expansion_validated():
    """Verify coverage expansion strategy (new files added)."""
    with open('coverage_phase_206_baseline.json', 'r') as f:
        baseline = json.load(f)

    with open('coverage.json', 'r') as f:
        final = json.load(f)

    # Verify more files in final coverage
    baseline_files = set(baseline.get('existing_files', []))
    final_files = set(final['files'].keys())

    new_files = final_files - baseline_files

    assert len(new_files) >= 8, f"Expected at least 8 new files, got {len(new_files)}"

    # Verify expected files are present
    expected_files = [
        "core/agent_governance_service.py",
        "core/agent_governance_cache.py",
        "core/agent_context_resolver.py",
        "core/llm/byok_handler.py",
        "core/workflow_engine.py",
        "core/episode_segmentation_service.py",
        "core/episode_retrieval_service.py",
        "core/agent_graduation_service.py",
        "core/workflow_template_system.py",
        "core/llm/cognitive_tier_system.py"
    ]

    for expected in expected_files:
        assert any(expected in f for f in final_files), f"Expected file {expected} not in coverage"


def test_coverage_improvement_calculated():
    """Verify coverage improvement from baseline."""
    with open('coverage_phase_206_baseline.json', 'r') as f:
        baseline = json.load(f)

    with open('coverage.json', 'r') as f:
        final = json.load(f)

    baseline_pct = baseline['current_coverage']['overall_percent']
    final_pct = final['totals']['percent_covered']
    improvement = final_pct - baseline_pct

    assert improvement >= 5.0, f"Coverage improvement too small: {improvement:.2f}pp"
    assert improvement <= 6.0, f"Coverage improvement too large (unexpected): {improvement:.2f}pp"

    # Verify target gap closed
    target_gap = baseline['target']['gap_percentage_points']
    assert final_pct >= 80.0, "80% target not achieved"


def test_file_level_coverage_quality():
    """Verify file-level coverage quality (75%+ per file)."""
    with open('coverage.json', 'r') as f:
        coverage = json.load(f)

    low_coverage_files = []
    for filename, file_data in coverage['files'].items():
        pct = file_data['summary']['percent_covered']
        if pct < 75.0:
            low_coverage_files.append((filename, pct))

    # At most 1 file can be below 75% (external dependencies)
    assert len(low_coverage_files) <= 1, f"Too many files below 75%: {low_coverage_files}"


def test_collection_stability_maintained():
    """Verify zero collection errors throughout Phase 206."""
    import subprocess

    result = subprocess.run(
        ['python3', '-m', 'pytest', '--collect-only', '-q'],
        capture_output=True,
        text=True,
        cwd='/Users/rushiparikh/projects/atom/backend'
    )

    # Check for collection errors
    assert 'ERROR collecting' not in result.stderr, f"Collection errors detected: {result.stderr}"
    assert result.returncode == 0, f"Collection failed: {result.stderr}"


def test_wave_contributions_documented():
    """Verify all wave contributions are documented."""
    with open('phase_206_final_coverage.json', 'r') as f:
        final = json.load(f)

    # Verify wave breakdown
    assert 'waves' in final
    assert len(final['waves']) == 6

    # Verify each wave has required fields
    for wave in final['waves']:
        assert 'wave_number' in wave
        assert 'files_added' in wave
        assert 'tests_created' in wave
        assert 'coverage_gain' in wave


def test_test_count_validated():
    """Verify expected test count created."""
    # Count test files created in Phase 206
    test_files = [
        "tests/core/governance/test_agent_governance_service_coverage.py",
        "tests/core/governance/test_agent_governance_cache_coverage.py",
        "tests/core/governance/test_agent_context_resolver_coverage.py",
        "tests/core/llm/test_byok_handler_coverage.py",
        "tests/core/workflow/test_workflow_engine_coverage.py",
        "tests/core/memory/test_episode_segmentation_service_coverage.py",
        "tests/core/memory/test_episode_retrieval_service_coverage.py",
        "tests/core/memory/test_agent_graduation_service_coverage.py",
        "tests/core/workflow/test_workflow_template_system_coverage.py",
        "tests/core/llm/test_cognitive_tier_system_coverage.py"
    ]

    created_count = 0
    for test_file in test_files:
        if Path(test_file).exists():
            created_count += 1

    assert created_count >= 10, f"Expected at least 10 test files, got {created_count}"


@pytest.mark.skip("Run manually for detailed report")
def test_generate_detailed_coverage_report():
    """Generate detailed coverage report by file."""
    with open('coverage.json', 'r') as f:
        coverage = json.load(f)

    report = []
    report.append("=== Phase 206 Detailed Coverage Report ===\n")

    for filename, file_data in sorted(coverage['files'].items()):
        summary = file_data['summary']
        report.append(f"{filename}:")
        report.append(f"  Coverage: {summary['percent_covered']:.1f}%")
        report.append(f"  Lines: {summary['covered_lines']}/{summary['num_statements']}")
        report.append(f"  Missing: {summary['missing_lines']}")
        report.append("")

    report.append(f"=== Overall ===")
    report.append(f"Coverage: {coverage['totals']['percent_covered']:.2f}%")
    report.append(f"Files: {len(coverage['files'])}")

    print("\n".join(report))