From ef0b754a61e660e5a9dd6c927cc62915739d5b5c Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Wed, 19 Jul 2017 13:57:22 +0100
Subject: [PATCH] Renamed plugin and added tests

---
 force_bdss/base_core_driver.py                |  2 +-
 force_bdss/bdss_application.py                |  2 +-
 ..._registry.py => bundle_registry_plugin.py} |  0
 .../tests/test_bundle_registry_plugin.py      | 98 +++++++++++++++++++
 4 files changed, 100 insertions(+), 2 deletions(-)
 rename force_bdss/{bundle_registry.py => bundle_registry_plugin.py} (100%)
 create mode 100644 force_bdss/tests/test_bundle_registry_plugin.py

diff --git a/force_bdss/base_core_driver.py b/force_bdss/base_core_driver.py
index 701180a..5875f17 100644
--- a/force_bdss/base_core_driver.py
+++ b/force_bdss/base_core_driver.py
@@ -1,7 +1,7 @@
 from envisage.plugin import Plugin
 from traits.trait_types import Instance
 
-from force_bdss.bundle_registry import (
+from force_bdss.bundle_registry_plugin import (
     BundleRegistryPlugin,
     BUNDLE_REGISTRY_PLUGIN_ID
 )
diff --git a/force_bdss/bdss_application.py b/force_bdss/bdss_application.py
index c87b81b..c813e4d 100644
--- a/force_bdss/bdss_application.py
+++ b/force_bdss/bdss_application.py
@@ -5,7 +5,7 @@ from stevedore.exception import NoMatches
 from envisage.api import Application
 from envisage.core_plugin import CorePlugin
 
-from force_bdss.bundle_registry import BundleRegistryPlugin
+from force_bdss.bundle_registry_plugin import BundleRegistryPlugin
 from force_bdss.core_evaluation_driver import CoreEvaluationDriver
 from force_bdss.core_mco_driver import CoreMCODriver
 
diff --git a/force_bdss/bundle_registry.py b/force_bdss/bundle_registry_plugin.py
similarity index 100%
rename from force_bdss/bundle_registry.py
rename to force_bdss/bundle_registry_plugin.py
diff --git a/force_bdss/tests/test_bundle_registry_plugin.py b/force_bdss/tests/test_bundle_registry_plugin.py
new file mode 100644
index 0000000..742a972
--- /dev/null
+++ b/force_bdss/tests/test_bundle_registry_plugin.py
@@ -0,0 +1,98 @@
+import unittest
+
+from force_bdss.id_generators import bundle_id
+
+try:
+    import mock
+except ImportError:
+    from unittest import mock
+
+from traits.api import List
+from envisage.application import Application
+from envisage.plugin import Plugin
+
+from force_bdss.bundle_registry_plugin import BundleRegistryPlugin
+from force_bdss.data_sources.i_data_source_bundle import IDataSourceBundle
+from force_bdss.kpi.i_kpi_calculator_bundle import IKPICalculatorBundle
+from force_bdss.mco.i_multi_criteria_optimizer_bundle import \
+    IMultiCriteriaOptimizerBundle
+
+
+class TestBundleRegistry(unittest.TestCase):
+    def setUp(self):
+        self.plugin = BundleRegistryPlugin()
+        self.app = Application([self.plugin])
+        self.app.start()
+        self.app.stop()
+
+    def test_initialization(self):
+        self.assertEqual(self.plugin.mco_bundles, [])
+        self.assertEqual(self.plugin.data_source_bundles, [])
+        self.assertEqual(self.plugin.kpi_calculator_bundles, [])
+
+
+class BaseBDSSPlugin(Plugin):
+    mco_bundles = List(
+        IMultiCriteriaOptimizerBundle,
+        contributes_to='force.bdss.mco.bundles'
+    )
+
+    #: A list of the available Data Sources.
+    #: It will be populated by plugins.
+    data_source_bundles = List(
+        IDataSourceBundle,
+        contributes_to='force.bdss.data_sources.bundles')
+
+    kpi_calculator_bundles = List(
+        IKPICalculatorBundle,
+        contributes_to='force.bdss.kpi_calculators.bundles'
+    )
+
+
+class MySuperPlugin(BaseBDSSPlugin):
+    def _mco_bundles_default(self):
+        return [mock.Mock(spec=IMultiCriteriaOptimizerBundle,
+                          id=bundle_id("enthought", "mco1"))]
+
+    def _data_source_bundles_default(self):
+        return [mock.Mock(spec=IDataSourceBundle,
+                          id=bundle_id("enthought", "ds1")),
+                mock.Mock(spec=IDataSourceBundle,
+                          id=bundle_id("enthought", "ds2"))]
+
+    def _kpi_calculator_bundles_default(self):
+        return [mock.Mock(spec=IKPICalculatorBundle,
+                          id=bundle_id("enthought", "kpi1")),
+                mock.Mock(spec=IKPICalculatorBundle,
+                          id=bundle_id("enthought", "kpi2")),
+                mock.Mock(spec=IKPICalculatorBundle,
+                          id=bundle_id("enthought", "kpi3"))]
+
+
+class TestBundleRegistryWithContent(unittest.TestCase):
+    def setUp(self):
+        self.plugin = BundleRegistryPlugin()
+        self.app = Application([self.plugin, MySuperPlugin()])
+        self.app.start()
+        self.app.stop()
+
+    def test_initialization(self):
+        self.assertEqual(len(self.plugin.mco_bundles), 1)
+        self.assertEqual(len(self.plugin.data_source_bundles), 2)
+        self.assertEqual(len(self.plugin.kpi_calculator_bundles), 3)
+
+    def test_lookup(self):
+        id = bundle_id("enthought", "mco1")
+        self.assertEqual(self.plugin.mco_bundle_by_id(id).id, id)
+
+        for entry in ["ds1", "ds2"]:
+            id = bundle_id("enthought", entry)
+            self.assertEqual(self.plugin.data_source_bundle_by_id(id).id, id)
+
+        for entry in ["kpi1", "kpi2", "kpi3"]:
+            id = bundle_id("enthought", entry)
+            self.assertEqual(self.plugin.kpi_calculator_bundle_by_id(id).id,
+                             id)
+
+if __name__ == '__main__':
+    unittest.main()
-- 
GitLab