From 4e85cb8e3005dd294547590c60146a0780670898 Mon Sep 17 00:00:00 2001
From: Matthew Andrew <matthew.andrew@tessella.com>
Date: Mon, 16 Mar 2020 16:01:20 +0000
Subject: [PATCH] Updated IndirectFitDataPresenterTest Re #28057

---
 .../Indirect/IndirectFitDataPresenter.cpp     | 11 +++-
 .../Indirect/IndirectFitDataPresenter.h       |  2 +-
 .../Indirect/IndirectFittingModel.h           |  4 +-
 .../test/IndirectFitDataPresenterTest.h       | 60 ++++++++++++-------
 4 files changed, 48 insertions(+), 29 deletions(-)

diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
index 0c6eb63abff..71c5490c986 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
+++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.cpp
@@ -247,7 +247,11 @@ IndirectFitDataPresenter::getAddWorkspaceDialog(QWidget *parent) const {
 }
 
 void IndirectFitDataPresenter::addData() {
-  addData(m_addWorkspaceDialog.get());
+  if (const auto indirectDialog = dynamic_cast<AddWorkspaceDialog const *>(
+          m_addWorkspaceDialog.get())) {
+    addData(indirectDialog->workspaceName(),
+            indirectDialog->workspaceIndices());
+  }
 }
 
 void IndirectFitDataPresenter::closeDialog() {
@@ -258,9 +262,10 @@ void IndirectFitDataPresenter::closeDialog() {
   m_addWorkspaceDialog->close();
 }
 
-void IndirectFitDataPresenter::addData(IAddWorkspaceDialog const *dialog) {
+void IndirectFitDataPresenter::addData(const std::string &workspaceName,
+                                       const std::string &spectra) {
   try {
-    addDataToModel(dialog);
+    m_model->addWorkspace(workspaceName, spectra);
     m_tablePresenter->addData(m_model->numberOfWorkspaces() -
                               TableDatasetIndex{1});
     emit dataAdded();
diff --git a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
index ae5f9d668e0..2ba759cb966 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFitDataPresenter.h
@@ -59,6 +59,7 @@ public:
                      const Workspace_sptr &workspace) override;
   DataForParameterEstimationCollection
   getDataForParameterEstimation(const EstimationDataSelector &selector) const;
+  void addData(const std::string &workspaceName, const std::string &spectra);
 
 public slots:
   void updateSpectraInTable(TableDatasetIndex dataIndex);
@@ -90,7 +91,6 @@ signals:
 
 protected:
   IIndirectFitDataView const *getView() const;
-  void addData(IAddWorkspaceDialog const *dialog);
   virtual void addDataToModel(IAddWorkspaceDialog const *dialog);
   void setSingleModelData(const std::string &name);
   void updateRanges();
diff --git a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
index b4b39ccbb0a..b57370ef22a 100644
--- a/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
+++ b/qt/scientific_interfaces/Indirect/IndirectFittingModel.h
@@ -98,8 +98,8 @@ public:
                                 WorkspaceIndex spectrum);
 
   virtual void addWorkspace(const std::string &workspaceName);
-  void addWorkspace(const std::string &workspaceName,
-                    const std::string &spectra);
+  virtual void addWorkspace(const std::string &workspaceName,
+                            const std::string &spectra);
   void addWorkspace(const std::string &workspaceName, const Spectra &spectra);
   virtual void addWorkspace(Mantid::API::MatrixWorkspace_sptr workspace,
                             const Spectra &spectra);
diff --git a/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h b/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h
index 1f38bca91d5..e198c65d758 100644
--- a/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h
+++ b/qt/scientific_interfaces/Indirect/test/IndirectFitDataPresenterTest.h
@@ -9,10 +9,10 @@
 #include <cxxtest/TestSuite.h>
 #include <gmock/gmock.h>
 
-#include "IIndirectFitDataViewLegacy.h"
-#include "IndirectDataTablePresenterLegacy.h"
-#include "IndirectFitDataPresenterLegacy.h"
-#include "IndirectFittingModelLegacy.h"
+#include "IIndirectFitDataView.h"
+#include "IndirectDataTablePresenter.h"
+#include "IndirectFitDataPresenter.h"
+#include "IndirectFittingModel.h"
 
 #include "MantidAPI/FrameworkManager.h"
 #include "MantidKernel/WarningSuppressions.h"
@@ -56,7 +56,7 @@ private:
 GNU_DIAG_OFF_SUGGEST_OVERRIDE
 
 /// Mock object to mock the view
-class MockIIndirectFitDataView : public IIndirectFitDataViewLegacy {
+class MockIIndirectFitDataView : public IIndirectFitDataView {
 public:
   /// Signals
   void emitSampleLoaded(QString const &name) { emit sampleLoaded(name); }
@@ -81,6 +81,9 @@ public:
   MOCK_METHOD1(setSampleFBSuffices, void(QStringList const &suffices));
   MOCK_METHOD1(setResolutionWSSuffices, void(QStringList const &suffices));
   MOCK_METHOD1(setResolutionFBSuffices, void(QStringList const &suffices));
+  MOCK_METHOD1(setXRange, void(std::pair<double, double> const &range));
+  MOCK_METHOD1(setStartX, void(double startX));
+  MOCK_METHOD1(setEndX, void(double endX));
 
   MOCK_CONST_METHOD0(isSampleWorkspaceSelectorVisible, bool());
   MOCK_METHOD1(setSampleWorkspaceSelectorIndex,
@@ -94,23 +97,25 @@ public:
 };
 
 /// Mock object to mock the model
-class MockIndirectFitDataModel : public IndirectFittingModelLegacy {
+class MockIndirectFitDataModel : public IndirectFittingModel {
 public:
-  using IndirectFittingModelLegacy::addWorkspace;
+  using IndirectFittingModel::addWorkspace;
 
   /// Public Methods
   MOCK_CONST_METHOD1(hasWorkspace, bool(std::string const &workspaceName));
 
   MOCK_CONST_METHOD0(isMultiFit, bool());
-  MOCK_CONST_METHOD0(numberOfWorkspaces, std::size_t());
+  MOCK_CONST_METHOD0(numberOfWorkspaces, TableDatasetIndex());
 
   MOCK_METHOD1(addWorkspace, void(std::string const &workspaceName));
+  MOCK_METHOD2(addWorkspace, void(std::string const &workspaceName,
+                                  std::string const &spectra));
 
 private:
   std::string sequentialFitOutputName() const override { return ""; };
   std::string simultaneousFitOutputName() const override { return ""; };
-  std::string singleFitOutputName(std::size_t index,
-                                  std::size_t spectrum) const override {
+  std::string singleFitOutputName(TableDatasetIndex index,
+                                  IDA::WorkspaceIndex spectrum) const override {
     UNUSED_ARG(index);
     UNUSED_ARG(spectrum);
     return "";
@@ -141,9 +146,9 @@ public:
     m_model = std::make_unique<NiceMock<MockIndirectFitDataModel>>();
     m_table = createEmptyTableWidget(5, 5);
 
-    m_dataTablePresenter = std::make_unique<IndirectDataTablePresenterLegacy>(
+    m_dataTablePresenter = std::make_unique<IndirectDataTablePresenter>(
         std::move(m_model.get()), std::move(m_table.get()));
-    m_presenter = std::make_unique<IndirectFitDataPresenterLegacy>(
+    m_presenter = std::make_unique<IndirectFitDataPresenter>(
         std::move(m_model.get()), std::move(m_view.get()),
         std::move(m_dataTablePresenter));
 
@@ -186,7 +191,8 @@ public:
   void
   test_that_invoking_a_presenter_method_will_call_the_relevant_methods_in_the_view_and_model() {
     ON_CALL(*m_view, isMultipleDataTabSelected()).WillByDefault(Return(true));
-    ON_CALL(*m_model, numberOfWorkspaces()).WillByDefault(Return(2));
+    ON_CALL(*m_model, numberOfWorkspaces())
+        .WillByDefault(Return(TableDatasetIndex{2}));
 
     Expectation isMultipleData =
         EXPECT_CALL(*m_view, isMultipleDataTabSelected())
@@ -194,7 +200,7 @@ public:
             .WillOnce(Return(true));
     EXPECT_CALL(*m_model, numberOfWorkspaces()).Times(1).After(isMultipleData);
 
-    m_presenter->updateSpectraInTable(0);
+    m_presenter->updateSpectraInTable(TableDatasetIndex{0});
   }
 
   ///----------------------------------------------------------------------
@@ -250,26 +256,34 @@ public:
   void
   test_that_setStartX_will_alter_the_relevant_startX_column_in_the_data_table() {
     TableItem const startX(2.3);
+    EXPECT_CALL(*m_model, numberOfWorkspaces())
+        .WillRepeatedly(Return(TableDatasetIndex{1}));
+    m_presenter->addData("Workspace1", "1");
 
-    m_presenter->setStartX(startX.asDouble(), 0, 0);
-
-    assertValueIsGlobal(START_X_COLUMN, startX);
+    m_presenter->setStartX(startX.asDouble(), TableDatasetIndex{0},
+                           IDA::WorkspaceIndex{0});
+    TS_ASSERT_EQUALS(startX.asString(), getTableItem(0, START_X_COLUMN));
   }
 
   void
   test_that_setEndX_will_alter_the_relevant_endX_column_in_the_data_table() {
     TableItem const endX(5.5);
+    EXPECT_CALL(*m_model, numberOfWorkspaces())
+        .WillRepeatedly(Return(TableDatasetIndex{1}));
+    m_presenter->addData("Workspace1", "1");
 
-    m_presenter->setEndX(endX.asDouble(), 0, 0);
+    m_presenter->setEndX(endX.asDouble(), TableDatasetIndex{0},
+                         IDA::WorkspaceIndex{0});
 
-    assertValueIsGlobal(END_X_COLUMN, endX);
+    TS_ASSERT_EQUALS(endX.asString(), getTableItem(0, END_X_COLUMN));
   }
 
   void
   test_that_the_setExcludeRegion_slot_will_alter_the_relevant_excludeRegion_column_in_the_table() {
     TableItem const excludeRegion("2-3");
 
-    m_presenter->setExclude(excludeRegion.asString(), 0, 0);
+    m_presenter->setExclude(excludeRegion.asString(), TableDatasetIndex{0},
+                            IDA::WorkspaceIndex{0});
 
     assertValueIsGlobal(EXCLUDE_REGION_COLUMN, excludeRegion);
   }
@@ -303,7 +317,7 @@ private:
 
   void assertValueIsGlobal(int column, TableItem const &value) const {
     for (auto row = 0; row < m_table->rowCount(); ++row)
-      TS_ASSERT_EQUALS(value, getTableItem(row, column));
+      TS_ASSERT_EQUALS(value.asString(), getTableItem(row, column));
   }
 
   std::string getTableItem(int row, int column) const {
@@ -311,11 +325,11 @@ private:
   }
 
   std::unique_ptr<QTableWidget> m_table;
-  std::unique_ptr<IndirectDataTablePresenterLegacy> m_dataTablePresenter;
+  std::unique_ptr<IndirectDataTablePresenter> m_dataTablePresenter;
 
   std::unique_ptr<MockIIndirectFitDataView> m_view;
   std::unique_ptr<MockIndirectFitDataModel> m_model;
-  std::unique_ptr<IndirectFitDataPresenterLegacy> m_presenter;
+  std::unique_ptr<IndirectFitDataPresenter> m_presenter;
 
   SetUpADSWithWorkspace *m_ads;
 };
-- 
GitLab