浏览代码

unbreak link _hover (#4537)

* unbreak link _hover

* add a test to catch the error

* change tmp path for harness

* add () to fixture

* add spacer to avoid initial hover

* only install chromium browser for faster ci

---------

Co-authored-by: Lendemor <thomas.brandeho@gmail.com>
Masen Furer 4 月之前
父节点
当前提交
08d9fbf9bc

+ 1 - 1
.github/workflows/integration_app_harness.yml

@@ -53,7 +53,7 @@ jobs:
           SCREENSHOT_DIR: /tmp/screenshots/${{ matrix.state_manager }}/${{ matrix.python-version }}/${{ matrix.split_index }}
           REDIS_URL: ${{ matrix.state_manager == 'redis' && 'redis://localhost:6379' || '' }}
         run: |
-          poetry run playwright install --with-deps
+          poetry run playwright install chromium
           poetry run pytest tests/integration --splits 2 --group ${{matrix.split_index}}
       - uses: actions/upload-artifact@v4
         name: Upload failed test screenshots

+ 1 - 1
reflex/components/radix/themes/typography/link.py

@@ -76,7 +76,7 @@ class Link(RadixThemesComponent, A, MemoizationLeaf, MarkdownComponentMap):
         Returns:
             Component: The link component
         """
-        props.setdefault(":hover", {"color": color("accent", 8)})
+        props.setdefault("_hover", {"color": color("accent", 8)})
         href = props.get("href")
 
         is_external = props.pop("is_external", None)

+ 46 - 0
tests/integration/tests_playwright/test_link_hover.py

@@ -0,0 +1,46 @@
+from typing import Generator
+
+import pytest
+from playwright.sync_api import Page, expect
+
+from reflex.testing import AppHarness
+
+
+def LinkApp():
+    import reflex as rx
+
+    app = rx.App()
+
+    def index():
+        return rx.vstack(
+            rx.box(height="10em"),  # spacer, so the link isn't hovered initially
+            rx.link(
+                "Click me",
+                href="#",
+                color="blue",
+                _hover=rx.Style({"color": "red"}),
+            ),
+        )
+
+    app.add_page(index, "/")
+
+
+@pytest.fixture()
+def link_app(tmp_path_factory) -> Generator[AppHarness, None, None]:
+    with AppHarness.create(
+        root=tmp_path_factory.mktemp("link_app"),
+        app_source=LinkApp,  # type: ignore
+    ) as harness:
+        assert harness.app_instance is not None, "app is not running"
+        yield harness
+
+
+def test_link_hover(link_app: AppHarness, page: Page):
+    assert link_app.frontend_url is not None
+    page.goto(link_app.frontend_url)
+
+    link = page.get_by_role("link")
+    expect(link).to_have_text("Click me")
+    expect(link).to_have_css("color", "rgb(0, 0, 255)")
+    link.hover()
+    expect(link).to_have_css("color", "rgb(255, 0, 0)")