File size: 1,165 Bytes
0ffbb74
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""Shared test fixtures."""

import pytest

from beampilot.session import MeasurementSession


def pytest_configure(config: pytest.Config) -> None:
    config.addinivalue_line(
        "markers", "allow_internal_error: the test provokes an internal_error"
    )


@pytest.fixture(autouse=True)
def no_internal_errors(request, monkeypatch):
    """Fail any test in which a tool call returned ``internal_error``.



    Tools catch every exception so a demo never crashes; this keeps such

    exceptions from hiding bugs in the test suite.

    """
    sessions: list[MeasurementSession] = []
    original_init = MeasurementSession.__init__

    def tracking_init(self, *args, **kwargs):
        original_init(self, *args, **kwargs)
        sessions.append(self)

    monkeypatch.setattr(MeasurementSession, "__init__", tracking_init)
    yield
    if request.node.get_closest_marker("allow_internal_error"):
        return
    errors = [
        entry
        for session in sessions
        for entry in session.log
        if "internal_error" in entry["result"]
    ]
    assert not errors, errors[0].get("traceback", errors[0])