test_event.py 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. # Copyright 2021-2025 Avaiga Private Limited
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  4. # the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  9. # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  10. # specific language governing permissions and limitations under the License.
  11. import pytest
  12. from taipy.core.common.frequency import Frequency
  13. from taipy.core.exceptions.exceptions import InvalidEventAttributeName, InvalidEventOperation
  14. from taipy.core.notification.event import Event, EventEntityType, EventOperation, _make_event
  15. from taipy.core.submission.submission import Submission
  16. def test_event_creation_cycle():
  17. event_1 = Event(
  18. entity_type=EventEntityType.CYCLE,
  19. operation=EventOperation.CREATION,
  20. entity_id="cycle_id",
  21. )
  22. assert event_1.creation_date is not None
  23. assert event_1.entity_type == EventEntityType.CYCLE
  24. assert event_1.entity_id == "cycle_id"
  25. assert event_1.operation == EventOperation.CREATION
  26. assert event_1.attribute_name is None
  27. event_2 = Event(
  28. entity_type=EventEntityType.CYCLE,
  29. operation=EventOperation.UPDATE,
  30. entity_id="cycle_id",
  31. attribute_name="frequency",
  32. attribute_value=Frequency.DAILY,
  33. )
  34. assert event_2.creation_date is not None
  35. assert event_2.entity_type == EventEntityType.CYCLE
  36. assert event_2.entity_id == "cycle_id"
  37. assert event_2.operation == EventOperation.UPDATE
  38. assert event_2.attribute_name == "frequency"
  39. event_3 = Event(entity_type=EventEntityType.CYCLE, entity_id="cycle_id", operation=EventOperation.DELETION)
  40. assert event_3.creation_date is not None
  41. assert event_3.entity_type == EventEntityType.CYCLE
  42. assert event_3.entity_id == "cycle_id"
  43. assert event_3.operation == EventOperation.DELETION
  44. assert event_3.attribute_name is None
  45. with pytest.raises(InvalidEventAttributeName):
  46. _ = Event(
  47. entity_type=EventEntityType.CYCLE,
  48. operation=EventOperation.CREATION,
  49. entity_id="cycle_id",
  50. attribute_name="frequency",
  51. )
  52. with pytest.raises(InvalidEventAttributeName):
  53. _ = Event(EventEntityType.CYCLE, EventOperation.DELETION, entity_id="cycle_id", attribute_name="frequency")
  54. with pytest.raises(InvalidEventOperation):
  55. _ = Event(
  56. entity_type=EventEntityType.CYCLE,
  57. operation=EventOperation.SUBMISSION,
  58. entity_id="cycle_id",
  59. )
  60. with pytest.raises(InvalidEventOperation):
  61. _ = Event(
  62. entity_type=EventEntityType.CYCLE,
  63. operation=EventOperation.SUBMISSION,
  64. entity_id="cycle_id",
  65. attribute_name="frequency",
  66. )
  67. def test_event_creation_scenario():
  68. event_1 = Event(entity_type=EventEntityType.SCENARIO, entity_id="scenario_id", operation=EventOperation.CREATION)
  69. assert event_1.creation_date is not None
  70. assert event_1.entity_type == EventEntityType.SCENARIO
  71. assert event_1.entity_id == "scenario_id"
  72. assert event_1.operation == EventOperation.CREATION
  73. assert event_1.attribute_name is None
  74. event_2 = Event(
  75. entity_type=EventEntityType.SCENARIO,
  76. entity_id="scenario_id",
  77. operation=EventOperation.UPDATE,
  78. attribute_name="is_primary",
  79. attribute_value=True,
  80. )
  81. assert event_2.creation_date is not None
  82. assert event_2.entity_type == EventEntityType.SCENARIO
  83. assert event_2.entity_id == "scenario_id"
  84. assert event_2.operation == EventOperation.UPDATE
  85. assert event_2.attribute_name == "is_primary"
  86. assert event_2.attribute_value is True
  87. event_3 = Event(entity_type=EventEntityType.SCENARIO, entity_id="scenario_id", operation=EventOperation.DELETION)
  88. assert event_3.creation_date is not None
  89. assert event_3.entity_type == EventEntityType.SCENARIO
  90. assert event_3.entity_id == "scenario_id"
  91. assert event_3.operation == EventOperation.DELETION
  92. assert event_3.attribute_name is None
  93. event_4 = Event(entity_type=EventEntityType.SCENARIO, entity_id="scenario_id", operation=EventOperation.SUBMISSION)
  94. assert event_4.creation_date is not None
  95. assert event_4.entity_type == EventEntityType.SCENARIO
  96. assert event_4.entity_id == "scenario_id"
  97. assert event_4.operation == EventOperation.SUBMISSION
  98. assert event_4.attribute_name is None
  99. with pytest.raises(InvalidEventAttributeName):
  100. _ = Event(
  101. entity_type=EventEntityType.SCENARIO,
  102. entity_id="scenario_id",
  103. operation=EventOperation.CREATION,
  104. attribute_name="is_primary",
  105. )
  106. with pytest.raises(InvalidEventAttributeName):
  107. _ = Event(
  108. entity_type=EventEntityType.SCENARIO,
  109. entity_id="scenario_id",
  110. operation=EventOperation.DELETION,
  111. attribute_name="is_primary",
  112. )
  113. with pytest.raises(InvalidEventAttributeName):
  114. _ = Event(
  115. entity_type=EventEntityType.SCENARIO,
  116. entity_id="scenario_id",
  117. operation=EventOperation.SUBMISSION,
  118. attribute_name="is_primary",
  119. )
  120. def test_event_creation_sequence():
  121. event_1 = Event(entity_type=EventEntityType.SEQUENCE, entity_id="sequence_id", operation=EventOperation.CREATION)
  122. assert event_1.creation_date is not None
  123. assert event_1.entity_type == EventEntityType.SEQUENCE
  124. assert event_1.entity_id == "sequence_id"
  125. assert event_1.operation == EventOperation.CREATION
  126. assert event_1.attribute_name is None
  127. event_2 = Event(
  128. entity_type=EventEntityType.SEQUENCE,
  129. entity_id="sequence_id",
  130. operation=EventOperation.UPDATE,
  131. attribute_name="subscribers",
  132. attribute_value=object(),
  133. )
  134. assert event_2.creation_date is not None
  135. assert event_2.entity_type == EventEntityType.SEQUENCE
  136. assert event_2.entity_id == "sequence_id"
  137. assert event_2.operation == EventOperation.UPDATE
  138. assert event_2.attribute_name == "subscribers"
  139. event_3 = Event(entity_type=EventEntityType.SEQUENCE, entity_id="sequence_id", operation=EventOperation.DELETION)
  140. assert event_3.creation_date is not None
  141. assert event_3.entity_type == EventEntityType.SEQUENCE
  142. assert event_3.entity_id == "sequence_id"
  143. assert event_3.operation == EventOperation.DELETION
  144. assert event_3.attribute_name is None
  145. event_4 = Event(entity_type=EventEntityType.SEQUENCE, entity_id="sequence_id", operation=EventOperation.SUBMISSION)
  146. assert event_4.creation_date is not None
  147. assert event_4.entity_type == EventEntityType.SEQUENCE
  148. assert event_4.entity_id == "sequence_id"
  149. assert event_4.operation == EventOperation.SUBMISSION
  150. assert event_4.attribute_name is None
  151. with pytest.raises(InvalidEventAttributeName):
  152. _ = Event(
  153. entity_type=EventEntityType.SEQUENCE,
  154. entity_id="sequence_id",
  155. operation=EventOperation.CREATION,
  156. attribute_name="subscribers",
  157. )
  158. with pytest.raises(InvalidEventAttributeName):
  159. _ = Event(
  160. entity_type=EventEntityType.SEQUENCE,
  161. entity_id="sequence_id",
  162. operation=EventOperation.DELETION,
  163. attribute_name="subscribers",
  164. )
  165. with pytest.raises(InvalidEventAttributeName):
  166. _ = Event(
  167. entity_type=EventEntityType.SEQUENCE,
  168. entity_id="sequence_id",
  169. operation=EventOperation.SUBMISSION,
  170. attribute_name="subscribers",
  171. )
  172. def test_event_creation_task():
  173. event_1 = Event(entity_type=EventEntityType.TASK, entity_id="task_id", operation=EventOperation.CREATION)
  174. assert event_1.creation_date is not None
  175. assert event_1.entity_type == EventEntityType.TASK
  176. assert event_1.entity_id == "task_id"
  177. assert event_1.operation == EventOperation.CREATION
  178. assert event_1.attribute_name is None
  179. event_2 = Event(
  180. entity_type=EventEntityType.TASK,
  181. entity_id="task_id",
  182. operation=EventOperation.UPDATE,
  183. attribute_name="function",
  184. )
  185. assert event_2.creation_date is not None
  186. assert event_2.entity_type == EventEntityType.TASK
  187. assert event_2.entity_id == "task_id"
  188. assert event_2.operation == EventOperation.UPDATE
  189. assert event_2.attribute_name == "function"
  190. event_3 = Event(entity_type=EventEntityType.TASK, entity_id="task_id", operation=EventOperation.DELETION)
  191. assert event_3.creation_date is not None
  192. assert event_3.entity_type == EventEntityType.TASK
  193. assert event_3.entity_id == "task_id"
  194. assert event_3.operation == EventOperation.DELETION
  195. assert event_3.attribute_name is None
  196. event_4 = Event(entity_type=EventEntityType.TASK, entity_id="task_id", operation=EventOperation.SUBMISSION)
  197. assert event_4.creation_date is not None
  198. assert event_4.entity_type == EventEntityType.TASK
  199. assert event_4.entity_id == "task_id"
  200. assert event_4.operation == EventOperation.SUBMISSION
  201. assert event_4.attribute_name is None
  202. with pytest.raises(InvalidEventAttributeName):
  203. _ = Event(
  204. entity_type=EventEntityType.TASK,
  205. entity_id="task_id",
  206. operation=EventOperation.CREATION,
  207. attribute_name="function",
  208. )
  209. with pytest.raises(InvalidEventAttributeName):
  210. _ = Event(
  211. entity_type=EventEntityType.TASK,
  212. entity_id="task_id",
  213. operation=EventOperation.DELETION,
  214. attribute_name="function",
  215. )
  216. with pytest.raises(InvalidEventAttributeName):
  217. _ = Event(
  218. entity_type=EventEntityType.TASK,
  219. entity_id="task_id",
  220. operation=EventOperation.SUBMISSION,
  221. attribute_name="function",
  222. )
  223. def test_event_creation_datanode():
  224. event_1 = Event(entity_type=EventEntityType.DATA_NODE, entity_id="dn_id", operation=EventOperation.CREATION)
  225. assert event_1.creation_date is not None
  226. assert event_1.entity_type == EventEntityType.DATA_NODE
  227. assert event_1.entity_id == "dn_id"
  228. assert event_1.operation == EventOperation.CREATION
  229. assert event_1.attribute_name is None
  230. event_2 = Event(
  231. entity_type=EventEntityType.DATA_NODE,
  232. entity_id="dn_id",
  233. operation=EventOperation.UPDATE,
  234. attribute_name="properties",
  235. )
  236. assert event_2.creation_date is not None
  237. assert event_2.entity_type == EventEntityType.DATA_NODE
  238. assert event_2.entity_id == "dn_id"
  239. assert event_2.operation == EventOperation.UPDATE
  240. assert event_2.attribute_name == "properties"
  241. event_3 = Event(entity_type=EventEntityType.DATA_NODE, entity_id="dn_id", operation=EventOperation.DELETION)
  242. assert event_3.creation_date is not None
  243. assert event_3.entity_type == EventEntityType.DATA_NODE
  244. assert event_3.entity_id == "dn_id"
  245. assert event_3.operation == EventOperation.DELETION
  246. assert event_3.attribute_name is None
  247. with pytest.raises(InvalidEventAttributeName):
  248. _ = Event(
  249. entity_type=EventEntityType.DATA_NODE,
  250. entity_id="dn_id",
  251. operation=EventOperation.CREATION,
  252. attribute_name="properties",
  253. )
  254. with pytest.raises(InvalidEventAttributeName):
  255. _ = Event(
  256. entity_type=EventEntityType.DATA_NODE,
  257. entity_id="dn_id",
  258. operation=EventOperation.DELETION,
  259. attribute_name="properties",
  260. )
  261. with pytest.raises(InvalidEventOperation):
  262. _ = Event(entity_type=EventEntityType.DATA_NODE, entity_id="dn_id", operation=EventOperation.SUBMISSION)
  263. with pytest.raises(InvalidEventOperation):
  264. _ = Event(
  265. entity_type=EventEntityType.DATA_NODE,
  266. entity_id="dn_id",
  267. operation=EventOperation.SUBMISSION,
  268. attribute_name="properties",
  269. )
  270. def test_event_creation_job():
  271. event_1 = Event(entity_type=EventEntityType.JOB, entity_id="job_id", operation=EventOperation.CREATION)
  272. assert event_1.creation_date is not None
  273. assert event_1.entity_type == EventEntityType.JOB
  274. assert event_1.entity_id == "job_id"
  275. assert event_1.operation == EventOperation.CREATION
  276. assert event_1.attribute_name is None
  277. event_2 = Event(
  278. entity_type=EventEntityType.JOB, entity_id="job_id", operation=EventOperation.UPDATE, attribute_name="force"
  279. )
  280. assert event_2.creation_date is not None
  281. assert event_2.entity_type == EventEntityType.JOB
  282. assert event_2.entity_id == "job_id"
  283. assert event_2.operation == EventOperation.UPDATE
  284. assert event_2.attribute_name == "force"
  285. event_3 = Event(entity_type=EventEntityType.JOB, entity_id="job_id", operation=EventOperation.DELETION)
  286. assert event_3.creation_date is not None
  287. assert event_3.entity_type == EventEntityType.JOB
  288. assert event_3.entity_id == "job_id"
  289. assert event_3.operation == EventOperation.DELETION
  290. assert event_3.attribute_name is None
  291. with pytest.raises(InvalidEventAttributeName):
  292. _ = Event(
  293. entity_type=EventEntityType.JOB,
  294. entity_id="job_id",
  295. operation=EventOperation.CREATION,
  296. attribute_name="force",
  297. )
  298. with pytest.raises(InvalidEventAttributeName):
  299. _ = Event(
  300. entity_type=EventEntityType.JOB,
  301. entity_id="job_id",
  302. operation=EventOperation.DELETION,
  303. attribute_name="force",
  304. )
  305. with pytest.raises(InvalidEventOperation):
  306. _ = Event(entity_type=EventEntityType.JOB, entity_id="job_id", operation=EventOperation.SUBMISSION)
  307. with pytest.raises(InvalidEventOperation):
  308. _ = Event(
  309. entity_type=EventEntityType.JOB,
  310. entity_id="job_id",
  311. operation=EventOperation.SUBMISSION,
  312. attribute_name="force",
  313. )
  314. def test_event_creation_submission():
  315. event_1 = Event(
  316. entity_type=EventEntityType.SUBMISSION, entity_id="submission_id", operation=EventOperation.CREATION
  317. )
  318. assert event_1.creation_date is not None
  319. assert event_1.entity_type == EventEntityType.SUBMISSION
  320. assert event_1.entity_id == "submission_id"
  321. assert event_1.operation == EventOperation.CREATION
  322. assert event_1.attribute_name is None
  323. with pytest.raises(InvalidEventAttributeName):
  324. _ = Event(
  325. entity_type=EventEntityType.SUBMISSION,
  326. entity_id="submission_id",
  327. operation=EventOperation.DELETION,
  328. attribute_name="force",
  329. )
  330. with pytest.raises(InvalidEventOperation):
  331. _ = Event(
  332. entity_type=EventEntityType.SUBMISSION, entity_id="submission_id", operation=EventOperation.SUBMISSION
  333. )
  334. def test_make_event_from_submission():
  335. submission = Submission("submission_id", entity_type="task", entity_config_id="task_config_id_1")
  336. event = _make_event(submission, EventOperation.CREATION)
  337. assert event.operation == EventOperation.CREATION
  338. assert event.entity_id
  339. assert event.entity_type == EventEntityType.SUBMISSION
  340. assert event.metadata["origin_entity_id"] == "submission_id"
  341. assert event.metadata["origin_entity_type"] == "task"
  342. assert event.metadata["origin_entity_config_id"] == "task_config_id_1"