From df636c92067b818ede51ce6875a8ca280f82150d Mon Sep 17 00:00:00 2001
From: Dimitar Tasev <dimtasev@gmail.com>
Date: Mon, 29 Oct 2018 13:25:56 +0000
Subject: [PATCH] Tests for model, presenter and TableViewModel, re #21593

---
 .../test/test_matrixworkspacedisplay_model.py |  86 +++-------
 .../test_matrixworkspacedisplay_presenter.py  | 153 +++++++++---------
 ...t_matrixworkspacedisplay_tableviewmodel.py |   2 +-
 3 files changed, 95 insertions(+), 146 deletions(-)

diff --git a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_model.py b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_model.py
index 49d9af3489e..c6b5cea5bff 100644
--- a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_model.py
+++ b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_model.py
@@ -9,81 +9,37 @@
 #
 from __future__ import (absolute_import, division, print_function)
 
-from mantid.simpleapi import LoadEventNexus, CreateMDWorkspace
-from mantidqt.widgets.samplelogs.model import SampleLogsModel
-
 import unittest
 
+from mock import Mock
 
-class MatrixWorkspaceDisplayModelTest(unittest.TestCase):
-
-    def test_model(self):
-        ws = LoadEventNexus('CNCS_7860', MetaDataOnly=True)
-        model = SampleLogsModel(ws)
-
-        self.assertEqual(model.get_exp(), 0)
-        self.assertEqual(model.get_name(), 'ws')
-        self.assertEqual(model.getNumExperimentInfo(), 0)
-
-        log = model.get_log("Speed5")
-        self.assertEqual(log.name, "Speed5")
-        self.assertEqual(log.size(), 4)
+from mantidqt.widgets.matrixworkspacedisplay.model import MatrixWorkspaceDisplayModel
+from mantidqt.widgets.matrixworkspacedisplay.table_view_model import MatrixWorkspaceTableViewModelType
+from mantidqt.widgets.matrixworkspacedisplay.test_helpers.matrixworkspacedisplay_common import \
+    MockWorkspace
 
-        log_names = model.get_log_names()
-        self.assertEqual(len(log_names), 48)
-        self.assertIn("Speed5", log_names)
 
-        values = model.get_log_display_values("Speed5")
-        self.assertEqual(values[0], "Speed5")
-        self.assertEqual(values[1], "float series")
-        self.assertEqual(values[2], "(4 entries)")
-        self.assertEqual(values[3], "Hz")
-
-        self.assertTrue(model.is_log_plottable("Speed5"))
-        self.assertFalse(model.is_log_plottable("duration"))
-
-        stats = model.get_statistics("Speed5")
-        self.assertEqual(stats.maximum, 300.0)
-
-        self.assertFalse(model.isMD())
+class MatrixWorkspaceDisplayModelTest(unittest.TestCase):
 
-        itemModel = model.getItemModel()
-        self.assertEqual(itemModel.horizontalHeaderItem(0).text(), "Name")
-        self.assertEqual(itemModel.horizontalHeaderItem(1).text(), "Type")
-        self.assertEqual(itemModel.horizontalHeaderItem(2).text(), "Value")
-        self.assertEqual(itemModel.horizontalHeaderItem(3).text(), "Units")
-        self.assertEqual(itemModel.rowCount(), 48)
-        self.assertEqual(itemModel.item(0,0).text(), "ChopperStatus1")
-        self.assertEqual(itemModel.item(0,1).text(), "float series")
-        self.assertEqual(itemModel.item(0,2).text(), "4.0")
-        self.assertEqual(itemModel.item(0,3).text(), "")
+    def test_get_name(self):
+        ws = MockWorkspace()
+        expected_name = "TEST_WORKSPACE"
+        ws.name = Mock(return_value=expected_name)
+        model = MatrixWorkspaceDisplayModel(ws)
 
-    def test_model_MD(self):
-        ws1 = LoadEventNexus("CNCS_7860", MetaDataOnly=True)
-        ws2 = LoadEventNexus("VIS_19351", MetaDataOnly=True)
-        md = CreateMDWorkspace(Dimensions=1, Extents='-1,1', Names='A', Units='U')
-        md.addExperimentInfo(ws1)
-        md.addExperimentInfo(ws2)
-        model = SampleLogsModel(md)
+        self.assertEqual(expected_name, model.get_name())
 
-        self.assertEqual(model.get_exp(), 0)
-        self.assertEqual(model.get_name(), 'md')
-        self.assertEqual(model.getNumExperimentInfo(), 2)
+    def test_get_item_model(self):
+        ws = MockWorkspace()
+        expected_name = "TEST_WORKSPACE"
+        ws.name = Mock(return_value=expected_name)
+        model = MatrixWorkspaceDisplayModel(ws)
 
