diff --git a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_presenter.py b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_presenter.py index 2630d185ee3f94d7b60fa499d4a50fe30bf12121..2605bf43093e04276167596d8daae9f8778ed6b5 100644 --- a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_presenter.py +++ b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/data_presenter.py @@ -67,11 +67,10 @@ class FittingDataPresenter(object): self._emit_enable_button_signal() def _on_worker_success(self, _): - self.view.remove_all() + self._remove_all_table_rows() self.row_numbers = {} for i, name in enumerate(self.get_loaded_workspaces()): - self.row_numbers[name] = i - self._add_row_to_table(name) + self._add_row_to_table(name, i) def _enable_load_button(self, enabled): self.view.set_load_button_enabled(enabled) @@ -97,12 +96,12 @@ class FittingDataPresenter(object): return False return True - def _add_row_to_table(self, ws_name): + def _add_row_to_table(self, ws_name, row): words = ws_name.split("_") if len(words) == 4 and words[2] == "bank": self.view.add_table_row(words[1], words[3]) + self.row_numbers[ws_name] = row else: - self.remove_workspace(ws_name) logger.warning( "The workspace '{}' was not in the correct naming format. Files should be named in the following way: " "INSTRUMENT_RUNNUMBER_bank_BANK.".format(ws_name) diff --git a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/test/test_data_presenter.py b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/test/test_data_presenter.py index a069af02d2bfa14dabcbcb867c33fff48e4a0b55..b772d1bdd46bb552240c4d76e5ea1008684e8b93 100644 --- a/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/test/test_data_presenter.py +++ b/scripts/Engineering/gui/engineering_diffraction/tabs/fitting/data_handling/test/test_data_presenter.py @@ -32,7 +32,8 @@ class FittingDataPresenterTest(unittest.TestCase): mock_worker.assert_called_with("mocked model method", ("/a/file/to/load.txt, /another/one.nxs",), error_cb=self.presenter._on_worker_error, - finished_cb=self.presenter._emit_enable_button_signal) + finished_cb=self.presenter._emit_enable_button_signal, + success_cb=self.presenter._on_worker_success) @patch(dir_path + ".data_presenter.create_error_message") @patch(dir_path + ".data_presenter.AsyncTask") @@ -68,61 +69,96 @@ class FittingDataPresenterTest(unittest.TestCase): self.assertEqual(1, self.view.sig_enable_load_button.emit.call_count) self.view.sig_enable_load_button.emit.called_with(True) + def test_worker_success_valid_filename(self): + model_dict = {"ENGINX_1_bank_1": "ws1", "ENGINX_2_bank_South": "ws2"} + self.model.get_loaded_workspaces.return_value = model_dict + + self.presenter._on_worker_success("info") + + self.assertEqual(1, self.view.remove_all.call_count) + self.view.add_table_row.assert_any_call("1", "1") + self.view.add_table_row.assert_any_call("2", "South") + + @patch(dir_path + ".data_presenter.logger") + def test_worker_success_invalid_filename(self, mock_logger): + model_dict = {"invalid": "ws1", "invalid2": "ws2"} + self.model.get_loaded_workspaces.return_value = model_dict + + self.presenter._on_worker_success("info") + + self.assertEqual(1, self.view.remove_all.call_count) + self.assertEqual(0, self.view.add_table_row.call_count) + self.assertEqual(2, mock_logger.warning.call_count) + def test_remove_workspace_tracked(self): model_dict = {"name1": "ws1", "name2": "ws2"} self.model.get_loaded_workspaces.return_value = model_dict + self.presenter.row_numbers = {"name1": 0, "name2": 1} self.presenter.remove_workspace("name1") self.assertEqual({"name2": "ws2"}, model_dict) + self.assertEqual({"name2": 1}, self.presenter.row_numbers) def test_remove_workspace_not_tracked(self): model_dict = {"name1": "ws1", "name2": "ws2"} self.model.get_loaded_workspaces.return_value = model_dict + self.presenter.row_numbers = {"name1": 0, "name2": 1} self.presenter.remove_workspace("name3") self.assertEqual({"name1": "ws1", "name2": "ws2"}, model_dict) + self.assertEqual({"name1": 0, "name2": 1}, self.presenter.row_numbers) def test_rename_workspace_tracked(self): model_dict = {"name1": "ws1", "name2": "ws2"} self.model.get_loaded_workspaces.return_value = model_dict + self.presenter.row_numbers = {"name1": 0, "name2": 1} self.presenter.rename_workspace("name1", "new") self.assertEqual({"new": "ws1", "name2": "ws2"}, model_dict) + self.assertEqual({"new": 0, "name2": 1}, self.presenter.row_numbers) def test_rename_workspace_not_tracked(self): model_dict = {"name1": "ws1", "name2": "ws2"} self.model.get_loaded_workspaces.return_value = model_dict + self.presenter.row_numbers = {"name1": 0, "name2": 1} self.presenter.rename_workspace("name3", "new") self.assertEqual({"name1": "ws1", "name2": "ws2"}, model_dict) + self.assertEqual({"name1": 0, "name2": 1}, self.presenter.row_numbers) def test_clear_workspaces(self): model_dict = {"name1": "ws1", "name2": "ws2"} self.model.get_loaded_workspaces.return_value = model_dict + self.presenter.row_numbers = {"name1": 0, "name2": 1} self.presenter.clear_workspaces() self.assertEqual({}, model_dict) + self.assertEqual({}, self.presenter.row_numbers) def test_replace_workspace_tracked(self): model_dict = {"name1": "ws1", "name2": "ws2"} self.model.get_loaded_workspaces.return_value = model_dict + self.presenter.row_numbers = {"name1": 0, "name2": 1} self.presenter.replace_workspace("name1", "new") self.assertEqual({"name1": "new", "name2": "ws2"}, model_dict) + self.assertEqual({"name1": 0, "name2": 1}, self.presenter.row_numbers) def test_replace_workspace_not_tracked(self): model_dict = {"name1": "ws1", "name2": "ws2"} self.model.get_loaded_workspaces.return_value = model_dict + self.presenter.row_numbers = {"name1": 0, "name2": 1} self.presenter.replace_workspace("name3", "new") self.assertEqual({"name1": "ws1", "name2": "ws2"}, model_dict) + self.assertEqual({"name1": 0, "name2": 1}, self.presenter.row_numbers) if __name__ == '__main__':