test_models.py 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417
  1. import unittest
  2. import mock
  3. from kalliope.core.Models.Tts import Tts
  4. from kalliope.core.Models.Trigger import Trigger
  5. from kalliope.core.Models.Stt import Stt
  6. from kalliope.core.Models.RestAPI import RestAPI
  7. from kalliope.core.Models.Dna import Dna
  8. from kalliope.core import LIFOBuffer
  9. from kalliope.core.Models.Settings import Settings
  10. from kalliope.core.Models import Neuron, Order, Synapse, Brain, Event, Resources
  11. from kalliope.core.Models.APIResponse import APIResponse
  12. from kalliope.core.Models.MatchedSynapse import MatchedSynapse
  13. class TestModels(unittest.TestCase):
  14. def setUp(self):
  15. # Init
  16. neuron1 = Neuron(name='neurone1', parameters={'var1': 'val1'})
  17. neuron2 = Neuron(name='neurone2', parameters={'var2': 'val2'})
  18. neuron3 = Neuron(name='neurone3', parameters={'var3': 'val3'})
  19. neuron4 = Neuron(name='neurone4', parameters={'var4': 'val4'})
  20. signal1 = Order(sentence="this is the sentence")
  21. signal2 = Order(sentence="this is the second sentence")
  22. signal3 = Order(sentence="that is part of the third sentence")
  23. self.synapse1 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1])
  24. self.synapse2 = Synapse(name="Synapse2", neurons=[neuron3, neuron4], signals=[signal2])
  25. self.synapse3 = Synapse(name="Synapse3", neurons=[neuron2, neuron4], signals=[signal3])
  26. self.all_synapse_list1 = [self.synapse1,
  27. self.synapse2,
  28. self.synapse3]
  29. self.all_synapse_list2 = [self.synapse2,
  30. self.synapse3]
  31. self.brain_test1 = Brain(synapses=self.all_synapse_list1)
  32. self.brain_test2 = Brain(synapses=self.all_synapse_list2)
  33. # this brain is the same as the first one
  34. self.brain_test3 = Brain(synapses=self.all_synapse_list1)
  35. self.settings_test = Settings(default_synapse="Synapse3")
  36. # clean the LiFO
  37. LIFOBuffer.lifo_list = list()
  38. def test_APIResponse(self):
  39. user_order = "user order"
  40. self.matched_synapse = MatchedSynapse(matched_synapse=self.synapse1, matched_order=user_order)
  41. api_response = APIResponse()
  42. api_response.user_order = user_order
  43. api_response.list_processed_matched_synapse = [self.matched_synapse]
  44. expected_result_serialize = {'status': None,
  45. 'matched_synapses':
  46. [{'matched_order': 'user order',
  47. 'neuron_module_list': [],
  48. 'synapse_name': 'Synapse1'}],
  49. 'user_order': 'user order'}
  50. self.assertEqual(expected_result_serialize, api_response.serialize())
  51. expected_result_str = "{'status': None, 'matched_synapses': [{'matched_order': 'user order', " \
  52. "'neuron_module_list': [], 'synapse_name': 'Synapse1'}], 'user_order': 'user order'}"
  53. self.assertEqual(expected_result_str, api_response.__str__())
  54. def test_Brain(self):
  55. # test get synapse by name
  56. expect_result = self.synapse1
  57. synapse_name = "Synapse1"
  58. self.assertEqual(self.brain_test1.get_synapse_by_name(synapse_name), expect_result)
  59. # test equals
  60. self.assertTrue(self.brain_test1.__eq__(self.brain_test3))
  61. # test not equals
  62. self.assertFalse(self.brain_test1.__eq__(self.brain_test2))
  63. def test_Dna(self):
  64. # create DNA object
  65. dna1 = Dna(name="dna1", module_type="neuron", author="kalliope",
  66. kalliope_supported_version="0.4.4", tags="test")
  67. dna2 = Dna(name="dna2", module_type="neuron", author="community",
  68. kalliope_supported_version="0.4.2", tags="other")
  69. # this dna is exactly the same as the first one
  70. dna3 = Dna(name="dna1", module_type="neuron", author="kalliope",
  71. kalliope_supported_version="0.4.4", tags="test")
  72. expected_result_serialize = {'kalliope_supported_version': '0.4.4', 'tags': 'test',
  73. 'type': 'neuron', 'name': 'dna1', 'author': 'kalliope'}
  74. expected_result_str = "{'kalliope_supported_version': '0.4.4', 'tags': 'test', 'type':" \
  75. " 'neuron', 'name': 'dna1', 'author': 'kalliope'}"
  76. self.assertEqual(expected_result_serialize, dna1.serialize())
  77. self.assertEqual(expected_result_str, dna1.__str__())
  78. self.assertTrue(dna1.__eq__(dna3))
  79. self.assertFalse(dna1.__eq__(dna2))
  80. def test_Event(self):
  81. event1 = Event(year=2017, month=12, day=31, week=53, day_of_week=2,
  82. hour=8, minute=30, second=0)
  83. event2 = Event(year=2018, month=11, day=30, week=25, day_of_week=4,
  84. hour=9, minute=40, second=0)
  85. # same as the event1
  86. event3 = Event(year=2017, month=12, day=31, week=53, day_of_week=2,
  87. hour=8, minute=30, second=0)
  88. expected_result_serialize = {'event': {'week': 53, 'second': 0, 'minute': 30, 'hour': 8,
  89. 'year': 2017, 'day': 31, 'day_of_week': 2, 'month': 12}}
  90. expected_result_str = "{'event': {'week': 53, 'second': 0, 'minute': 30, 'hour': 8, " \
  91. "'year': 2017, 'day': 31, 'day_of_week': 2, 'month': 12}}"
  92. self.assertEqual(expected_result_serialize, event1.serialize())
  93. self.assertEqual(expected_result_str, event1.__str__())
  94. self.assertTrue(event1.__eq__(event3))
  95. self.assertFalse(event1.__eq__(event2))
  96. def test_MatchedSynapse(self):
  97. user_order = "user order"
  98. matched_synapse1 = MatchedSynapse(matched_synapse=self.synapse1, matched_order=user_order)
  99. matched_synapse2 = MatchedSynapse(matched_synapse=self.synapse2, matched_order=user_order)
  100. matched_synapse3 = MatchedSynapse(matched_synapse=self.synapse1, matched_order=user_order)
  101. expected_result_serialize = {'matched_order': 'user order', 'neuron_module_list': [],
  102. 'synapse_name': 'Synapse1'}
  103. expected_result_str = "{'matched_order': 'user order', 'neuron_module_list': [], 'synapse_name': 'Synapse1'}"
  104. self.assertEqual(expected_result_serialize, matched_synapse1.serialize())
  105. self.assertEqual(expected_result_str, matched_synapse1.__str__())
  106. self.assertTrue(matched_synapse1.__eq__(matched_synapse3))
  107. self.assertFalse(matched_synapse1.__eq__(matched_synapse2))
  108. # test neuron parameter loader is called
  109. with mock.patch("kalliope.core.NeuronParameterLoader.get_parameters") as mock_get_parameters:
  110. MatchedSynapse(matched_synapse=self.synapse1, matched_order=user_order, user_order=user_order)
  111. mock_get_parameters.assert_called_once_with(synapse_order=user_order,
  112. user_order=user_order)
  113. mock_get_parameters.reset_mock()
  114. def test_Neuron(self):
  115. neuron1 = Neuron(name="test", parameters={"key1": "val1", "key2": "val2"})
  116. neuron2 = Neuron(name="test", parameters={"key3": "val3", "key4": "val4"})
  117. neuron3 = Neuron(name="test", parameters={"key1": "val1", "key2": "val2"})
  118. expected_result_serialize = {'name': 'test', 'parameters': {'key2': 'val2', 'key1': 'val1'}}
  119. expected_result_str = "{'name': 'test', 'parameters': {'key2': 'val2', 'key1': 'val1'}}"
  120. self.assertEqual(expected_result_serialize, neuron1.serialize())
  121. self.assertEqual(expected_result_str, neuron1.__str__())
  122. self.assertTrue(neuron1.__eq__(neuron3))
  123. self.assertFalse(neuron1.__eq__(neuron2))
  124. # test password
  125. neuron_name = "test"
  126. neuron_parameters = {
  127. "password": "my secret",
  128. "parameter": "test"
  129. }
  130. neuron = Neuron()
  131. neuron.name = neuron_name
  132. neuron.parameters = neuron_parameters
  133. expected_result = "{'name': 'test', 'parameters': {'password': '*****', 'parameter': 'test'}}"
  134. self.assertEqual(neuron.__str__(), expected_result)
  135. neuron_name = "test"
  136. neuron_parameters = {
  137. "password_parameter": "my secret",
  138. "parameter": "test"
  139. }
  140. neuron = Neuron()
  141. neuron.name = neuron_name
  142. neuron.parameters = neuron_parameters
  143. expected_result = "{'name': 'test', 'parameters': {'parameter': 'test', 'password_parameter': '*****'}}"
  144. self.assertEqual(neuron.__str__(), expected_result)
  145. def test_Order(self):
  146. order1 = Order(sentence="this is an order")
  147. order2 = Order(sentence="this is an other order")
  148. order3 = Order(sentence="this is an order")
  149. expected_result_serialize = {'order': 'this is an order'}
  150. expected_result_str = "{'order': 'this is an order'}"
  151. self.assertEqual(expected_result_serialize, order1.serialize())
  152. self.assertEqual(expected_result_str, order1.__str__())
  153. self.assertTrue(order1.__eq__(order3))
  154. self.assertFalse(order1.__eq__(order2))
  155. def test_Resources(self):
  156. resource1 = Resources(neuron_folder="/path/neuron", stt_folder="/path/stt",
  157. tts_folder="/path/tts", trigger_folder="/path/trigger")
  158. resource2 = Resources(neuron_folder="/other_path/neuron", stt_folder="/other_path/stt",
  159. tts_folder="/other_path/tts", trigger_folder="/other_path/trigger")
  160. resource3 = Resources(neuron_folder="/path/neuron", stt_folder="/path/stt",
  161. tts_folder="/path/tts", trigger_folder="/path/trigger")
  162. expected_result_serialize = {'tts_folder': '/path/tts', 'neuron_folder': '/path/neuron',
  163. 'stt_folder': '/path/stt', 'trigger_folder': '/path/trigger'}
  164. expected_result_str = "{'tts_folder': '/path/tts', 'neuron_folder': '/path/neuron', " \
  165. "'stt_folder': '/path/stt', 'trigger_folder': '/path/trigger'}"
  166. self.assertEqual(expected_result_serialize, resource1.serialize())
  167. self.assertEqual(expected_result_str, resource1.__str__())
  168. self.assertTrue(resource1.__eq__(resource3))
  169. self.assertFalse(resource1.__eq__(resource2))
  170. def test_RestAPI(self):
  171. rest_api1 = RestAPI(password_protected=True, login="admin", password="password", active=True,
  172. port=5000, allowed_cors_origin="*")
  173. rest_api2 = RestAPI(password_protected=False, active=False,
  174. port=5000, allowed_cors_origin=None)
  175. rest_api3 = RestAPI(password_protected=True, login="admin", password="password", active=True,
  176. port=5000, allowed_cors_origin="*")
  177. expected_result_serialize = {'password_protected': True,
  178. 'port': 5000,
  179. 'active': True,
  180. 'allowed_cors_origin': '*',
  181. 'password': 'password',
  182. 'login': 'admin'}
  183. expected_result_str = "{'password_protected': True, 'port': 5000, 'active': True, 'allowed_cors_origin': '*', " \
  184. "'password': 'password', 'login': 'admin'}"
  185. self.assertEqual(expected_result_serialize, rest_api1.serialize())
  186. self.assertEqual(expected_result_str, rest_api1.__str__())
  187. self.assertTrue(rest_api1.__eq__(rest_api3))
  188. self.assertFalse(rest_api1.__eq__(rest_api2))
  189. def test_Settings(self):
  190. with mock.patch('platform.machine', return_value='pumpkins'):
  191. rest_api1 = RestAPI(password_protected=True, login="admin", password="password", active=True,
  192. port=5000, allowed_cors_origin="*")
  193. setting1 = Settings(default_tts_name="pico2wav",
  194. default_stt_name="google",
  195. default_trigger_name="swoyboy",
  196. ttss=["ttts"],
  197. stts=["stts"],
  198. random_wake_up_answers=["yes"],
  199. random_wake_up_sounds=None,
  200. play_on_ready_notification=False,
  201. on_ready_answers=None,
  202. on_ready_sounds=None,
  203. triggers=["snowboy"],
  204. rest_api=rest_api1,
  205. cache_path="/tmp/kalliope",
  206. default_synapse="default_synapse",
  207. resources=None,
  208. variables={"key1": "val1"})
  209. setting2 = Settings(default_tts_name="accapela",
  210. default_stt_name="bing",
  211. default_trigger_name="swoyboy",
  212. ttss=["ttts"],
  213. stts=["stts"],
  214. random_wake_up_answers=["no"],
  215. random_wake_up_sounds=None,
  216. play_on_ready_notification=False,
  217. on_ready_answers=None,
  218. on_ready_sounds=None,
  219. triggers=["snowboy"],
  220. rest_api=rest_api1,
  221. cache_path="/tmp/kalliope_tmp",
  222. default_synapse="my_default_synapse",
  223. resources=None,
  224. variables={"key1": "val1"})
  225. setting3 = Settings(default_tts_name="pico2wav",
  226. default_stt_name="google",
  227. default_trigger_name="swoyboy",
  228. ttss=["ttts"],
  229. stts=["stts"],
  230. random_wake_up_answers=["yes"],
  231. random_wake_up_sounds=None,
  232. play_on_ready_notification=False,
  233. on_ready_answers=None,
  234. on_ready_sounds=None,
  235. triggers=["snowboy"],
  236. rest_api=rest_api1,
  237. cache_path="/tmp/kalliope",
  238. default_synapse="default_synapse",
  239. resources=None,
  240. variables={"key1": "val1"})
  241. expected_result_serialize = {'default_synapse': 'default_synapse', 'default_tts_name': 'pico2wav',
  242. 'rest_api': {'password_protected': True, 'port': 5000, 'active': True, 'allowed_cors_origin': '*',
  243. 'password': 'password', 'login': 'admin'}, 'play_on_ready_notification': False,
  244. 'default_stt_name': 'google', 'kalliope_version': '0.4.4b', 'random_wake_up_sounds': None,
  245. 'on_ready_answers': None, 'default_trigger_name': 'swoyboy', 'cache_path': '/tmp/kalliope',
  246. 'stts': ['stts'], 'machine': 'pumpkins', 'random_wake_up_answers': ['yes'], 'on_ready_sounds': None,
  247. 'ttss': ['ttts'], 'variables': {'key1': 'val1'}, 'resources': None, 'triggers': ['snowboy']}
  248. expected_result_str = "{'default_synapse': 'default_synapse', 'default_tts_name': 'pico2wav', 'rest_api': " \
  249. "{'password_protected': True, 'port': 5000, 'active': True, 'allowed_cors_origin': " \
  250. "'*', 'password': 'password', 'login': 'admin'}, 'play_on_ready_notification': " \
  251. "False, 'default_stt_name': 'google', 'kalliope_version': '0.4.4b', " \
  252. "'random_wake_up_sounds': None, 'on_ready_answers': None, 'default_trigger_name': " \
  253. "'swoyboy', 'cache_path': '/tmp/kalliope', 'stts': ['stts'], 'machine': 'pumpkins', " \
  254. "'random_wake_up_answers': ['yes'], 'on_ready_sounds': None, 'ttss': ['ttts'], " \
  255. "'variables': {'key1': 'val1'}, 'resources': None, 'triggers': ['snowboy']}"
  256. self.assertEqual(expected_result_serialize, setting1.serialize())
  257. self.assertEqual(expected_result_str, setting1.__str__())
  258. self.assertTrue(setting1.__eq__(setting3))
  259. self.assertFalse(setting1.__eq__(setting2))
  260. def test_Stt(self):
  261. stt1 = Stt(name="stt1", parameters={"key1": "val1"})
  262. stt2 = Stt(name="stt2", parameters={"key2": "val2"})
  263. stt3 = Stt(name="stt1", parameters={"key1": "val1"})
  264. expected_result_serialize = {'name': 'stt1', 'parameters': {'key1': 'val1'}}
  265. expected_result_str = "{'name': 'stt1', 'parameters': {'key1': 'val1'}}"
  266. self.assertEqual(expected_result_serialize, stt1.serialize())
  267. self.assertEqual(expected_result_str, stt1.__str__())
  268. self.assertTrue(stt1.__eq__(stt3))
  269. self.assertFalse(stt1.__eq__(stt2))
  270. def test_Synapse(self):
  271. neuron1 = Neuron(name='neurone1', parameters={'var1': 'val1'})
  272. neuron2 = Neuron(name='neurone2', parameters={'var2': 'val2'})
  273. neuron3 = Neuron(name='neurone3', parameters={'var3': 'val3'})
  274. neuron4 = Neuron(name='neurone4', parameters={'var4': 'val4'})
  275. signal1 = Order(sentence="this is the sentence")
  276. signal2 = Order(sentence="this is the second sentence")
  277. synapse1 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1])
  278. synapse2 = Synapse(name="Synapse2", neurons=[neuron3, neuron4], signals=[signal2])
  279. synapse3 = Synapse(name="Synapse1", neurons=[neuron1, neuron2], signals=[signal1])
  280. expected_result_serialize = {'signals': [{'order': 'this is the sentence'}],
  281. 'neurons': [{'name': 'neurone1',
  282. 'parameters': {'var1': 'val1'}},
  283. {'name': 'neurone2', 'parameters':
  284. {'var2': 'val2'}}],
  285. 'name': 'Synapse1'}
  286. expected_result_str = "{'signals': [{'order': 'this is the sentence'}], 'neurons': [{'name': 'neurone1', " \
  287. "'parameters': {'var1': 'val1'}}, {'name': 'neurone2', 'parameters': {'var2': " \
  288. "'val2'}}], 'name': 'Synapse1'}"
  289. self.assertEqual(expected_result_serialize, synapse1.serialize())
  290. self.assertEqual(expected_result_str, synapse1.__str__())
  291. self.assertTrue(synapse1.__eq__(synapse3))
  292. self.assertFalse(synapse1.__eq__(synapse2))
  293. def test_Trigger(self):
  294. trigger1 = Trigger(name="trigger1", parameters={"key1": "val1"})
  295. trigger2 = Trigger(name="trigger2", parameters={"key2": "val2"})
  296. trigger3 = Trigger(name="trigger1", parameters={"key1": "val1"})
  297. expected_result_serialize = {'name': 'trigger1', 'parameters': {'key1': 'val1'}}
  298. expected_result_str = "{'name': 'trigger1', 'parameters': {'key1': 'val1'}}"
  299. self.assertEqual(expected_result_serialize, trigger1.serialize())
  300. self.assertEqual(expected_result_str, trigger1.__str__())
  301. self.assertTrue(trigger1.__eq__(trigger3))
  302. self.assertFalse(trigger1.__eq__(trigger2))
  303. def test_Tts(self):
  304. tts1 = Tts(name="tts1", parameters={"key1": "val1"})
  305. tts2 = Tts(name="tts2", parameters={"key2": "val2"})
  306. tts3 = Tts(name="tts1", parameters={"key1": "val1"})
  307. expected_result_serialize = {'name': 'tts1', 'parameters': {'key1': 'val1'}}
  308. expected_result_str = "{'name': 'tts1', 'parameters': {'key1': 'val1'}}"
  309. self.assertEqual(expected_result_serialize, tts1.serialize())
  310. self.assertEqual(expected_result_str, tts1.__str__())
  311. self.assertTrue(tts1.__eq__(tts3))
  312. self.assertFalse(tts1.__eq__(tts2))