import pytest from flask import g from atlas_um.analytics import Collector from atlas_um.auth import models class TestCollector: FLASK_ENV = "test_env" @pytest.fixture def app_config(self): def inner(app): app.config["ENV"] = self.FLASK_ENV return inner def test_log(self, mocker, app, faker): event_name = faker.pystr() event_kwargs = {"test_arg": "test_value"} mocked_processor = mocker.MagicMock() collector = Collector() collector.attach_processor(mocked_processor) test_user = models.User(faker.pystr(), []) with app.test_request_context(): g.user = test_user collector.log(event_name, **event_kwargs) assert mocked_processor.process.call_args_list == [ mocker.call( event_name, {"env": self.FLASK_ENV, "user_id": test_user.id}, **event_kwargs, ) ] def test_track(self, mocker, app, faker): event_name = faker.pystr() event_kwargs = {"test_arg": "test_value"} mocked_func = mocker.MagicMock() mocker.spy(Collector, "log") collector = Collector() decorated = collector.track( event_name, test_arg=lambda kwargs: kwargs["test_arg"] )(mocked_func) decorated(**event_kwargs) assert collector.log.call_args_list == [ mocker.call(collector, event_name, **event_kwargs) ]