import unittest import mock import os from kalliope.core.NeuronLauncher import NeuronLauncher from kalliope.core.SynapseLauncher import SynapseLauncher, SynapseNameNotFound from kalliope.core.TriggerLauncher import TriggerLauncher from kalliope.core.Models.Trigger import Trigger from kalliope.core.Models.Neuron import Neuron from kalliope.core.Models.Order import Order from kalliope.core.Models.Brain import Brain from kalliope.core.Models.Synapse import Synapse class TestLaunchers(unittest.TestCase): """ Class to test Launchers Classes (TriggerLauncher, SynapseLauncher, NeuronLauncher) and methods """ def setUp(self): pass #### # Trigger Launcher def test_get_trigger(self): """ Test the Trigger Launcher trying to run the trigger """ trigger = Trigger("Trigger", {}) with mock.patch("kalliope.core.Utils.get_dynamic_class_instantiation") as mock_get_class_instantiation: TriggerLauncher.get_trigger(trigger=trigger, callback=None) mock_get_class_instantiation.assert_called_once_with("trigger", trigger.name.capitalize(), trigger.parameters) mock_get_class_instantiation.reset_mock() #### # Synapse Launcher def test_start_synapse(self): """ Test the Synapse launcher trying to start synapse """ # 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'}) signal1 = Order(sentence="this is the sentence") signal2 = Order(sentence="this is the second sentence") signal3 = Order(sentence="that is part of the third sentence") synapse1 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1]) synapse2 = Synapse(name="Synapse2", neurons=[neuron3, neuron4], signals=[signal2]) synapse3 = Synapse(name="Synapse3", neurons=[neuron2, neuron4], signals=[signal3]) all_synapse_list = [synapse1, synapse2, synapse3] br = Brain(synapses=all_synapse_list) with mock.patch("kalliope.core.Utils.get_dynamic_class_instantiation") as mock_get_class_instantiation: # Success SynapseLauncher.start_synapse("Synapse1", brain=br) calls = [mock.call("neurons", neuron1.name.capitalize(), neuron1.parameters), mock.call("neurons", neuron2.name.capitalize(), neuron2.parameters)] mock_get_class_instantiation.assert_has_calls(calls=calls) mock_get_class_instantiation.reset_mock() # Fail with self.assertRaises(SynapseNameNotFound): SynapseLauncher.start_synapse("Synapse4", brain=br) def test_run_synapse(self): """ Test to run a Synapse """ neuron1 = Neuron(name='neurone1', parameters={'var1': 'val1'}) neuron2 = Neuron(name='neurone2', parameters={'var2': 'val2'}) signal1 = Order(sentence="this is the sentence") synapse1 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1]) synapse_empty = Synapse(name="Synapse_empty", neurons=[], signals=[signal1]) with mock.patch("kalliope.core.Utils.get_dynamic_class_instantiation") as mock_get_class_instantiation: SynapseLauncher._run_synapse(synapse=synapse1) calls = [mock.call("neurons",neuron1.name.capitalize(),neuron1.parameters), mock.call("neurons",neuron2.name.capitalize(),neuron2.parameters)] mock_get_class_instantiation.assert_has_calls(calls=calls) mock_get_class_instantiation.reset_mock() # Do not any Neurons SynapseLauncher._run_synapse(synapse=synapse_empty) mock_get_class_instantiation.assert_not_called() mock_get_class_instantiation.reset_mock() #### # Neurons Launcher def test_start_neuron(self): """ Test the Neuron Launcher trying to start a Neuron """ neuron = Neuron(name='neurone1', parameters={'var1': 'val1'}) with mock.patch("kalliope.core.Utils.get_dynamic_class_instantiation") as mock_get_class_instantiation: NeuronLauncher.start_neuron(neuron=neuron) mock_get_class_instantiation.assert_called_once_with("neurons", neuron.name.capitalize(), neuron.parameters) mock_get_class_instantiation.reset_mock()