From 9bf798d61fc199d355a5de9660da50e6b37c43b4 Mon Sep 17 00:00:00 2001
From: Conor Finn <conor.finn@stfc.ac.uk>
Date: Mon, 16 Dec 2019 10:20:14 +0000
Subject: [PATCH] RE #27187 Add settings model and tests

---
 scripts/Engineering/gui/CMakeLists.txt        |  1 +
 .../settings/settings_model.py                | 31 +++++++++++
 .../settings/test/test_settings_model.py      | 51 +++++++++++++++++++
 3 files changed, 83 insertions(+)
 create mode 100644 scripts/Engineering/gui/engineering_diffraction/settings/settings_model.py
 create mode 100644 scripts/Engineering/gui/engineering_diffraction/settings/test/test_settings_model.py

diff --git a/scripts/Engineering/gui/CMakeLists.txt b/scripts/Engineering/gui/CMakeLists.txt
index 52562a486b8..4b5c38e394c 100644
--- a/scripts/Engineering/gui/CMakeLists.txt
+++ b/scripts/Engineering/gui/CMakeLists.txt
@@ -5,6 +5,7 @@ set(TEST_PY_FILES
     engineering_diffraction/tabs/common/test/test_vanadium_corrections.py
     # Settings
     engineering_diffraction/settings/test/test_settings_helper.py
+    engineering_diffraction/settings/test/test_settings_model.py
     # Calibration
     engineering_diffraction/tabs/calibration/test/test_calib_model.py
     engineering_diffraction/tabs/calibration/test/test_calib_presenter.py
diff --git a/scripts/Engineering/gui/engineering_diffraction/settings/settings_model.py b/scripts/Engineering/gui/engineering_diffraction/settings/settings_model.py
new file mode 100644
index 00000000000..8c197fcb4d6
--- /dev/null
+++ b/scripts/Engineering/gui/engineering_diffraction/settings/settings_model.py
@@ -0,0 +1,31 @@
+# Mantid Repository : https://github.com/mantidproject/mantid
+#
+# Copyright &copy; 2019 ISIS Rutherford Appleton Laboratory UKRI,
+#     NScD Oak Ridge National Laboratory, European Spallation Source
+#     & Institut Laue - Langevin
+# SPDX - License - Identifier: GPL - 3.0 +
+
+from __future__ import (absolute_import, division, print_function)
+
+from Engineering.gui.engineering_diffraction.settings.settings_helper import get_setting, set_setting
+
+
+class SettingsModel(object):
+    INTERFACES_SETTINGS_GROUP = "CustomInterfaces"
+    ENGINEERING_PREFIX = "EngineeringDiffraction2/"
+
+    def get_settings_dict(self, keys):
+        settings = {}
+        for setting_name in keys:
+            settings[setting_name] = self.get_setting(setting_name)
+        return settings
+
+    def set_settings_dict(self, settings):
+        for key in settings:
+            self.set_setting(key, settings[key])
+
+    def get_setting(self, name):
+        return get_setting(self.INTERFACES_SETTINGS_GROUP, self.ENGINEERING_PREFIX, name)
+
+    def set_setting(self, name, value):
+        set_setting(self.INTERFACES_SETTINGS_GROUP, self.ENGINEERING_PREFIX, name, value)
\ No newline at end of file
diff --git a/scripts/Engineering/gui/engineering_diffraction/settings/test/test_settings_model.py b/scripts/Engineering/gui/engineering_diffraction/settings/test/test_settings_model.py
new file mode 100644
index 00000000000..3acd388e063
--- /dev/null
+++ b/scripts/Engineering/gui/engineering_diffraction/settings/test/test_settings_model.py
@@ -0,0 +1,51 @@
+# Mantid Repository : https://github.com/mantidproject/mantid
+#
+# Copyright &copy; 2019 ISIS Rutherford Appleton Laboratory UKRI,
+#     NScD Oak Ridge National Laboratory, European Spallation Source
+#     & Institut Laue - Langevin
+# SPDX - License - Identifier: GPL - 3.0 +
+
+from __future__ import (absolute_import, division, print_function)
+
+import unittest
+
+from mantid.py3compat.mock import patch
+from Engineering.gui.engineering_diffraction.settings.settings_model import SettingsModel
+
+dir_path = "Engineering.gui.engineering_diffraction.settings."
+
+
+class SettingsModelTest(unittest.TestCase):
+    def setUp(self):
+        self.model = SettingsModel()
+
+    @patch(dir_path + "settings_model.set_setting")
+    def test_set_setting(self, set_setting_mock):
+        self.model.set_setting("name", "value")
+        set_setting_mock.assert_called_with("CustomInterfaces", "EngineeringDiffraction2/", "name", "value")
+
+    @patch(dir_path + "settings_model.get_setting")
+    def test_get_setting(self, get_setting_mock):
+        self.model.get_setting("name")
+        get_setting_mock.assert_called_with("CustomInterfaces", "EngineeringDiffraction2/", "name", return_type=str)
+
+    @patch(dir_path + "settings_model.set_setting")
+    def test_set_settings_dict(self, set_setting_mock):
+        self.model.set_settings_dict({"name": "value", "namebool": False, "namenum": 10})
+        self.assertEqual(set_setting_mock.call_count, 3)
+        set_setting_mock.assert_any_call("CustomInterfaces", "EngineeringDiffraction2/", "name", "value")
+        set_setting_mock.assert_any_call("CustomInterfaces", "EngineeringDiffraction2/", "namebool", False)
+        set_setting_mock.assert_any_call("CustomInterfaces", "EngineeringDiffraction2/", "namenum", 10)
+
+    @patch(dir_path + "settings_model.get_setting")
+    def test_get_settings_dict(self, get_setting_mock):
+        get_setting_mock.return_value = "value"
+        self.assertEqual(self.model.get_settings_dict({"name1": str, "name2": str}),
+                         {'name1': 'value', 'name2': 'value'})
+        self.assertEqual(get_setting_mock.call_count, 2)
+        get_setting_mock.assert_any_call("CustomInterfaces", "EngineeringDiffraction2/", "name1", return_type=str)
+        get_setting_mock.assert_any_call("CustomInterfaces", "EngineeringDiffraction2/", "name2", return_type=str)
+
+
+if __name__ == '__main__':
+    unittest.main()
-- 
GitLab