Files
AareDAQ/tests/unit/daq/test_gui_timeout.py
T

105 lines
3.5 KiB
Python

from types import SimpleNamespace
from unittest.mock import patch
def test_status_renews_gui_session_with_gui_timeout(
client, mock_backend, daq_status_factory
):
mock_cfg = mock_backend["cfg"]
mock_daq = mock_backend["daq"]
from aarecommon.models.models import SessionsStateEnum
mock_daq.status = daq_status_factory(
current_pgroup="p12345",
staff=True,
)
mock_daq.status.sample = None
mock_daq.status.box = None
mock_daq.status.last_best_res = None
mock_daq.status.last_best_b_factor = None
mock_daq.status.crystal_size = SimpleNamespace(x=0, y=0, z=0)
mock_daq.status.open_guis = []
mock_cfg.pgroup = "p12345"
mock_cfg.session_state.return_value = SessionsStateEnum.OwnedByYou
mock_cfg.get_open_gui_sessions.return_value = []
mock_cfg.GUI_SESSION_EXPIRE_SECONDS = 10
response = client.get("/status", headers={"Authorization": "Bearer fake-token"})
assert response.status_code == 200
mock_cfg.touch_gui_session.assert_called_once_with(
session=123,
username="testuser",
staff=True,
expiry_sec=10,
)
def test_status_hides_open_guis_for_non_staff(client, mock_backend, daq_status_factory):
with patch("aare.daq.auth.parse_token") as mock_parse:
from aarecommon.models.models import OpenGuiSessionInfo, SessionsStateEnum
from aare.daq.auth import TokenData
mock_parse.return_value = TokenData(
sub="user1",
staff=False,
pgroups=["p12345"],
session=123,
)
mock_backend["daq"].status = daq_status_factory(
current_pgroup="p12345",
staff=False,
)
mock_backend["daq"].status.sample = None
mock_backend["daq"].status.box = None
mock_backend["daq"].status.last_best_res = None
mock_backend["daq"].status.last_best_b_factor = None
mock_backend["daq"].status.crystal_size = SimpleNamespace(x=0, y=0, z=0)
mock_backend["cfg"].pgroup = "p12345"
mock_backend["cfg"].session_state.return_value = SessionsStateEnum.OwnedByElse
mock_backend["cfg"].get_open_gui_sessions.return_value = [
OpenGuiSessionInfo(
session=1, username="staff1", last_seen_ts=1.0, staff=True
)
]
mock_backend["cfg"].get_gui_session.return_value = OpenGuiSessionInfo(
session=123,
username="user1",
last_seen_ts=2.0,
staff=False,
)
response = client.get("/status", headers={"Authorization": "Bearer fake-token"})
assert response.status_code == 200
payload = response.json()["open_guis"]
assert len(payload) == 1
assert payload[0]["session"] == 123
assert payload[0]["username"] == "user1"
def test_admin_gui_sessions_includes_baton_holder_flag(client, mock_backend):
from types import SimpleNamespace
from aarecommon.models.models import OpenGuiSessionInfo
mock_cfg = mock_backend["cfg"]
mock_cfg.get_open_gui_sessions.return_value = [
OpenGuiSessionInfo(session=11, username="user1", last_seen_ts=1.0, staff=False),
OpenGuiSessionInfo(session=22, username="holder", last_seen_ts=2.0, staff=True),
]
mock_cfg.baton_holder = SimpleNamespace(session=22)
response = client.get(
"/admin/gui_sessions", headers={"Authorization": "Bearer fake-token"}
)
assert response.status_code == 200
payload = response.json()
assert payload[0]["session"] == 11
assert payload[1]["session"] == 22