diff --git a/bec_widgets/widgets/monitor/monitor.py b/bec_widgets/widgets/monitor/monitor.py index ffa007b1..9364bba1 100644 --- a/bec_widgets/widgets/monitor/monitor.py +++ b/bec_widgets/widgets/monitor/monitor.py @@ -187,14 +187,6 @@ CONFIG_SIMPLE = { "y": [{"name": "bpm4i", "entry": "bpm4i"}], }, }, - # { - # "type": "history", - # "scanID": "", - # "signals": { - # "x": [{"name": "samx"}], - # "y": [{"name": "bpm4i", "entry": "bpm4i"}], - # }, - # }, ], }, { diff --git a/tests/test_bec_monitor.py b/tests/test_bec_monitor.py index 54577690..23b9b236 100644 --- a/tests/test_bec_monitor.py +++ b/tests/test_bec_monitor.py @@ -165,6 +165,13 @@ def mock_getitem(dev_name): return mock_instance +def mock_get_scan_storage(scan_id, data): + """Helper function to mock the __getitem__ method of the 'dev'.""" + mock_instance = MagicMock() + mock_instance.get_scan_storage.return_value = data + return mock_instance + + # mocked messages and metadata msg_1 = { "data": { @@ -183,17 +190,32 @@ metadata_line = {"scan_name": "line_scan"} @pytest.mark.parametrize( "config_name, msg, metadata, expected_data", [ - # case: msg does not have 'scanid' - ("config_device", {"data": {}}, {}, {}), + # case: msg does not have 'scanID' + ( + "config_device", + {"data": {}}, + {}, + { + "scan_segment": { + "bpm4i": {"bpm4i": []}, + "gauss_adc1": {"gauss_adc1": []}, + "gauss_adc2": {"gauss_adc2": []}, + "samx": {"samx": []}, + } + }, + ), # case: scan_types is false, msg contains all valid fields, and entry is present in config ( "config_device", msg_1, {}, { - ("samx", "samx", "bpm4i", "bpm4i"): {"x": [10], "y": [5]}, - ("samx", "samx", "gauss_adc1", "gauss_adc1"): {"x": [10], "y": [8]}, - ("samx", "samx", "gauss_adc2", "gauss_adc2"): {"x": [10], "y": [9]}, + "scan_segment": { + "bpm4i": {"bpm4i": [5]}, + "gauss_adc1": {"gauss_adc1": [8]}, + "gauss_adc2": {"gauss_adc2": [9]}, + "samx": {"samx": [10]}, + } }, ), # case: scan_types is false, msg contains all valid fields and entry is missing in config, should use hints @@ -202,8 +224,11 @@ metadata_line = {"scan_name": "line_scan"} msg_1, {}, { - ("samx", "samx", "bpm4i", "bpm4i"): {"x": [10], "y": [5]}, - ("samx", "samx", "gauss_bpm", "gauss_bpm"): {"x": [10], "y": [6]}, + "scan_segment": { + "bpm4i": {"bpm4i": [5]}, + "gauss_bpm": {"gauss_bpm": [6]}, + "samx": {"samx": [10]}, + } }, ), # case: scan_types is true, msg contains all valid fields, metadata contains scan "line_scan:" @@ -212,10 +237,13 @@ metadata_line = {"scan_name": "line_scan"} msg_1, metadata_line, { - ("samx", "samx", "bpm4i", "bpm4i"): {"x": [10], "y": [5]}, - ("samx", "samx", "gauss_bpm", "gauss_bpm"): {"x": [10], "y": [6]}, - ("samx", "samx", "gauss_adc1", "gauss_adc1"): {"x": [10], "y": [8]}, - ("samx", "samx", "gauss_adc2", "gauss_adc2"): {"x": [10], "y": [9]}, + "scan_segment": { + "bpm4i": {"bpm4i": [5]}, + "gauss_adc1": {"gauss_adc1": [8]}, + "gauss_adc2": {"gauss_adc2": [9]}, + "gauss_bpm": {"gauss_bpm": [6]}, + "samx": {"samx": [10]}, + } }, ), ( @@ -223,10 +251,13 @@ metadata_line = {"scan_name": "line_scan"} msg_1, metadata_grid, { - ("samx", "samx", "bpm4i", "bpm4i"): {"x": [10], "y": [5]}, - ("samx", "samx", "gauss_adc1", "gauss_adc1"): {"x": [10], "y": [8]}, - ("samx", "samx", "gauss_adc2", "gauss_adc2"): {"x": [10], "y": [9]}, - ("samx", "samx", "gauss_bpm", "gauss_bpm"): {"x": [10], "y": [6]}, + "scan_segment": { + "bpm4i": {"bpm4i": [5]}, + "gauss_adc1": {"gauss_adc1": [8]}, + "gauss_adc2": {"gauss_adc2": [9]}, + "gauss_bpm": {"gauss_bpm": [6]}, + "samx": {"samx": [10]}, + } }, ), ], @@ -234,8 +265,20 @@ metadata_line = {"scan_name": "line_scan"} def test_on_scan_segment(monitor, config_name, msg, metadata, expected_data): config = load_test_config(config_name) monitor.on_config_update(config) + # Get hints monitor.dev.__getitem__.side_effect = mock_getitem + # Mock scan_storage.find_scan_by_ID + mock_scan_data = MagicMock() + mock_scan_data.data = { + device_name: { + entry: MagicMock(val=[msg["data"][device_name][entry]["value"]]) + for entry in msg["data"][device_name] + } + for device_name in msg["data"] + } + monitor.queue.scan_storage.find_scan_by_ID.return_value = mock_scan_data + monitor.on_scan_segment(msg, metadata) - assert monitor.data == expected_data + assert monitor.database == expected_data diff --git a/tests/test_configs/config_device.yaml b/tests/test_configs/config_device.yaml index 1298bdbc..577ab6fc 100644 --- a/tests/test_configs/config_device.yaml +++ b/tests/test_configs/config_device.yaml @@ -5,26 +5,29 @@ plot_settings: scan_types: false plot_data: - plot_name: "BPM4i plots vs samx" - x: - label: "Motor Y" - signals: - - name: "samx" - entry: "samx" - y: - label: "bpm4i" - signals: - - name: "bpm4i" - entry: "bpm4i" + x_label: "Motor X" + y_label: "bpm4i" + sources: + - type: "scan_segment" + signals: + x: + - name : "samx" + entry: "samx" + y: + - name : "bpm4i" + entry: "bpm4i" + - plot_name: "Gauss plots vs samx" - x: - label: "Motor X" - signals: - - name: "samx" - entry: "samx" - y: - label: "Gauss" - signals: - - name: "gauss_adc1" - entry: "gauss_adc1" - - name: "gauss_adc2" - entry: "gauss_adc2" + x_label: "Motor X" + y_label: "Gauss" + sources: + - type: "scan_segment" + signals: + x: + - name: "samx" + entry: "samx" + y: + - name: "gauss_adc1" + entry: "gauss_adc1" + - name: "gauss_adc2" + entry: "gauss_adc2" \ No newline at end of file diff --git a/tests/test_configs/config_device_no_entry.yaml b/tests/test_configs/config_device_no_entry.yaml index a73a9ae4..3716e6a6 100644 --- a/tests/test_configs/config_device_no_entry.yaml +++ b/tests/test_configs/config_device_no_entry.yaml @@ -1,24 +1,27 @@ plot_settings: - background_color: "white" - num_columns: 5 + background_color: "black" + num_columns: 1 colormap: "plasma" scan_types: false plot_data: - plot_name: "BPM4i plots vs samx" - x: - label: "Motor Y" - signals: - - name: "samx" - y: - label: "bpm4i" - signals: - - name: "bpm4i" + x_label: "Motor X" + y_label: "bpm4i" + sources: + - type: "scan_segment" + signals: + x: + - name : "samx" + y: + - name : "bpm4i" + - plot_name: "Gauss plots vs samx" - x: - label: "Motor X" - signals: - - name: "samx" - y: - label: "Gauss" - signals: - - name: "gauss_bpm" + x_label: "Motor X" + y_label: "Gauss" + sources: + - type: "scan_segment" + signals: + x: + - name: "samx" + y: + - name: "gauss_bpm" \ No newline at end of file diff --git a/tests/test_configs/config_scan.yaml b/tests/test_configs/config_scan.yaml index cf0d1950..f73f1ed3 100644 --- a/tests/test_configs/config_scan.yaml +++ b/tests/test_configs/config_scan.yaml @@ -6,72 +6,77 @@ plot_settings: plot_data: grid_scan: - plot_name: "Grid plot 1" - x: - label: "Motor X" - signals: - - name: "samx" - entry: "samx" - y: - label: "BPM" - signals: - - name: "gauss_bpm" - entry: "gauss_bpm" + x_label: "Motor X" + y_label: "BPM" + sources: + - type: "scan_segment" + signals: + x: + - name: "samx" + entry: "samx" + y: + - name: "gauss_bpm" + entry: "gauss_bpm" - plot_name: "Grid plot 2" - x: - label: "Motor X" - signals: - - name: "samx" - entry: "samx" - y: - label: "BPM" - signals: - - name: "gauss_adc1" - entry: "gauss_adc1" + x_label: "Motor X" + y_label: "BPM" + sources: + - type: "scan_segment" + signals: + x: + - name: "samx" + entry: "samx" + y: + - name: "gauss_adc1" + entry: "gauss_adc1" - plot_name: "Grid plot 3" - x: - label: "Motor Y" - signals: - - name: "samx" - entry: "samx" - y: - label: "BPM" - signals: - - name: "gauss_adc2" - entry: "gauss_adc2" + x_label: "Motor X" + y_label: "BPM" + sources: + - type: "scan_segment" + signals: + x: + - name: "samx" + entry: "samx" + y: + - name: "gauss_adc2" + entry: "gauss_adc2" - plot_name: "Grid plot 4" - x: - label: "Motor Y" - signals: - - name: "samx" - entry: "samx" - y: - label: "BPM" - signals: - - name: "bpm4i" - entry: "bpm4i" + x_label: "Motor X" + y_label: "BPM" + sources: + - type: "scan_segment" + signals: + x: + - name: "samx" + entry: "samx" + y: + - name: "bpm4i" + entry: "bpm4i" line_scan: - - plot_name: "Multiple Gauss Plot" - x: - label: "Motor X" - signals: - - name: "samx" - y: - label: "BPM" - signals: - - name: "gauss_bpm" - entry: "gauss_bpm" - - name: "gauss_adc1" - entry: "gauss_adc1" - - name: "gauss_adc2" - entry: "gauss_adc2" - - plot_name: "BPM Plot" - x: - label: "Motor X" - signals: - - name: "samx" - entry: "samx" - y: - label: "Multi" - signals: - - name: "bpm4i" - entry: "bpm4i" + - plot_name: "Multiple Gauss Plot" + x_label: "Motor X" + y_label: "BPM" + sources: + - type: "scan_segment" + signals: + x: + - name: "samx" + y: + - name: "gauss_bpm" + entry: "gauss_bpm" + - name: "gauss_adc1" + entry: "gauss_adc1" + - name: "gauss_adc2" + entry: "gauss_adc2" + - plot_name: "BPM Plot" + x_label: "Motor X" + y_label: "BPM" + sources: + - type: "scan_segment" + signals: + x: + - name: "samx" + y: + - name: "bpm4i" + entry: "bpm4i" \ No newline at end of file