tutor/tests/core/hooks/test_actions.py

60 lines
1.8 KiB
Python

import typing as t
import unittest
from tutor.core.hooks import actions, contexts
class PluginActionsTests(unittest.TestCase):
def setUp(self) -> None:
self.side_effect_int = 0
def tearDown(self) -> None:
super().tearDown()
actions.clear_all(context="tests")
def run(self, result: t.Any = None) -> t.Any:
with contexts.enter("tests"):
return super().run(result=result)
def test_do(self) -> None:
action: actions.Action[int] = actions.get("test-action")
@action.add()
def _test_action_1(increment: int) -> None:
self.side_effect_int += increment
@action.add()
def _test_action_2(increment: int) -> None:
self.side_effect_int += increment * 2
action.do(1)
self.assertEqual(3, self.side_effect_int)
def test_priority(self) -> None:
@actions.add("test-action", priority=2)
def _test_action_1() -> None:
self.side_effect_int += 4
@actions.add("test-action", priority=1)
def _test_action_2() -> None:
self.side_effect_int = self.side_effect_int // 2
# Action 2 must be performed before action 1
self.side_effect_int = 4
actions.do("test-action")
self.assertEqual(6, self.side_effect_int)
def test_equal_priority(self) -> None:
@actions.add("test-action", priority=2)
def _test_action_1() -> None:
self.side_effect_int += 4
@actions.add("test-action", priority=2)
def _test_action_2() -> None:
self.side_effect_int = self.side_effect_int // 2
# Action 2 must be performed after action 1
self.side_effect_int = 4
actions.do("test-action")
self.assertEqual(4, self.side_effect_int)