瀏覽代碼

[Tests] Add tests in geolocation signals

ThiBuff 7 年之前
父節點
當前提交
afcce2093f

+ 11 - 1
kalliope/signals/geolocation/geolocation.py

@@ -8,6 +8,15 @@ logging.basicConfig()
 logger = logging.getLogger("kalliope")
 
 
+class MissingParameter(Exception):
+    """
+    A geolocation must contain latitude, longitude, radius.
+
+    .. seealso:: Geolocation
+    """
+    pass
+
+
 class Geolocation(Thread):
 
     def __init__(self):
@@ -25,7 +34,7 @@ class Geolocation(Thread):
         return the list of synapse that use geolocation as signal in the provided brain
         :param brain: Brain object that contain all synapses loaded
         :type brain: Brain
-        :return: list of synapse that use geolocation as signal
+        :return: generator of synapse that use geolocation as signal
         """
         for synapse in brain.synapses:
             for signal in synapse.signals:
@@ -33,6 +42,7 @@ class Geolocation(Thread):
                 if signal.name == "geolocation":
                     if not cls._check_geolocation(parameters=signal.parameters):
                         logger.debug("[Geolocation] The signal is missing mandatory parameters, check documentation")
+                        raise MissingParameter()
                     else:
                         yield synapse
 

+ 76 - 1
kalliope/signals/geolocation/tests/test_geolocalisation.py

@@ -1,8 +1,83 @@
 import unittest
 
 
+from kalliope.core.Models import Brain
+from kalliope.core.Models import Neuron
+from kalliope.core.Models import Synapse
+from kalliope.core.Models.Signal import Signal
+
+from kalliope.signals.geolocation.geolocation import Geolocation, MissingParameter
+
+
 class Test_Geolocation(unittest.TestCase):
-    pass
+
+    def test_check_geolocation_valid(self):
+        expected_parameters = ["latitude", "longitude", "radius"]
+        self.assertTrue(Geolocation._check_geolocation(expected_parameters))
+
+    def test_check_geolocation_valid_with_other(self):
+        expected_parameters = ["latitude", "longitude", "radius", "kalliope", "random"]
+        self.assertTrue(Geolocation._check_geolocation(expected_parameters))
+
+    def test_check_geolocation_no_radius(self):
+        expected_parameters = ["latitude", "longitude", "kalliope", "random"]
+        self.assertFalse(Geolocation._check_geolocation(expected_parameters))
+
+    def test_check_geolocation_no_latitude(self):
+        expected_parameters = ["longitude", "radius", "kalliope", "random"]
+        self.assertFalse(Geolocation._check_geolocation(expected_parameters))
+
+    def test_check_geolocation_no_longitude(self):
+        expected_parameters = ["latitude", "radius", "kalliope", "random"]
+        self.assertFalse(Geolocation._check_geolocation(expected_parameters))
+
+    def test_get_list_synapse_with_geolocation(self):
+        # Init
+        neuron1 = Neuron(name='neurone1', parameters={'var1': 'val1'})
+        neuron2 = Neuron(name='neurone2', parameters={'var2': 'val2'})
+        neuron3 = Neuron(name='neurone3', parameters={'var3': 'val3'})
+        neuron4 = Neuron(name='neurone4', parameters={'var4': 'val4'})
+
+        fake_geolocation_parameters = {
+            "latitude": 66,
+            "longitude": 66,
+            "radius": 66,
+        }
+        signal1 = Signal(name="geolocation", parameters=fake_geolocation_parameters)
+        signal2 = Signal(name="order", parameters="this is the second sentence")
+
+        synapse1 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1])
+        synapse2 = Synapse(name="Synapse2", neurons=[neuron3, neuron4], signals=[signal2])
+
+        synapses_list = [synapse1, synapse2]
+        br = Brain(synapses=synapses_list)
+
+        expected_list = [synapse1]
+        self.assertEqual(expected_list, list(Geolocation._get_list_synapse_with_geolocation(brain=br)))
+
+    def test_get_list_synapse_with_raise_missing_parameters(self):
+        # Init
+        neuron1 = Neuron(name='neurone1', parameters={'var1': 'val1'})
+        neuron2 = Neuron(name='neurone2', parameters={'var2': 'val2'})
+        neuron3 = Neuron(name='neurone3', parameters={'var3': 'val3'})
+        neuron4 = Neuron(name='neurone4', parameters={'var4': 'val4'})
+
+        fake_geolocation_parameters = {
+            "longitude": 66,
+            "radius": 66,
+        }
+        signal1 = Signal(name="geolocation", parameters=fake_geolocation_parameters)
+        signal2 = Signal(name="order", parameters="this is the second sentence")
+
+        synapse1 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1])
+        synapse2 = Synapse(name="Synapse2", neurons=[neuron3, neuron4], signals=[signal2])
+
+        synapses_list = [synapse1, synapse2]
+        br = Brain(synapses=synapses_list)
+
+        with self.assertRaises(MissingParameter):
+            # /!\ Note: impossible to call a generator method directly ! need to use a list !
+            list(Geolocation._get_list_synapse_with_geolocation(brain=br))
 
 
 if __name__ == '__main__':