-        values = model.get_log_display_values("duration")
-        self.assertEqual(values[0], "duration")
-        self.assertEqual(values[1], "number")
-        self.assertEqual(values[2], 148.0)
-        self.assertEqual(values[3], "second")
+        x_model, y_model, e_model = model.get_item_model()
 
-        # Change exp
-        model.set_exp(1)
-        self.assertEqual(model.get_exp(), 1)
-        values = model.get_log_display_values("duration")
-        self.assertEqual(values[0], "duration")
-        self.assertEqual(values[1], "number")
-        self.assertEqual(values[2], 4.616606712341309)
-        self.assertEqual(values[3], "second")
+        self.assertEqual(x_model.type, MatrixWorkspaceTableViewModelType.x)
+        self.assertEqual(y_model.type, MatrixWorkspaceTableViewModelType.y)
+        self.assertEqual(e_model.type, MatrixWorkspaceTableViewModelType.e)
 
 
 if __name__ == '__main__':
diff --git a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_presenter.py b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_presenter.py
index a2e0dacc263..f515de70aa9 100644
--- a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_presenter.py
+++ b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_presenter.py
@@ -9,88 +9,81 @@
 #
 from __future__ import (absolute_import, division, print_function)
 
-import matplotlib
-matplotlib.use('Agg') # noqa: E402
+import unittest
 
-from mantidqt.widgets.samplelogs.model import SampleLogsModel
-from mantidqt.widgets.samplelogs.presenter import SampleLogs
-from mantidqt.widgets.samplelogs.view import SampleLogsView
+from mock import Mock
 
