test_neuron_module.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  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_params(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_params({'cache': 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_params({'cache': 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. # {} -> {'language': 'en-US'}
  62. args_dict = {}
  63. expected_dict = {
  64. "language": "en-US"
  65. }
  66. self.assertEquals(NeuronModule._update_params({'language': 'en-US'}, args_dict=args_dict),
  67. expected_dict,
  68. "Fail to create new parameter: language key and value")
  69. def test_get_message_from_dict(self):
  70. self.neuron_module_test.say_template = self.say_template
  71. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), self.expected_result)
  72. del self.neuron_module_test
  73. self.neuron_module_test = NeuronModule()
  74. # test with file_template
  75. self.neuron_module_test.file_template = self.file_template
  76. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), self.expected_result)
  77. del self.neuron_module_test
  78. # test with no say_template and no file_template
  79. self.neuron_module_test = NeuronModule()
  80. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), None)
  81. def test_get_say_template(self):
  82. # test with a string
  83. self.assertEqual(NeuronModule._get_say_template(self.say_template, self.message), self.expected_result)
  84. # test with a list
  85. say_template = list()
  86. say_template.append("hello, this is a {{ test }} one")
  87. say_template.append("hello, this is a {{ test }} two")
  88. expected_result = list()
  89. expected_result.append("hello, this is a replaced word one")
  90. expected_result.append("hello, this is a replaced word two")
  91. self.assertTrue(NeuronModule._get_say_template(say_template, self.message) in expected_result)
  92. def test_get_file_template(self):
  93. # test with a valid template
  94. self.assertEqual(NeuronModule._get_file_template(self.file_template, self.message), self.expected_result)
  95. # test raise with a non existing template
  96. file_template = "does_not_exist.j2"
  97. with self.assertRaises(TemplateFileNotFoundException):
  98. NeuronModule._get_file_template(file_template, self.message)
  99. def test_get_content_of_file(self):
  100. expected_result = "hello, this is a {{ test }}"
  101. self.assertEqual(NeuronModule._get_content_of_file(self.file_template), expected_result)
  102. def test_run_synapse_by_name_with_order(self):
  103. """
  104. Test to start a synapse with a specific given order
  105. Scenarii :
  106. - Neuron has been found and launched
  107. - Neuron has not been found
  108. """
  109. # Init
  110. neuron1 = Neuron(name='neurone1', parameters={'var1': 'val1'})
  111. neuron2 = Neuron(name='neurone2', parameters={'var2': 'val2'})
  112. neuron3 = Neuron(name='neurone3', parameters={'var3': 'val3'})
  113. neuron4 = Neuron(name='neurone4', parameters={'var4': 'val4'})
  114. signal1 = Order(sentence="the sentence")
  115. signal2 = Order(sentence="the second sentence")
  116. signal3 = Order(sentence="part of the third sentence")
  117. synapse1 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1])
  118. synapse2 = Synapse(name="Synapse2", neurons=[neuron3, neuron4], signals=[signal2])
  119. synapse3 = Synapse(name="Synapse3", neurons=[neuron2, neuron4], signals=[signal3])
  120. all_synapse_list = [synapse1,
  121. synapse2,
  122. synapse3]
  123. br = Brain(synapses=all_synapse_list)
  124. order = "This is the order"
  125. synapse_name = "Synapse2"
  126. answer = "This is the {{ answer }}"
  127. expected_parameter = {"answer": "order"}
  128. with mock.patch("kalliope.core.NeuronLauncher.start_neuron_list") as mock_NeuronLauncher_start:
  129. neuron_mod = NeuronModule()
  130. neuron_mod.brain = br
  131. # Success, run synapse 2
  132. launched_synapse = neuron_mod.run_synapse_by_name_with_order(order=order,
  133. synapse_name=synapse_name,
  134. order_template=answer)
  135. self.assertEqual(synapse2, launched_synapse)
  136. mock_NeuronLauncher_start.assert_called_once_with(neuron_list=[neuron3, neuron4],
  137. parameters_dict=expected_parameter)
  138. mock_NeuronLauncher_start.reset_mock()
  139. # Fail
  140. synapse_name = "Synapse5"
  141. self.assertIsNone(neuron_mod.run_synapse_by_name_with_order(order=order,
  142. synapse_name=synapse_name,
  143. order_template=answer))
  144. mock_NeuronLauncher_start.assert_not_called()
  145. mock_NeuronLauncher_start.reset_mock()