48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
import pytest
|
|
from unittest.mock import MagicMock
|
|
from aare.gui.scan_logic.sample_mount_logic import SampleMountLogic
|
|
from aare.common.models import DAQStatusModel, SampleShortInfo, DewarAddress
|
|
|
|
def test_sample_mount_logic_emits_on_change():
|
|
logic = SampleMountLogic()
|
|
mock_slot = MagicMock()
|
|
logic.sample_changed.connect(mock_slot)
|
|
|
|
sample1 = SampleShortInfo(db_id=1, puck_name="P1", dewar_name="D1", sample_name="S1", run_number=1, user="U1", pin=1, location=DewarAddress(segment="A", pos=1))
|
|
sample2 = SampleShortInfo(db_id=2, puck_name="P1", dewar_name="D1", sample_name="S2", run_number=1, user="U1", pin=2, location=DewarAddress(segment="A", pos=1))
|
|
|
|
status = MagicMock(spec=DAQStatusModel)
|
|
status.sample = sample1
|
|
|
|
# First update, should emit
|
|
logic.update_daq_status(status)
|
|
mock_slot.assert_called_once_with(sample1)
|
|
mock_slot.reset_mock()
|
|
|
|
# Second update same sample, should NOT emit
|
|
logic.update_daq_status(status)
|
|
mock_slot.assert_not_called()
|
|
|
|
# Third update different sample, should emit
|
|
status.sample = sample2
|
|
logic.update_daq_status(status)
|
|
mock_slot.assert_called_once_with(sample2)
|
|
|
|
def test_sample_mount_logic_none_to_sample():
|
|
logic = SampleMountLogic()
|
|
mock_slot = MagicMock()
|
|
logic.sample_changed.connect(mock_slot)
|
|
|
|
sample1 = SampleShortInfo(db_id=1, puck_name="P1", dewar_name="D1", sample_name="S1", run_number=1, user="U1", pin=1, location=DewarAddress(segment="A", pos=1))
|
|
|
|
status = MagicMock(spec=DAQStatusModel)
|
|
status.sample = None
|
|
|
|
logic.update_daq_status(status)
|
|
# Initial __sample is None, so if status.sample is also None, it won't emit
|
|
mock_slot.assert_not_called()
|
|
|
|
status.sample = sample1
|
|
logic.update_daq_status(status)
|
|
mock_slot.assert_called_once_with(sample1)
|