test_models.py 18 KB

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