test_neuron_module.py 5.6 KB

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