from core.Event import Event from core.ExecutionContext import ExecutionContext, ExecutionContextActions def test_i_can_create_execution_context(sheerka): event = Event("myEvent", "fake_userid") context1 = ExecutionContext("who", event, sheerka, ExecutionContextActions.TESTING, "value1", "my desc") assert context1.who == "who" assert context1.event == event assert context1.sheerka == sheerka assert context1.action == ExecutionContextActions.TESTING assert context1.action_context == "value1" assert context1.desc == "my desc" assert context1.id == 0 assert context1.long_id == f"{event.get_digest()}:{context1.id}" def test_i_can_push(sheerka): event = Event("test") context = ExecutionContext("who", event, sheerka, ExecutionContextActions.TESTING, "value") with context.push("pusher", ExecutionContextActions.PARSING, "action_context", "my desc") as sub_context: assert sub_context.who == "pusher" assert sub_context.event == event assert sub_context.sheerka == sheerka assert sub_context.action == ExecutionContextActions.PARSING assert sub_context.action_context == "action_context" assert sub_context.desc == "my desc" assert sub_context.id == context.id + 1 def test_i_can_increment_ids(sheerka): # The id of an execution context is linked to the event # If the event is the same, the id is incremented event = Event("TEST::myEvent", "fake_userid") context1 = ExecutionContext("who", event, sheerka, ExecutionContextActions.TESTING, "value") context2 = context1.push("who1", ExecutionContextActions.TESTING, "value1") context3 = context2.push("who2", ExecutionContextActions.TESTING, "value2") context4 = context1.push("who1", ExecutionContextActions.TESTING, "value3") context5 = ExecutionContext("who", event, sheerka, ExecutionContextActions.TESTING, "value4") assert context1.id == 0 assert context2.id == 1 assert context3.id == 2 assert context4.id == 3 assert context5.id == 4 event2 = Event("TEST::myEvent2", "fake_userid") context6 = ExecutionContext("who", event2, sheerka, ExecutionContextActions.TESTING, "value") assert context6.id == 0 def test_i_can_manage_global_hints(context): context2 = context.push("pusher", ExecutionContextActions.TESTING, None) context3 = context2.push("pusher", ExecutionContextActions.TESTING, None) context4 = context3.push("pusher", ExecutionContextActions.TESTING, None) context5 = context.push("pusher", ExecutionContextActions.TESTING, None) context.global_hints.add("new_hint") assert context.global_hints == {"new_hint"} assert context2.global_hints == {"new_hint"} assert context3.global_hints == {"new_hint"} assert context4.global_hints == {"new_hint"} assert context5.global_hints == {"new_hint"} context4.global_hints.add("another_hint") assert context.global_hints == {"new_hint", "another_hint"} assert context2.global_hints == {"new_hint", "another_hint"} assert context3.global_hints == {"new_hint", "another_hint"} assert context4.global_hints == {"new_hint", "another_hint"} assert context5.global_hints == {"new_hint", "another_hint"} def test_i_can_manage_protected_hint(context): # Note that protected hint only works if the hint is added BEFORE the creation of the child context.protected_hints.add("new_hint") context2 = context.push("pusher", ExecutionContextActions.TESTING, None) context3 = context2.push("pusher", ExecutionContextActions.TESTING, None) context3.protected_hints.add("another_hint") context4 = context3.push("pusher", ExecutionContextActions.TESTING, None) context5 = context.push("pusher", ExecutionContextActions.TESTING, None) assert context.protected_hints == {"new_hint"} assert context2.protected_hints == {"new_hint"} assert context3.protected_hints == {"new_hint", "another_hint"} assert context4.protected_hints == {"new_hint", "another_hint"} assert context5.protected_hints == {"new_hint"} def test_i_can_manage_private_hints(context): context.private_hints.add("new_hint") context2 = context.push("pusher", ExecutionContextActions.TESTING, None) context3 = context2.push("pusher", ExecutionContextActions.TESTING, None) context3.private_hints.add("another_hint") context4 = context3.push("pusher", ExecutionContextActions.TESTING, None) context5 = context.push("pusher", ExecutionContextActions.TESTING, None) assert context.private_hints == {"new_hint"} assert context2.private_hints == set() assert context3.private_hints == {"another_hint"} assert context4.private_hints == set() assert context5.private_hints == set() def test_i_can_keep_track_of_children(context): context2 = context.push("pusher", ExecutionContextActions.TESTING, None) context3 = context.push("pusher", ExecutionContextActions.TESTING, None) context4 = context2.push("pusher2", ExecutionContextActions.TESTING, None) assert len(context._children) == 2 assert len(context2._children) == 1 assert len(context3._children) == 0 assert len(context4._children) == 0 def test_i_can_get_children(context): context1 = context.push("child 1", ExecutionContextActions.TESTING, None) context2 = context.push("child 2", ExecutionContextActions.TESTING, None) context3 = context.push("child 3", ExecutionContextActions.TESTING, None) context21 = context2.push("child 21", ExecutionContextActions.TESTING, None) context22 = context2.push("child 22", ExecutionContextActions.TESTING, None) context211 = context21.push("child 211", ExecutionContextActions.TESTING, None) context31 = context3.push("child 31", ExecutionContextActions.TESTING, None) assert list(context1.get_children()) == [] assert list(context.get_children()) == [ context1, context2, context21, context211, context22, context3, context31 ] assert list(context.get_children(level=1)) == [ context1, context2, context3 ] assert list(context.get_children(level=2)) == [ context1, context2, context21, context22, context3, context31, ]