Files
goose/packages/exchange/tests/test_observer.py
Alistair Gray d30b524f45 feat: add observability plugin system (#227)
Co-authored-by: Michael Neale <michael.neale@gmail.com>
Co-authored-by: Lifei Zhou <lifei@squareup.com>
Co-authored-by: Alice Hau <ahau@squareup.com>
2024-11-12 17:40:27 -08:00

62 lines
1.5 KiB
Python

from exchange.observers import ObserverManager, observe_wrapper
from exchange.observers.base import Observer
class MockObserver(Observer):
def __init__(self):
self.initialized = False
self.args = None
self.kwargs = None
self.finalized = False
def initialize(self):
pass
def observe_wrapper(self, *args, **kwargs):
def wrapper(func):
self.args = args
self.kwargs = kwargs
return func
return wrapper
def finalize(self):
pass
def test_wrapper_is_invoked():
manager = ObserverManager.get_instance()
mock_observer = MockObserver()
manager.initialize(True, [mock_observer])
@observe_wrapper("arg0", arg1="arg2")
def wrapped(x: int, y: int) -> int:
return x + y
# code in decorator hasn't run yet
assert mock_observer.args is None
assert mock_observer.kwargs is None
ret_val = wrapped(2, 3)
assert ret_val == 5
# decorator has been run since `wrapped` was called
assert mock_observer.args == ("arg0",)
assert mock_observer.kwargs == {"arg1": "arg2"}
def test_multiple_wrappers():
manager = ObserverManager.get_instance()
mock_observer_1 = MockObserver()
mock_observer_2 = MockObserver()
manager.initialize(True, [mock_observer_1, mock_observer_2])
@observe_wrapper("arg0")
def wrapped(x: int, y: int) -> int:
return x + y
wrapped(2, 3)
assert mock_observer_1.args == ("arg0",)
assert mock_observer_2.args == ("arg0",)