make integration tests pass

This commit is contained in:
Khaleel Al-Adhami 2024-08-16 16:28:21 -07:00
parent 3d7ea3735c
commit 69f0d1db0b
8 changed files with 31 additions and 18 deletions

View File

@ -268,6 +268,8 @@ async def test_submit(driver, form_submit: AppHarness):
form_data = format.collect_form_dict_names(form_data)
print(form_data)
assert form_data["name_input"] == "foo"
assert form_data["pin_input"] == pin_values
assert form_data["number_input"] == "-3"

View File

@ -107,7 +107,7 @@ def test_tailwind_app(tailwind_app: AppHarness, tailwind_disabled: bool):
assert len(paragraphs) == 3
for p in paragraphs:
assert tailwind_app.poll_for_content(p, exp_not_equal="") == PARAGRAPH_TEXT
assert p.value_of_css_property("font-family") == "monospace"
assert p.value_of_css_property("font-family") == '"monospace"'
if tailwind_disabled:
# expect default color, not "text-red-500" from tailwind utility class
assert p.value_of_css_property("color") not in TEXT_RED_500_COLOR

View File

@ -1113,7 +1113,11 @@ class App(MiddlewareMixin, LifespanMixin, Base):
Returns:
Task if the event was backgroundable, otherwise None
"""
# print("Processing background", repr(event))
substate, handler = state._get_event_handler(event)
# print("Substate", substate)
# print("Handler", handler)
if not handler.is_background:
return None

View File

@ -4,10 +4,12 @@ from __future__ import annotations
from typing import Optional
import reflex as rx
from reflex.components.chakra import ChakraComponent, LiteralInputVariant
from reflex.components.component import Component
from reflex.components.tags.tag import Tag
from reflex.event import EventHandler
from reflex.ivars import ArrayVar
from reflex.utils import format
from reflex.utils.imports import ImportDict, merge_imports
from reflex.vars import Var
@ -186,7 +188,10 @@ class PinInputField(ChakraComponent):
props["name"] = f"{name}-{i}"
return PinInputField.create(**props, index=i, key=i)
return Var.range(length).foreach(_create) # type: ignore
return rx.foreach( # type: ignore
ArrayVar.range(length), # type: ignore
_create,
)
def _get_ref_hook(self) -> Optional[str]:
return None

View File

@ -11,7 +11,7 @@ from reflex.components.el.element import Element
from reflex.components.tags.tag import Tag
from reflex.constants import Dirs, EventTriggers
from reflex.event import EventChain, EventHandler
from reflex.ivars.base import ImmutableVar
from reflex.ivars.base import ImmutableVar, LiteralVar
from reflex.utils.format import format_event_chain
from reflex.utils.imports import ImportDict
from reflex.vars import Var, VarData
@ -185,7 +185,7 @@ class Form(BaseHTML):
HANDLE_SUBMIT_JS_JINJA2.render(
handle_submit_unique_name=self.handle_submit_unique_name,
form_data=FORM_DATA,
field_ref_mapping=str(Var.create_safe(self._get_form_refs())),
field_ref_mapping=str(LiteralVar.create(self._get_form_refs())),
on_submit_event_chain=format_event_chain(
self.event_triggers[EventTriggers.ON_SUBMIT]
),
@ -213,21 +213,18 @@ class Form(BaseHTML):
# when ref start with refs_ it's an array of refs, so we need different method
# to collect data
if ref.startswith("refs_"):
ref_var = Var.create_safe(ref[:-3], _var_is_string=False).as_ref()
form_refs[ref[5:-3]] = Var.create_safe(
ref_var = ImmutableVar.create_safe(ref[:-3]).as_ref()
form_refs[ref[len("refs_") : -3]] = ImmutableVar.create_safe(
f"getRefValues({str(ref_var)})",
_var_is_local=False,
_var_is_string=False,
_var_data=VarData.merge(ref_var._get_all_var_data()),
)
else:
ref_var = Var.create_safe(ref, _var_is_string=False).as_ref()
form_refs[ref[4:]] = Var.create_safe(
ref_var = ImmutableVar.create_safe(ref).as_ref()
form_refs[ref[4:]] = ImmutableVar.create_safe(
f"getRefValue({str(ref_var)})",
_var_is_local=False,
_var_is_string=False,
_var_data=VarData.merge(ref_var._get_all_var_data()),
)
# print(repr(form_refs))
return form_refs
def _get_vars(self, include_children: bool = True) -> Iterator[Var]:

View File

@ -724,7 +724,7 @@ class ImmutableVar(Var, Generic[VAR_TYPE]):
}
),
).to(ObjectVar)
return refs[self]
return refs[LiteralVar.create(str(self))]
def _type(self) -> StringVar:
"""Returns the type of the object.
@ -804,7 +804,7 @@ class LiteralVar(ImmutableVar):
if isinstance(value, EventSpec):
event_name = LiteralVar.create(
".".join(get_event_handler_parts(value.handler))
".".join(filter(None, get_event_handler_parts(value.handler)))
)
event_args = LiteralVar.create(
{str(name): value for name, value in value.args}

View File

@ -29,7 +29,12 @@ from typing_extensions import get_origin
from reflex import constants
from reflex.constants.base import REFLEX_VAR_OPENING_TAG
from reflex.utils.types import GenericType
from reflex.vars import ImmutableVarData, Var, VarData, _global_vars
from reflex.vars import (
ImmutableVarData,
Var,
VarData,
_global_vars,
)
from .base import (
CachedVarOperation,

View File

@ -666,7 +666,7 @@ def format_queue_events(
call_event_fn,
call_event_handler,
)
from reflex.ivars.base import FunctionVar, ImmutableVar
from reflex.ivars import FunctionVar, ImmutableVar
if not events:
return ImmutableVar("(() => null)").to(FunctionVar, EventChain)
@ -804,8 +804,8 @@ def format_array_ref(refs: str, idx: Var | None) -> str:
"""
clean_ref = re.sub(r"[^\w]+", "_", refs)
if idx is not None:
idx._var_is_local = True
return f"refs_{clean_ref}[{idx}]"
# idx._var_is_local = True
return f"refs_{clean_ref}[{str(idx)}]"
return f"refs_{clean_ref}"