-import unittest
-try:
-    from unittest import mock
-except ImportError:
-    import mock
-
-
-class SampleLogsTest(unittest.TestCase):
-
-    def setUp(self):
-        self.view = mock.Mock(spec=SampleLogsView)
-        self.view.get_row_log_name =  mock.Mock(return_value="Speed5")
-        self.view.get_selected_row_indexes =  mock.Mock(return_value=[5])
-        self.view.get_exp = mock.Mock(return_value=1)
-
-        self.model = mock.Mock(spec=SampleLogsModel)
-        self.model.get_ws = mock.Mock(return_value='ws')
-        self.model.is_log_plottable = mock.Mock(return_value=True)
-        self.model.get_statistics = mock.Mock(return_value=[1,2,3,4])
-        self.model.get_exp = mock.Mock(return_value=0)
-
-    def test_sampleLogs(self):
-
-        presenter = SampleLogs(None, model=self.model, view=self.view)
-
-        # setup calls
-        self.assertEqual(self.view.set_model.call_count, 1)
-        self.assertEqual(self.model.getItemModel.call_count, 1)
-
-        # plot_logs
-        presenter.plot_logs()
-        self.model.is_log_plottable.assert_called_once_with("Speed5")
-        self.assertEqual(self.model.get_ws.call_count, 1)
-        self.view.plot_selected_logs.assert_called_once_with('ws', 0, [5])
-
-        # update_stats
-        presenter.update_stats()
-        self.assertEqual(self.model.get_statistics.call_count, 1)
-        self.view.get_row_log_name.assert_called_with(5)
-        self.view.set_statistics.assert_called_once_with([1,2,3,4])
-        self.assertEqual(self.view.clear_statistics.call_count, 0)
-
-        self.view.reset_mock()
-        self.view.get_selected_row_indexes =  mock.Mock(return_value=[2,5])
-        presenter.update_stats()
-        self.assertEqual(self.view.set_statistics.call_count, 0)
-        self.assertEqual(self.view.clear_statistics.call_count, 1)
-
-        # changeExpInfo
-        self.model.reset_mock()
-        self.view.reset_mock()
-
-        presenter.changeExpInfo()
-        self.assertEqual(self.view.get_selected_row_indexes.call_count, 3)
-        self.assertEqual(self.view.get_exp.call_count, 1)
-        self.model.set_exp.assert_called_once_with(1)
-        self.view.set_selected_rows.assert_called_once_with([2,5])
-
-        # clicked
-        self.model.reset_mock()
-        self.view.reset_mock()
-
-        presenter.clicked()
-        self.assertEqual(self.view.get_selected_row_indexes.call_count, 2)
-
-        # double clicked
-        self.model.reset_mock()
-        self.view.reset_mock()
-
-        index = mock.Mock()
-        index.row = mock.Mock(return_value=7)
-
-        presenter.doubleClicked(index)
-        self.view.get_row_log_name.assert_called_once_with(7)
-        self.model.get_log.assert_called_once_with("Speed5")
+from mantidqt.widgets.matrixworkspacedisplay.presenter import MatrixWorkspaceDisplay
+from mantidqt.widgets.matrixworkspacedisplay.test_helpers.matrixworkspacedisplay_common import MockWorkspace, \
+    MockQModelIndex, MockQModelIndexSibling
+from mantidqt.widgets.matrixworkspacedisplay.test_helpers.mock_matrixworkspacedisplay_view import \
+    MockMatrixWorkspaceDisplayView, MockQTableView
+
+
+class MatrixWorkspaceDisplayPresenterTest(unittest.TestCase):
+
+    def test_setup_table(self):
+        ws = MockWorkspace()
+        view = MockMatrixWorkspaceDisplayView()
+        presenter = MatrixWorkspaceDisplay(ws, view=view)
+        self.assertEqual(3, view.set_context_menu_actions.call_count)
+        self.assertEqual(1, view.set_model.call_count)
+
+    def test_action_copy_spectrum_values(self):
+        ws = MockWorkspace()
+        view = MockMatrixWorkspaceDisplayView()
+        presenter = MatrixWorkspaceDisplay(ws, view=view)
+
+        mock_table = MockQTableView()
+
+        # two rows are selected in different positions
+        mock_indexes = [MockQModelIndex(0, 1), MockQModelIndex(3, 1)]
+        mock_table.mock_selection_model.selectedRows = Mock(return_value=mock_indexes)
+        mock_read = Mock(return_value=[43, 99])
+        expected_string = "43 99\n43 99"
+
+        presenter.action_copy_spectrum_values(mock_table, mock_read)
+
+        view.copy_to_clipboard.assert_called_once_with(expected_string)
+
+    def test_action_copy_spectrum_values_no_selection(self):
+        self.skipTest("Not implemented")
+
+    def test_action_copy_bin_values(self):
+        ws = MockWorkspace()
+        view = MockMatrixWorkspaceDisplayView()
+        presenter = MatrixWorkspaceDisplay(ws, view=view)
+        mock_table = MockQTableView()
+
+        # two columns are selected at different positions
+        mock_indexes = [MockQModelIndex(0, 0), MockQModelIndex(0, 3)]
+        mock_table.mock_selection_model.selectedColumns = Mock(return_value=mock_indexes)
+        # change the mock ws to have 3 histograms
+        ws.getNumberHistograms = Mock(return_value=3)
+
+        mock_read = Mock(return_value=[83, 11, 33, 70])
+        expected_string = "83 70\n83 70\n83 70"
+
+        presenter.action_copy_bin_values(mock_table, mock_read)
+
+        view.copy_to_clipboard.assert_called_once_with(expected_string)
+
+    def test_action_copy_bin_values_no_selection(self):
+        self.skipTest("Not Implemented")
+
+    def test_action_copy_cell(self):
+        ws = MockWorkspace()
+        view = MockMatrixWorkspaceDisplayView()
+        presenter = MatrixWorkspaceDisplay(ws, view=view)
+        mock_table = MockQTableView()
+
+        # two columns are selected at different positions
+        mock_table.mock_selection_model.currentIndex = Mock(return_value=MockQModelIndex(0, 2))
+        # change the mock ws to have 3 histograms
+        ws.getNumberHistograms = Mock(return_value=3)
+        presenter.action_copy_cell(mock_table)
+
+        view.copy_to_clipboard.assert_called_once_with(MockQModelIndexSibling.TEST_SIBLING_DATA)
 
 
 if __name__ == '__main__':
diff --git a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_tableviewmodel.py b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_tableviewmodel.py
index b6a830513cf..b6ebf54551c 100644
--- a/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_tableviewmodel.py
+++ b/qt/python/mantidqt/widgets/matrixworkspacedisplay/test/test_matrixworkspacedisplay_tableviewmodel.py
@@ -18,7 +18,7 @@ from qtpy.QtCore import Qt
 
 from mantidqt.widgets.matrixworkspacedisplay.table_view_model import MatrixWorkspaceTableViewModel, \
     MatrixWorkspaceTableViewModelType
-from mantidqt.widgets.matrixworkspacedisplay.test_helpers.test_matrixworkspacedisplay_tableviewmodel_common import \
+from mantidqt.widgets.matrixworkspacedisplay.test_helpers.matrixworkspacedisplay_common import \
     MockQModelIndex, MockWorkspace, setup_common_for_test_data, AXIS_INDEX_FOR_VERTICAL, MockMantidAxis, MockSpectrum, \
     MockMantidSymbol, AXIS_INDEX_FOR_HORIZONTAL, MockMantidUnit
 
-- 
GitLab