test_awaitable_response.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import asyncio
  2. import pytest
  3. from nicegui import core
  4. from nicegui.awaitable_response import AwaitableResponse, NullResponse
  5. async def test_awaitable_response():
  6. core.loop = asyncio.get_event_loop()
  7. actions = []
  8. def do_something() -> AwaitableResponse:
  9. def fire_and_forget():
  10. actions.append('fire_and_forget')
  11. async def wait_for_result() -> str:
  12. actions.append('wait_for_result')
  13. return 'result'
  14. return AwaitableResponse(fire_and_forget, wait_for_result)
  15. actions.clear()
  16. do_something()
  17. await asyncio.sleep(0.1)
  18. assert actions == ['fire_and_forget']
  19. actions.clear()
  20. result = await do_something()
  21. assert result == 'result'
  22. assert actions == ['wait_for_result']
  23. actions.clear()
  24. result = do_something()
  25. await asyncio.sleep(0.1)
  26. with pytest.raises(RuntimeError, match='AwaitableResponse must be awaited immediately after creation or not at all'):
  27. await result
  28. assert actions == ['fire_and_forget']
  29. async def test_null_response():
  30. NullResponse()
  31. core.loop = asyncio.get_event_loop()
  32. await NullResponse()