123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- from typing import List
- import pytest
- from pynecone.app import App
- from pynecone.middleware.hydrate_middleware import HydrateMiddleware
- from pynecone.state import State
- class TestState(State):
- """A test state with no return in handler."""
- num: int = 0
- def test_handler(self):
- """Test handler."""
- self.num += 1
- class TestState2(State):
- """A test state with return in handler."""
- num: int = 0
- name: str
- def test_handler(self):
- """Test handler that calls another handler.
- Returns:
- Chain of EventHandlers
- """
- self.num += 1
- return self.change_name
- def change_name(self):
- """Test handler to change name."""
- self.name = "random"
- class TestState3(State):
- """A test state with async handler."""
- num: int = 0
- async def test_handler(self):
- """Test handler."""
- self.num += 1
- @pytest.mark.asyncio
- @pytest.mark.parametrize(
- "state, expected, event_fixture",
- [
- (TestState, {"test_state": {"num": 1}}, "event1"),
- (TestState2, {"test_state2": {"num": 1}}, "event2"),
- (TestState3, {"test_state3": {"num": 1}}, "event3"),
- ],
- )
- async def test_preprocess(state, request, event_fixture, expected):
- """Test that a state hydrate event is processed correctly.
- Args:
- state: state to process event
- request: pytest fixture request
- event_fixture: The event fixture(an Event)
- expected: expected delta
- """
- app = App(state=state, load_events={"index": state.test_handler})
- hydrate_middleware = HydrateMiddleware()
- result = await hydrate_middleware.preprocess(
- app=app, event=request.getfixturevalue(event_fixture), state=state()
- )
- assert isinstance(result, List)
- assert result[0].delta == expected
- @pytest.mark.asyncio
- async def test_preprocess_multiple_load_events(event1):
- """Test that a state hydrate event for multiple on-load events is processed correctly.
- Args:
- event1: an Event.
- """
- app = App(
- state=TestState,
- load_events={"index": [TestState.test_handler, TestState.test_handler]},
- )
- hydrate_middleware = HydrateMiddleware()
- result = await hydrate_middleware.preprocess(
- app=app, event=event1, state=TestState()
- )
- assert isinstance(result, List)
- assert result[0].delta == {"test_state": {"num": 1}}
- assert result[1].delta == {"test_state": {"num": 2}}
|