File size: 1,791 Bytes
c29f1fd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from __future__ import annotations

from fastapi.testclient import TestClient

from triage import CodeTriageEngine, HashingEmbeddingBackend
from triage_catalog import build_examples


def test_hashing_backend_returns_normalized_embeddings() -> None:
    backend = HashingEmbeddingBackend(dimensions=32)
    embeddings = backend.embed_texts(["def foo():\n    return 1", "for x in items:\n    pass"])

    assert embeddings.shape == (2, 32)
    for row in embeddings:
        assert round(float(row.norm().item()), 5) == 1.0


def test_examples_map_to_expected_labels_with_fallback_backend() -> None:
    examples = build_examples()
    engine = CodeTriageEngine(backend=HashingEmbeddingBackend())

    for example in examples:
        result = engine.triage(example.code, example.traceback_text, example.context_window)
        assert result.issue_label == example.label
        assert 0.0 <= result.reward_score <= 1.0


def test_syntax_example_exposes_parser_signal() -> None:
    example = next(item for item in build_examples() if item.label == "syntax")
    engine = CodeTriageEngine(backend=HashingEmbeddingBackend())

    result = engine.triage(example.code, example.traceback_text, example.context_window)

    assert any(signal.name == "syntax_parse" and signal.value == "fails" for signal in result.extracted_signals)
    assert result.matched_pattern.task_id == example.task_id
    assert result.repair_plan[0].startswith("Step 1 - Syntax checking and bug fixes")


def test_composed_app_preserves_health_route() -> None:
    from server.app import build_application

    client = TestClient(build_application())
    response = client.get("/health")

    assert response.status_code == 200
    assert response.json()["status"] == "ok"