refactor: improve startup and sync performance
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import asyncio
|
||||
import unittest
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import AsyncMock, patch
|
||||
@@ -46,6 +47,65 @@ class PanelApiServiceLoggingTests(unittest.IsolatedAsyncioTestCase):
|
||||
|
||||
self.assertTrue(service._request.await_args.kwargs["log_full_response"])
|
||||
|
||||
async def test_get_user_by_uuid_uses_short_ttl_cache_and_update_invalidates(self):
|
||||
service = self._make_service()
|
||||
service._request = AsyncMock(return_value={"response": {"uuid": "user-uuid"}})
|
||||
|
||||
first = await service.get_user_by_uuid("user-uuid")
|
||||
second = await service.get_user_by_uuid("user-uuid")
|
||||
|
||||
self.assertEqual(first, {"uuid": "user-uuid"})
|
||||
self.assertEqual(second, {"uuid": "user-uuid"})
|
||||
self.assertEqual(service._request.await_count, 1)
|
||||
|
||||
await service.update_user_details_on_panel("user-uuid", {"description": "updated"})
|
||||
await service.get_user_by_uuid("user-uuid")
|
||||
|
||||
self.assertEqual(service._request.await_count, 3)
|
||||
|
||||
async def test_get_user_devices_uses_short_ttl_cache_and_disconnect_invalidates(self):
|
||||
service = self._make_service()
|
||||
service._request = AsyncMock(return_value={"response": [{"hwid": "device-1"}]})
|
||||
|
||||
first = await service.get_user_devices("user-uuid")
|
||||
second = await service.get_user_devices("user-uuid")
|
||||
|
||||
self.assertEqual(first, [{"hwid": "device-1"}])
|
||||
self.assertEqual(second, [{"hwid": "device-1"}])
|
||||
self.assertEqual(service._request.await_count, 1)
|
||||
|
||||
await service.disconnect_device("user-uuid", "device-1")
|
||||
await service.get_user_devices("user-uuid")
|
||||
|
||||
self.assertEqual(service._request.await_count, 3)
|
||||
|
||||
async def test_get_all_panel_users_uses_singleflight_cache_and_update_invalidates(self):
|
||||
service = self._make_service()
|
||||
get_calls = 0
|
||||
|
||||
async def fake_request(method, endpoint, **kwargs):
|
||||
nonlocal get_calls
|
||||
if method == "GET":
|
||||
get_calls += 1
|
||||
return {"response": {"users": [{"uuid": "user-uuid"}]}}
|
||||
return {"response": {"uuid": "user-uuid"}}
|
||||
|
||||
service._request = AsyncMock(side_effect=fake_request)
|
||||
|
||||
first, second = await asyncio.gather(
|
||||
service.get_all_panel_users(),
|
||||
service.get_all_panel_users(),
|
||||
)
|
||||
|
||||
self.assertEqual(first, [{"uuid": "user-uuid"}])
|
||||
self.assertEqual(second, [{"uuid": "user-uuid"}])
|
||||
self.assertEqual(get_calls, 1)
|
||||
|
||||
await service.update_user_details_on_panel("user-uuid", {"description": "updated"})
|
||||
await service.get_all_panel_users()
|
||||
|
||||
self.assertEqual(get_calls, 2)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user