from unittest.mock import MagicMock from aarecommon.models.models import DAQStatusModel, DewarAddress, SampleShortInfo from aare.gui.scan_logic.sample_mount_logic import SampleMountLogic 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)