/qt/python/mantidqtinterfaces/mantidqtinterfaces/drill/test/DrillExportModelTest.py

https://github.com/mantidproject/mantid · Python · 176 lines · 142 code · 28 blank · 6 comment · 2 complexity · 79ea2f4cd2fad92c64fc46a94e5d5f3e MD5 · raw file

  1. # Mantid Repository : https://github.com/mantidproject/mantid
  2. #
  3. # Copyright © 2020 ISIS Rutherford Appleton Laboratory UKRI,
  4. # NScD Oak Ridge National Laboratory, European Spallation Source
  5. # & Institut Laue - Langevin
  6. # SPDX - License - Identifier: GPL - 3.0 +
  7. import unittest
  8. from unittest import mock
  9. from mantidqtinterfaces.drill.model.DrillExportModel import DrillExportModel
  10. class DrillExportModelTest(unittest.TestCase):
  11. EXPORT_ALGORITHMS = {
  12. "a1": {"ea1": True, "ea2": False},
  13. "a2": {"ea2": True}
  14. }
  15. EXPORT_ALGO_CRITERIA = {
  16. "ea1": "%param% == 'test'",
  17. "ea2": "%param% != 'test'"
  18. }
  19. EXPORT_ALGO_EXTENSION = {
  20. "ea1": ".txt",
  21. "ea2": ".xml"
  22. }
  23. def setUp(self):
  24. patch = mock.patch("mantidqtinterfaces.drill.model.DrillExportModel.mtd")
  25. self.mMtd = patch.start()
  26. self.addCleanup(patch.stop)
  27. patch = mock.patch('mantidqtinterfaces.drill.model.DrillExportModel.logger')
  28. self.mLogger = patch.start()
  29. self.addCleanup(patch.stop)
  30. patch = mock.patch('mantidqtinterfaces.drill.model.DrillExportModel.config')
  31. self.mConfig = patch.start()
  32. self.addCleanup(patch.stop)
  33. patch = mock.patch.dict("mantidqtinterfaces.drill.model.DrillExportModel"
  34. ".RundexSettings.EXPORT_ALGORITHMS",
  35. self.EXPORT_ALGORITHMS, clear=True)
  36. self.mAlgo = patch.start()
  37. self.addCleanup(patch.stop)
  38. patch = mock.patch.dict("mantidqtinterfaces.drill.model.DrillExportModel"
  39. ".RundexSettings.EXPORT_ALGO_CRITERIA",
  40. self.EXPORT_ALGO_CRITERIA, clear=True)
  41. self.mAlgoCriteria = patch.start()
  42. self.addCleanup(patch.stop)
  43. patch = mock.patch.dict("mantidqtinterfaces.drill.model.DrillExportModel"
  44. ".RundexSettings.EXPORT_ALGO_EXTENSION",
  45. self.EXPORT_ALGO_EXTENSION, clear=True)
  46. self.mAlgoExtension = patch.start()
  47. self.addCleanup(patch.stop)
  48. patch = mock.patch("mantidqtinterfaces.drill.model.DrillExportModel"
  49. ".DrillAlgorithmPool")
  50. self.mTasksPool = patch.start()
  51. self.mTasksPool = self.mTasksPool.return_value
  52. self.addCleanup(patch.stop)
  53. patch = mock.patch("mantidqtinterfaces.drill.model.DrillExportModel"
  54. ".DrillTask")
  55. self.mTask = patch.start()
  56. self.addCleanup(patch.stop)
  57. self.exportModel = DrillExportModel("a1")
  58. def test_init(self):
  59. self.assertDictEqual(self.exportModel._exportAlgorithms,
  60. self.EXPORT_ALGORITHMS["a1"])
  61. self.assertEqual(self.exportModel._exports, {})
  62. self.assertEqual(self.exportModel._successExports, {})
  63. def test_getAlgorithms(self):
  64. algs = self.exportModel.getAlgorithms()
  65. self.assertEqual(algs, [a for a in self.EXPORT_ALGORITHMS["a1"]])
  66. def test_isAlgorithmActivated(self):
  67. self.assertEqual(self.exportModel._exportAlgorithms["ea1"], True)
  68. self.assertEqual(self.exportModel.isAlgorithmActivated("ea1"), True)
  69. self.exportModel._exportAlgorithms["ea1"] = False
  70. self.assertEqual(self.exportModel.isAlgorithmActivated("ea1"), False)
  71. self.assertEqual(self.exportModel._exportAlgorithms["ea2"], False)
  72. self.assertEqual(self.exportModel.isAlgorithmActivated("ea2"), False)
  73. def test_activateAlgorithm(self):
  74. self.assertEqual(self.exportModel._exportAlgorithms["ea2"], False)
  75. self.exportModel.activateAlgorithm("ea2")
  76. self.assertEqual(self.exportModel._exportAlgorithms["ea2"], True)
  77. self.exportModel.activateAlgorithm("ea2")
  78. self.assertEqual(self.exportModel._exportAlgorithms["ea2"], True)
  79. self.exportModel.activateAlgorithm("ea3")
  80. def test_inactivateAlgorithm(self):
  81. self.assertEqual(self.exportModel._exportAlgorithms["ea1"], True)
  82. self.exportModel.inactivateAlgorithm("ea1")
  83. self.assertEqual(self.exportModel._exportAlgorithms["ea1"], False)
  84. self.exportModel.inactivateAlgorithm("ea1")
  85. self.assertEqual(self.exportModel._exportAlgorithms["ea1"], False)
  86. self.exportModel.inactivateAlgorithm("ea3")
  87. def test_valid_Criteria(self):
  88. mHist = self.mMtd.__getitem__.return_value.getHistory.return_value
  89. mAlgo = mHist.lastAlgorithm.return_value
  90. mAlgo.getPropertyValue.return_value = "test"
  91. self.assertTrue(self.exportModel._validCriteria(mock.Mock(), "ea3"))
  92. self.assertTrue(self.exportModel._validCriteria(mock.Mock(), "ea1"))
  93. self.assertFalse(self.exportModel._validCriteria(mock.Mock(), "ea2"))
  94. def test_onTaskSuccess(self):
  95. self.exportModel._logSuccessExport = mock.Mock()
  96. self.exportModel._exports = {"workspace1": {"filename1", "filename2"},
  97. "workspace2": {"filename3"}}
  98. self.exportModel._onTaskSuccess("workspace1", "filename1")
  99. self.assertDictEqual(self.exportModel._successExports,
  100. {"workspace1": {"filename1"}})
  101. self.assertDictEqual(self.exportModel._exports,
  102. {"workspace1": {"filename2"},
  103. "workspace2": {"filename3"}})
  104. self.exportModel._onTaskSuccess("workspace1", "filename2")
  105. self.assertDictEqual(self.exportModel._successExports,
  106. {"workspace1": {"filename1", "filename2"}})
  107. self.assertDictEqual(self.exportModel._exports,
  108. {"workspace2": {"filename3"}})
  109. self.exportModel._logSuccessExport.assert_called_once()
  110. def test_onTaskError(self):
  111. self.exportModel._logSuccessExport = mock.Mock()
  112. self.exportModel._exports = {"workspace1": {"filename1", "filename2"},
  113. "workspace2": {"filename3"}}
  114. self.exportModel._onTaskError("workspace2", "filename3",
  115. "error message")
  116. self.mLogger.error.assert_called()
  117. self.assertDictEqual(self.exportModel._exports,
  118. {"workspace1": {"filename1", "filename2"}})
  119. self.exportModel._logSuccessExport.assert_called_once()
  120. def test_logSuccessExport(self):
  121. self.exportModel._successExports = {"workspace1": {"filename1",
  122. "filename2"}}
  123. self.exportModel._logSuccessExport("workspace1")
  124. self.mLogger.notice.assert_called()
  125. self.assertDictEqual(self.exportModel._successExports, {})
  126. def test_run(self):
  127. self.mConfig.getString.return_value = "/default/save/directory/"
  128. mSample = mock.Mock()
  129. mSample.getOutputName.return_value = "workspace"
  130. mGroup = mock.Mock()
  131. mGroup.getNames.return_value = ["workspace"]
  132. self.mMtd.__getitem__.return_value = mGroup
  133. self.mMtd.getObjectNames.return_value = ["workspace_1",
  134. "workspace_2"]
  135. self.exportModel._validCriteria = mock.Mock()
  136. self.exportModel._validCriteria.return_value = True
  137. self.exportModel.run(mSample)
  138. self.assertDictEqual(self.exportModel._exports,
  139. {"workspace_1": {
  140. "/default/save/directory/workspace_1.txt"
  141. },
  142. "workspace_2": {
  143. "/default/save/directory/workspace_2.txt"
  144. }
  145. })
  146. self.mTask.assert_called()
  147. if __name__ == "__main__":
  148. unittest.main()