Files
AareDAQ/tests/conftest.py
T

90 lines
2.1 KiB
Python

import os
import sys
from unittest.mock import MagicMock, patch
import numpy as np
import pytest
from PySide6.QtWidgets import QApplication
from fastapi.testclient import TestClient
from aare.common.models import SampleShortInfo, DewarAddress
# Ensure safe defaults during tests
os.environ.setdefault("BEAMLINE", "SIMULATED")
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
os.environ.setdefault("JWT_AAREDAQ_KEY", "test_key_for_unit_testing")
@pytest.fixture
def mock_logger():
return MagicMock()
# -------------------------
# Qt app fixture
# -------------------------
@pytest.fixture(scope="session")
def qapp():
app = QApplication.instance()
if app is None:
app = QApplication(sys.argv)
return app
@pytest.fixture
def sample_info():
return SampleShortInfo(
db_id=1,
puck_name="puck1",
dewar_name="dew1",
sample_name="sample1",
run_number=1,
user="group1",
pin=3,
location=DewarAddress(segment="A", pos=2),
)
# -------------------------
# Shared DAQ server fixtures
# -------------------------
@pytest.fixture
def mock_backend():
import aare.daq.server as server
with patch("aare.daq.server.daq") as m_daq, \
patch("aare.daq.server.bl") as m_bl, \
patch("aare.daq.server.cfg") as m_cfg:
server.daq = m_daq
server.bl = m_bl
server.cfg = m_cfg
m_daq.busy = False
m_cfg.pgroup = "p12345"
m_cfg.session_state.return_value = "ACTIVE"
yield {
"daq": m_daq,
"bl": m_bl,
"cfg": m_cfg,
}
@pytest.fixture
def client(mock_backend):
import aare.daq.server as server
with patch("aare.daq.auth.parse_token") as mock_parse:
from aare.daq.auth import TokenData
mock_parse.return_value = TokenData(
sub="testuser",
staff=True,
pgroups=["p12345"],
session=123,
)
with patch("cv2.imencode") as mock_imencode:
mock_imencode.return_value = (True, np.array([1, 2, 3], dtype=np.uint8))
with TestClient(server.app) as c:
yield c