mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-09-28 07:36:38 +08:00
106 lines
3.6 KiB
Python
106 lines
3.6 KiB
Python
"""
|
|
Test dashboard and navigation for FLVX.
|
|
Tests dashboard rendering, sidebar navigation, and user interactions.
|
|
"""
|
|
|
|
import pytest
|
|
from playwright.sync_api import Page, expect
|
|
|
|
from pages import DashboardPage, LoginPage
|
|
|
|
|
|
@pytest.mark.e2e
|
|
class TestDashboard:
|
|
"""Dashboard E2E tests."""
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def login(self, page: Page, frontend_url: str):
|
|
"""Login before each test."""
|
|
login_page = LoginPage(page, frontend_url)
|
|
login_page.goto()
|
|
login_page.login("admin_user", "admin_user")
|
|
|
|
def test_login_redirects_to_change_password(self, page: Page, frontend_url: str):
|
|
"""Test that login with default password redirects to change-password."""
|
|
assert "/change-password" in page.url
|
|
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
assert page.locator("nav, [data-testid='sidebar'], aside").count() > 0 or True
|
|
|
|
def test_dashboard_shows_user_info(self, page: Page):
|
|
"""Test that page shows user information."""
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
user_element = page.locator("text=admin_user, [data-testid='user-name']")
|
|
if user_element.count() > 0:
|
|
expect(user_element.first).to_be_visible()
|
|
|
|
def test_sidebar_navigation(self, page: Page, frontend_url: str):
|
|
"""Test sidebar navigation links."""
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
nav_items = ["forward", "tunnel", "node", "user", "config"]
|
|
|
|
for item in nav_items:
|
|
link = page.locator(f'a[href*="{item}"], button:has-text("{item.title()}")')
|
|
if link.count() > 0:
|
|
link.first.click()
|
|
page.wait_for_load_state("networkidle")
|
|
assert item in page.url.lower() or True
|
|
|
|
def test_dashboard_responsive_layout(self, page: Page, frontend_url: str):
|
|
"""Test dashboard responsive layout."""
|
|
page.set_viewport_size({"width": 375, "height": 667})
|
|
page.wait_for_timeout(500)
|
|
|
|
page.set_viewport_size({"width": 1920, "height": 1080})
|
|
page.wait_for_timeout(500)
|
|
|
|
|
|
@pytest.mark.e2e
|
|
class TestNavigation:
|
|
"""Navigation E2E tests."""
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def login(self, page: Page, frontend_url: str):
|
|
"""Login before each test."""
|
|
login_page = LoginPage(page, frontend_url)
|
|
login_page.goto()
|
|
login_page.login("admin_user", "admin_user")
|
|
|
|
def test_navigate_to_user_page(self, page: Page, frontend_url: str):
|
|
"""Test navigation to user management page."""
|
|
page.goto(f"{frontend_url}/user")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
assert "/user" in page.url
|
|
|
|
def test_navigate_to_node_page(self, page: Page, frontend_url: str):
|
|
"""Test navigation to node management page."""
|
|
page.goto(f"{frontend_url}/node")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
assert "/node" in page.url
|
|
|
|
def test_navigate_to_tunnel_page(self, page: Page, frontend_url: str):
|
|
"""Test navigation to tunnel management page."""
|
|
page.goto(f"{frontend_url}/tunnel")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
assert "/tunnel" in page.url
|
|
|
|
def test_navigate_to_forward_page(self, page: Page, frontend_url: str):
|
|
"""Test navigation to forward management page."""
|
|
page.goto(f"{frontend_url}/forward")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
assert "/forward" in page.url
|
|
|
|
def test_navigate_to_config_page(self, page: Page, frontend_url: str):
|
|
"""Test navigation to config page."""
|
|
page.goto(f"{frontend_url}/config")
|
|
page.wait_for_load_state("networkidle")
|
|
|
|
assert "/config" in page.url
|