test_event.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import pytest
  2. from pynecone import event, utils
  3. from pynecone.event import Event, EventHandler, EventSpec
  4. from pynecone.var import Var
  5. def make_var(value) -> Var:
  6. """Make a variable.
  7. Args:
  8. value: The value of the var.
  9. Returns:
  10. The var.
  11. """
  12. var = Var.create(value)
  13. assert var is not None
  14. return var
  15. def test_create_event():
  16. """Test creating an event."""
  17. event = Event(token="token", name="state.do_thing", payload={"arg": "value"})
  18. assert event.token == "token"
  19. assert event.name == "state.do_thing"
  20. assert event.payload == {"arg": "value"}
  21. def test_call_event_handler():
  22. """Test that calling an event handler creates an event spec."""
  23. def test_fn():
  24. pass
  25. def test_fn_with_args(_, arg1, arg2):
  26. pass
  27. handler = EventHandler(fn=test_fn)
  28. event_spec = handler()
  29. assert event_spec.handler == handler
  30. assert event_spec.local_args == ()
  31. assert event_spec.args == ()
  32. handler = EventHandler(fn=test_fn_with_args)
  33. event_spec = handler(make_var("first"), make_var("second"))
  34. assert event_spec.handler == handler
  35. assert event_spec.local_args == ()
  36. assert event_spec.args == (("arg1", "first"), ("arg2", "second"))
  37. first, second = 123, "456"
  38. handler = EventHandler(fn=test_fn_with_args)
  39. event_spec = handler(first, second) # type: ignore
  40. assert event_spec.handler == handler
  41. assert event_spec.local_args == ()
  42. assert event_spec.args == (
  43. ("arg1", utils.json_dumps(first)),
  44. ("arg2", utils.json_dumps(second)),
  45. )
  46. handler = EventHandler(fn=test_fn_with_args)
  47. with pytest.raises(TypeError):
  48. handler(test_fn) # type: ignore
  49. def test_event_redirect():
  50. """Test the event redirect function."""
  51. spec = event.redirect("/path")
  52. assert isinstance(spec, EventSpec)
  53. assert spec.handler.fn.__qualname__ == "_redirect"
  54. assert spec.args == (("path", "/path"),)
  55. def test_event_console_log():
  56. """Test the event console log function."""
  57. spec = event.console_log("message")
  58. assert isinstance(spec, EventSpec)
  59. assert spec.handler.fn.__qualname__ == "_console"
  60. assert spec.args == (("message", "message"),)
  61. def test_event_window_alert():
  62. """Test the event window alert function."""
  63. spec = event.window_alert("message")
  64. assert isinstance(spec, EventSpec)
  65. assert spec.handler.fn.__qualname__ == "_alert"
  66. assert spec.args == (("message", "message"),)