42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import json
|
|
from types import SimpleNamespace
|
|
from unittest import IsolatedAsyncioTestCase
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
import bot.app.web.subscription_webapp # noqa: F401
|
|
from bot.app.web.webapp import account as account_module
|
|
|
|
|
|
class WebAppProfileCacheTests(IsolatedAsyncioTestCase):
|
|
async def test_me_route_fresh_bypasses_cache_and_invalidates_payload(self):
|
|
settings = SimpleNamespace(WEBAPP_ME_CACHE_TTL_SECONDS=60)
|
|
request = SimpleNamespace(app={"settings": settings}, query={"fresh": "1"})
|
|
|
|
with (
|
|
patch.object(account_module, "_require_user_id", return_value=42),
|
|
patch.object(
|
|
account_module,
|
|
"_invalidate_webapp_user_caches",
|
|
AsyncMock(),
|
|
) as invalidate_cache,
|
|
patch.object(
|
|
account_module,
|
|
"_build_user_payload",
|
|
AsyncMock(return_value={"user": {"id": 42}, "subscription": {"active": True}}),
|
|
) as build_payload,
|
|
patch.object(
|
|
account_module,
|
|
"webapp_cached_user_payload",
|
|
AsyncMock(),
|
|
) as cached_payload,
|
|
):
|
|
response = await account_module.me_route(request)
|
|
|
|
invalidate_cache.assert_awaited_once_with(settings, 42)
|
|
build_payload.assert_awaited_once_with(request, 42)
|
|
cached_payload.assert_not_awaited()
|
|
self.assertEqual(
|
|
json.loads(response.text),
|
|
{"ok": True, "user": {"id": 42}, "subscription": {"active": True}},
|
|
)
|