test_neuron_module.py 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. import os
  2. import unittest
  3. import mock
  4. from kalliope.core.NeuronModule import NeuronModule, TemplateFileNotFoundException
  5. from kalliope.core.Models.Neuron import Neuron
  6. from kalliope.core.Models.Synapse import Synapse
  7. from kalliope.core.Models.Brain import Brain
  8. from kalliope.core.Models.Order import Order
  9. class TestNeuronModule(unittest.TestCase):
  10. def setUp(self):
  11. self.expected_result = "hello, this is a replaced word"
  12. # this allow us to run the test from an IDE and from the root with python -m unittest Tests.TestNeuronModule
  13. if "/Tests" in os.getcwd():
  14. self.file_template = "templates/template_test.j2"
  15. else:
  16. self.file_template = "Tests/templates/template_test.j2"
  17. self.say_template = "hello, this is a {{ test }}"
  18. self.message = {
  19. "test": "replaced word"
  20. }
  21. self.neuron_module_test = NeuronModule()
  22. def tearDown(self):
  23. del self.neuron_module_test
  24. def test_get_audio_from_stt(self):
  25. """
  26. Test the OrderListener thread is started
  27. """
  28. with mock.patch("kalliope.core.OrderListener.start") as mock_orderListener_start:
  29. with mock.patch("kalliope.core.OrderListener.join") as mock_orderListener_join:
  30. def callback():
  31. pass
  32. self.neuron_module_test.get_audio_from_stt(callback=callback())
  33. mock_orderListener_start.assert_called_once_with()
  34. mock_orderListener_start.reset_mock()
  35. def test_update_cache_var(self):
  36. """
  37. Test Update the value of the cache in the provided arg list
  38. """
  39. # True -> False
  40. args_dict = {
  41. "cache": True
  42. }
  43. expected_dict = {
  44. "cache": False
  45. }
  46. self.assertEquals(NeuronModule._update_cache_var(False, args_dict=args_dict),
  47. expected_dict,
  48. "Fail to update the cache value from True to False")
  49. self.assertFalse(args_dict["cache"])
  50. # False -> True
  51. args_dict = {
  52. "cache": False
  53. }
  54. expected_dict = {
  55. "cache": True
  56. }
  57. self.assertEquals(NeuronModule._update_cache_var(True, args_dict=args_dict),
  58. expected_dict,
  59. "Fail to update the cache value from False to True")
  60. self.assertTrue(args_dict["cache"])
  61. def test_get_message_from_dict(self):
  62. self.neuron_module_test.say_template = self.say_template
  63. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), self.expected_result)
  64. del self.neuron_module_test
  65. self.neuron_module_test = NeuronModule()
  66. # test with file_template
  67. self.neuron_module_test.file_template = self.file_template
  68. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), self.expected_result)
  69. del self.neuron_module_test
  70. # test with no say_template and no file_template
  71. self.neuron_module_test = NeuronModule()
  72. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), None)
  73. def test_get_say_template(self):
  74. # test with a string
  75. self.assertEqual(NeuronModule._get_say_template(self.say_template, self.message), self.expected_result)
  76. # test with a list
  77. say_template = list()
  78. say_template.append("hello, this is a {{ test }} one")
  79. say_template.append("hello, this is a {{ test }} two")
  80. expected_result = list()
  81. expected_result.append("hello, this is a replaced word one")
  82. expected_result.append("hello, this is a replaced word two")
  83. self.assertTrue(NeuronModule._get_say_template(say_template, self.message) in expected_result)
  84. def test_get_file_template(self):
  85. # test with a valid template
  86. self.assertEqual(NeuronModule._get_file_template(self.file_template, self.message), self.expected_result)
  87. # test raise with a non existing template
  88. file_template = "does_not_exist.j2"
  89. with self.assertRaises(TemplateFileNotFoundException):
  90. NeuronModule._get_file_template(file_template, self.message)
  91. def test_get_content_of_file(self):
  92. expected_result = "hello, this is a {{ test }}"
  93. self.assertEqual(NeuronModule._get_content_of_file(self.file_template), expected_result)
  94. def test_run_synapse_by_name_with_order(self):
  95. """
  96. Test to start a synapse with a specific given order
  97. Scenarii :
  98. - Neuron has been found and launched
  99. - Neuron has not been found
  100. """
  101. # Init
  102. neuron1 = Neuron(name='neurone1', parameters={'var1': 'val1'})
  103. neuron2 = Neuron(name='neurone2', parameters={'var2': 'val2'})
  104. neuron3 = Neuron(name='neurone3', parameters={'var3': 'val3'})
  105. neuron4 = Neuron(name='neurone4', parameters={'var4': 'val4'})
  106. signal1 = Order(sentence="the sentence")
  107. signal2 = Order(sentence="the second sentence")
  108. signal3 = Order(sentence="part of the third sentence")
  109. synapse1 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1])
  110. synapse2 = Synapse(name="Synapse2", neurons=[neuron3, neuron4], signals=[signal2])
  111. synapse3 = Synapse(name="Synapse3", neurons=[neuron2, neuron4], signals=[signal3])
  112. all_synapse_list = [synapse1,
  113. synapse2,
  114. synapse3]
  115. br = Brain(synapses=all_synapse_list)
  116. order = "This is the order"
  117. synapse_name = "Synapse2"
  118. answer = "This is the {{ answer }}"
  119. expected_parameter = {"answer": "order"}
  120. with mock.patch("kalliope.core.NeuronLauncher.start_neuron_list") as mock_NeuronLauncher_start:
  121. neuron_mod = NeuronModule()
  122. neuron_mod.brain = br
  123. # Success, run synapse 2
  124. launched_synapse = neuron_mod.run_synapse_by_name_with_order(order=order,
  125. synapse_name=synapse_name,
  126. order_template=answer)
  127. self.assertEqual(synapse2, launched_synapse)
  128. mock_NeuronLauncher_start.assert_called_once_with(neuron_list=[neuron3, neuron4],
  129. parameters_dict=expected_parameter)
  130. mock_NeuronLauncher_start.reset_mock()
  131. # Fail
  132. synapse_name = "Synapse5"
  133. self.assertIsNone(neuron_mod.run_synapse_by_name_with_order(order=order,
  134. synapse_name=synapse_name,
  135. order_template=answer))
  136. mock_NeuronLauncher_start.assert_not_called()
  137. mock_NeuronLauncher_start.reset_mock()