
* remove deprecated features and support for py3.9 * remove other deprecated stuff * update lock file * fix units tests * relock poetry * fix _replace for computed_var * fix some merge typo * fix typing of deploy args * fix benchmarks.yml versions * console.error instead of raising Exception * fix tests * ignore lambdas when resolving annotations * simplify redirect logic in event.py * more fixes * fix unit tests again * give back default annotations for lambdas * fix signature check for on_submit * remove useless stuff * update pyi * readd the getattr * raise if log_level is wrong type * silly goose, loglevel is a subclass of str * i don't believe this code * add guard --------- Co-authored-by: Khaleel Al-Adhami <khaleel.aladhami@gmail.com>
82 lines
2.5 KiB
Python
82 lines
2.5 KiB
Python
import shutil
|
|
from pathlib import Path
|
|
from typing import Generator
|
|
|
|
import pytest
|
|
|
|
import reflex as rx
|
|
import reflex.constants as constants
|
|
|
|
|
|
def test_shared_asset() -> None:
|
|
"""Test shared assets."""
|
|
# The asset function copies a file to the app's external assets directory.
|
|
asset = rx.asset(path="custom_script.js", shared=True, subfolder="subfolder")
|
|
assert asset == "/external/test_assets/subfolder/custom_script.js"
|
|
result_file = Path(
|
|
Path.cwd(), "assets/external/test_assets/subfolder/custom_script.js"
|
|
)
|
|
assert result_file.exists()
|
|
|
|
# Running a second time should not raise an error.
|
|
asset = rx.asset(path="custom_script.js", shared=True, subfolder="subfolder")
|
|
|
|
# Test the asset function without a subfolder.
|
|
asset = rx.asset(path="custom_script.js", shared=True)
|
|
assert asset == "/external/test_assets/custom_script.js"
|
|
result_file = Path(Path.cwd(), "assets/external/test_assets/custom_script.js")
|
|
assert result_file.exists()
|
|
|
|
# clean up
|
|
shutil.rmtree(Path.cwd() / "assets/external")
|
|
|
|
with pytest.raises(FileNotFoundError):
|
|
asset = rx.asset("non_existent_file.js")
|
|
|
|
# Nothing is done to assets when file does not exist.
|
|
assert not Path(Path.cwd() / "assets/external").exists()
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"path,shared",
|
|
[
|
|
pytest.param("non_existing_file", True),
|
|
pytest.param("non_existing_file", False),
|
|
],
|
|
)
|
|
def test_invalid_assets(path: str, shared: bool) -> None:
|
|
"""Test that asset raises an error when the file does not exist.
|
|
|
|
Args:
|
|
path: The path to the asset.
|
|
shared: Whether the asset should be shared.
|
|
"""
|
|
with pytest.raises(FileNotFoundError):
|
|
_ = rx.asset(path, shared=shared)
|
|
|
|
|
|
@pytest.fixture
|
|
def custom_script_in_asset_dir() -> Generator[Path, None, None]:
|
|
"""Create a custom_script.js file in the app's assets directory.
|
|
|
|
Yields:
|
|
The path to the custom_script.js file.
|
|
"""
|
|
asset_dir = Path.cwd() / constants.Dirs.APP_ASSETS
|
|
asset_dir.mkdir(exist_ok=True)
|
|
path = asset_dir / "custom_script.js"
|
|
path.touch()
|
|
yield path
|
|
path.unlink()
|
|
|
|
|
|
def test_local_asset(custom_script_in_asset_dir: Path) -> None:
|
|
"""Test that no error is raised if shared is set and both files exist.
|
|
|
|
Args:
|
|
custom_script_in_asset_dir: Fixture that creates a custom_script.js file in the app's assets directory.
|
|
|
|
"""
|
|
asset = rx.asset("custom_script.js", shared=False)
|
|
assert asset == "/custom_script.js"
|