Files
flvx/tests/e2e/test_dashboard.py
T

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