test_neuron_module.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import os
  2. import unittest
  3. import mock
  4. from kalliope.core.Models.Tts import Tts
  5. from kalliope import SettingLoader
  6. from kalliope.core.NeuronModule import NeuronModule, TemplateFileNotFoundException, TTSModuleNotFound
  7. class TestNeuronModule(unittest.TestCase):
  8. def setUp(self):
  9. self.expected_result = "hello, this is a replaced word"
  10. # this allow us to run the test from an IDE and from the root with python -m unittest Tests.TestNeuronModule
  11. if "/Tests" in os.getcwd():
  12. self.file_template = "templates/template_test.j2"
  13. else:
  14. self.file_template = "Tests/templates/template_test.j2"
  15. self.say_template = "hello, this is a {{ test }}"
  16. self.message = {
  17. "test": "replaced word"
  18. }
  19. self.neuron_module_test = NeuronModule()
  20. self.settings = SettingLoader(file_path="settings_test.yml").settings
  21. def tearDown(self):
  22. del self.neuron_module_test
  23. def test_get_audio_from_stt(self):
  24. """
  25. Test the OrderListener thread is started
  26. """
  27. with mock.patch("kalliope.core.OrderListener.start") as mock_orderListener_start:
  28. with mock.patch("kalliope.core.OrderListener.join"):
  29. def callback():
  30. pass
  31. self.neuron_module_test.get_audio_from_stt(callback=callback())
  32. mock_orderListener_start.assert_called_once_with()
  33. mock_orderListener_start.reset_mock()
  34. def test_get_tts_object(self):
  35. # no TTS name provided. should return the default tts
  36. expected_tts = Tts(name="pico2wave", parameters={"language": "fr-FR", "cache": True})
  37. self.assertEqual(NeuronModule._get_tts_object(settings=self.settings), expected_tts)
  38. # TTS provided, only cache parameter updated
  39. expected_tts = Tts(name="pico2wave", parameters={"language": "fr-FR", "cache": False})
  40. self.assertEqual(NeuronModule._get_tts_object(tts_name="pico2wave",
  41. override_parameter={"cache": False},
  42. settings=self.settings), expected_tts)
  43. # TTS provided, all parameters updated
  44. expected_tts = Tts(name="pico2wave", parameters={"language": "es-ES", "cache": False})
  45. self.assertEqual(NeuronModule._get_tts_object(tts_name="pico2wave",
  46. override_parameter={"language": "es-ES", "cache": False},
  47. settings=self.settings), expected_tts)
  48. # TTS not existing in settings
  49. with self.assertRaises(TTSModuleNotFound):
  50. NeuronModule._get_tts_object(tts_name="no_existing_tts",
  51. override_parameter={"cache": False},
  52. settings=self.settings)
  53. def test_get_message_from_dict(self):
  54. self.neuron_module_test.say_template = self.say_template
  55. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), self.expected_result)
  56. del self.neuron_module_test
  57. self.neuron_module_test = NeuronModule()
  58. # test with file_template
  59. self.neuron_module_test.file_template = self.file_template
  60. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), self.expected_result)
  61. del self.neuron_module_test
  62. # test with no say_template and no file_template
  63. self.neuron_module_test = NeuronModule()
  64. self.assertEqual(self.neuron_module_test._get_message_from_dict(self.message), None)
  65. def test_get_say_template(self):
  66. # test with a string
  67. self.assertEqual(NeuronModule._get_say_template(self.say_template, self.message), self.expected_result)
  68. # test with a list
  69. say_template = list()
  70. say_template.append("hello, this is a {{ test }} one")
  71. say_template.append("hello, this is a {{ test }} two")
  72. expected_result = list()
  73. expected_result.append("hello, this is a replaced word one")
  74. expected_result.append("hello, this is a replaced word two")
  75. self.assertTrue(NeuronModule._get_say_template(say_template, self.message) in expected_result)
  76. def test_get_file_template(self):
  77. # test with a valid template
  78. self.assertEqual(NeuronModule._get_file_template(self.file_template, self.message), self.expected_result)
  79. # test raise with a non existing template
  80. file_template = "does_not_exist.j2"
  81. with self.assertRaises(TemplateFileNotFoundException):
  82. NeuronModule._get_file_template(file_template, self.message)
  83. def test_get_content_of_file(self):
  84. expected_result = "hello, this is a {{ test }}"
  85. self.assertEqual(NeuronModule._get_content_of_file(self.file_template), expected_result)
  86. def test_serialize(self):
  87. """
  88. Test the serialisation of the neuron module
  89. """
  90. neuron_module = NeuronModule()
  91. neuron_module.neuron_name = "kalliope"
  92. neuron_module.tts_message = "I am french"
  93. expected_result = {
  94. 'neuron_name': "kalliope",
  95. 'generated_message': "I am french"
  96. }
  97. self.assertEqual(expected_result, neuron_module.serialize())
  98. if __name__ == '__main__':
  99. unittest.main()