
* fully migrate vars into new system * i hate rufffff (no i don't) * fix silly pright issues (except colormode and state) * remove all instances of Var.create * create immutable callable var and get rid of more base vars * implement hash for all functions * get reflex-web to compile * get it to compile reflex-web successfully * fix tests * fix pyi * use override from typing_extension * put plotly inside of a catch * dicts are unusable sadly * fix silly mistake * overload equals to special case immutable var * improve test_cond * solve more CI issues, down to 94 failures * down to 20 errors * down to 13 errors * pass all testcases * fix pyright issues * reorder things * use get origin more * use fixed_type logic * various optimizations * go back to passing test cases * use less boilerplate * remove unnecessary print message * remove weird comment * add test for html issue * add type ignore * fix another silly issue * override get all var data for var operations call * make integration tests pass * fix immutable call var * better logic for finding parent class * use even better logic for finding state wrt computedvar * only choose the ones that are defined in the same module * small dict to large dict * [REF-3591] Remove chakra-related files from immutable vars PR (#3821) * Add comments to html metadata component (#3731) * fix: add verification for path /404 (#3723) Co-authored-by: coolstorm <manas.gupta@fampay.in> * Use the new state name when setting `is_hydrated` to false (#3738) * Use `._is_mutable()` to account for parent state proxy (#3739) When a parent state proxy is set, also allow child StateProxy._self_mutable to override the parent's `_is_mutable()`. * bump to 0.5.9 (#3746) * add message when installing requirements.txt is needed for chosen template during init (#3750) * #3752 bugfix add domain for XAxis (#3764) * fix appharness app_source typing (#3777) * fix import clash between connectionToaster and hooks.useState (#3749) * use different registry when in china, fixes #3700 (#3702) * do not reload compilation if using local app in AppHarness (#3790) * do not reload if using local app * Update reflex/testing.py Co-authored-by: Masen Furer <m_github@0x26.net> --------- Co-authored-by: Masen Furer <m_github@0x26.net> * Bump memory on relevant actions (#3781) Co-authored-by: Alek Petuskey <alekpetuskey@Aleks-MacBook-Pro.local> * [REF-3334] Validate Toast Props (#3793) * [REF-3536][REF-3537][REF-3541] Move chakra components into its repo(reflex-chakra) (#3798) * fix get_uuid_string_var (#3795) * minor State cleanup (#3768) * Fix code wrap in markdown (#3755) --------- Co-authored-by: Alek Petuskey <alek@pynecone.io> Co-authored-by: Manas Gupta <53006261+Manas1820@users.noreply.github.com> Co-authored-by: coolstorm <manas.gupta@fampay.in> Co-authored-by: Thomas Brandého <thomas.brandeho@gmail.com> Co-authored-by: Shubhankar Dimri <dimrishubhi@gmail.com> Co-authored-by: benedikt-bartscher <31854409+benedikt-bartscher@users.noreply.github.com> Co-authored-by: Khaleel Al-Adhami <khaleel.aladhami@gmail.com> Co-authored-by: Alek Petuskey <alekpetuskey@Aleks-MacBook-Pro.local> Co-authored-by: Elijah Ahianyo <elijahahianyo@gmail.com> * pyproject.toml: bump to 0.6.0a1 * pyproject.toml: depend on reflex-chakra>=0.6.0a New Var system support in reflex-chakra 0.6.0a1 * poetry.lock: relock dependencies * integration: bump listening timeout to 1200 seconds * integration: bump listening timeout to 1800 seconds * Use cached_var_no_lock to avoid ImmutableVar deadlocks (#3835) * Use cached_var_no_lock to avoid ImmutableVar deadlocks ImmutableVar subclasses will always return the same value for a _var_name or _get_all_var_data so there is no need to use a per-class lock to protect a cached attribute on an instance, and doing so actually is observed to cause deadlocks when a particular _cached_var_name creates new LiteralVar instances and attempts to serialize them. * remove unused module global --------- Co-authored-by: Masen Furer <m_github@0x26.net> Co-authored-by: Alek Petuskey <alek@pynecone.io> Co-authored-by: Manas Gupta <53006261+Manas1820@users.noreply.github.com> Co-authored-by: coolstorm <manas.gupta@fampay.in> Co-authored-by: Thomas Brandého <thomas.brandeho@gmail.com> Co-authored-by: Shubhankar Dimri <dimrishubhi@gmail.com> Co-authored-by: benedikt-bartscher <31854409+benedikt-bartscher@users.noreply.github.com> Co-authored-by: Alek Petuskey <alekpetuskey@Aleks-MacBook-Pro.local> Co-authored-by: Elijah Ahianyo <elijahahianyo@gmail.com>
206 lines
5.7 KiB
Python
206 lines
5.7 KiB
Python
import pytest
|
|
|
|
import reflex as rx
|
|
|
|
|
|
@pytest.fixture
|
|
def upload_root_component():
|
|
"""A test upload component function.
|
|
|
|
Returns:
|
|
A test upload component function.
|
|
"""
|
|
|
|
def upload_root_component():
|
|
return rx.upload.root(
|
|
rx.button("select file"),
|
|
rx.text("Drag and drop files here or click to select files"),
|
|
border="1px dotted black",
|
|
)
|
|
|
|
return upload_root_component()
|
|
|
|
|
|
@pytest.fixture
|
|
def upload_component():
|
|
"""A test upload component function.
|
|
|
|
Returns:
|
|
A test upload component function.
|
|
"""
|
|
|
|
def upload_component():
|
|
return rx.upload(
|
|
rx.button("select file"),
|
|
rx.text("Drag and drop files here or click to select files"),
|
|
border="1px dotted black",
|
|
)
|
|
|
|
return upload_component()
|
|
|
|
|
|
@pytest.fixture
|
|
def upload_component_id_special():
|
|
def upload_component():
|
|
return rx.upload(
|
|
rx.button("select file"),
|
|
rx.text("Drag and drop files here or click to select files"),
|
|
border="1px dotted black",
|
|
id="#spec!`al-_98ID",
|
|
)
|
|
|
|
return upload_component()
|
|
|
|
|
|
@pytest.fixture
|
|
def upload_component_with_props():
|
|
"""A test upload component with props function.
|
|
|
|
Returns:
|
|
A test upload component with props function.
|
|
"""
|
|
|
|
def upload_component_with_props():
|
|
return rx.upload(
|
|
rx.button("select file"),
|
|
rx.text("Drag and drop files here or click to select files"),
|
|
border="1px dotted black",
|
|
no_drag=True,
|
|
max_files=2,
|
|
)
|
|
|
|
return upload_component_with_props()
|
|
|
|
|
|
def test_upload_root_component_render(upload_root_component):
|
|
"""Test that the render function is set correctly.
|
|
|
|
Args:
|
|
upload_root_component: component fixture
|
|
"""
|
|
upload = upload_root_component.render()
|
|
|
|
# upload
|
|
assert upload["name"] == "ReactDropzone"
|
|
assert upload["props"] == [
|
|
'id={"default"}',
|
|
"multiple={true}",
|
|
"onDrop={e => setFilesById(filesById => {\n"
|
|
" const updatedFilesById = Object.assign({}, filesById);\n"
|
|
' updatedFilesById["default"] = e;\n'
|
|
" return updatedFilesById;\n"
|
|
" })\n"
|
|
" }",
|
|
"ref={ref_default}",
|
|
]
|
|
assert upload["args"] == ("getRootProps", "getInputProps")
|
|
|
|
# box inside of upload
|
|
[box] = upload["children"]
|
|
assert box["name"] == "RadixThemesBox"
|
|
assert box["props"] == [
|
|
'className={"rx-Upload"}',
|
|
'css={({ ["border"] : "1px dotted black" })}',
|
|
"{...getRootProps()}",
|
|
]
|
|
|
|
# input, button and text inside of box
|
|
[input, button, text] = box["children"]
|
|
assert input["name"] == "input"
|
|
assert input["props"] == ['type={"file"}', "{...getInputProps()}"]
|
|
|
|
assert button["name"] == "RadixThemesButton"
|
|
assert button["children"][0]["contents"] == '{"select file"}'
|
|
|
|
assert text["name"] == "RadixThemesText"
|
|
assert (
|
|
text["children"][0]["contents"]
|
|
== '{"Drag and drop files here or click to select files"}'
|
|
)
|
|
|
|
|
|
def test_upload_component_render(upload_component):
|
|
"""Test that the render function is set correctly.
|
|
|
|
Args:
|
|
upload_component: component fixture
|
|
"""
|
|
upload = upload_component.render()
|
|
|
|
# upload
|
|
assert upload["name"] == "ReactDropzone"
|
|
assert upload["props"] == [
|
|
'id={"default"}',
|
|
"multiple={true}",
|
|
"onDrop={e => setFilesById(filesById => {\n"
|
|
" const updatedFilesById = Object.assign({}, filesById);\n"
|
|
' updatedFilesById["default"] = e;\n'
|
|
" return updatedFilesById;\n"
|
|
" })\n"
|
|
" }",
|
|
"ref={ref_default}",
|
|
]
|
|
assert upload["args"] == ("getRootProps", "getInputProps")
|
|
|
|
# box inside of upload
|
|
[box] = upload["children"]
|
|
assert box["name"] == "RadixThemesBox"
|
|
assert box["props"] == [
|
|
'className={"rx-Upload"}',
|
|
'css={({ ["border"] : "1px dotted black", ["padding"] : "5em", ["textAlign"] : "center" })}',
|
|
"{...getRootProps()}",
|
|
]
|
|
|
|
# input, button and text inside of box
|
|
[input, button, text] = box["children"]
|
|
assert input["name"] == "input"
|
|
assert input["props"] == ['type={"file"}', "{...getInputProps()}"]
|
|
|
|
assert button["name"] == "RadixThemesButton"
|
|
assert button["children"][0]["contents"] == '{"select file"}'
|
|
|
|
assert text["name"] == "RadixThemesText"
|
|
assert (
|
|
text["children"][0]["contents"]
|
|
== '{"Drag and drop files here or click to select files"}'
|
|
)
|
|
|
|
|
|
def test_upload_component_with_props_render(upload_component_with_props):
|
|
"""Test that the render function is set correctly.
|
|
|
|
Args:
|
|
upload_component_with_props: component fixture
|
|
"""
|
|
upload = upload_component_with_props.render()
|
|
|
|
assert upload["props"] == [
|
|
'id={"default"}',
|
|
"maxFiles={2}",
|
|
"multiple={true}",
|
|
"noDrag={true}",
|
|
"onDrop={e => setFilesById(filesById => {\n"
|
|
" const updatedFilesById = Object.assign({}, filesById);\n"
|
|
' updatedFilesById["default"] = e;\n'
|
|
" return updatedFilesById;\n"
|
|
" })\n"
|
|
" }",
|
|
"ref={ref_default}",
|
|
]
|
|
|
|
|
|
def test_upload_component_id_with_special_chars(upload_component_id_special):
|
|
upload = upload_component_id_special.render()
|
|
|
|
assert upload["props"] == [
|
|
r'id={"#spec!`al-_98ID"}',
|
|
"multiple={true}",
|
|
"onDrop={e => setFilesById(filesById => {\n"
|
|
" const updatedFilesById = Object.assign({}, filesById);\n"
|
|
' updatedFilesById["#spec!`al-_98ID"] = e;\n'
|
|
" return updatedFilesById;\n"
|
|
" })\n"
|
|
" }",
|
|
"ref={ref__spec_al__98ID}",
|
|
]
|