Files

75 lines
2.2 KiB
Python

"""Frontend E2E tests — dashboard stats and activity."""
import pytest
import requests
def _login(page):
"""Helper: login as admin."""
page.locator("#loginUsername").fill("admin")
page.locator("#loginPassword").fill("changeme")
page.locator("button:has-text('Sign In')").click()
page.wait_for_selector("#loginOverlay", state="hidden", timeout=5000)
@pytest.mark.frontend
def test_dashboard_shows_stats(page, live_server):
"""Dashboard tab shows stats after assets are created."""
_login(page)
# Create assets via API
requests.post(
f"{live_server}/api/assets",
json={
"machine_id": "DASH-001",
"name": "Dashboard Asset 1",
"category": "Furniture",
},
)
requests.post(
f"{live_server}/api/assets",
json={
"machine_id": "DASH-002",
"name": "Dashboard Asset 2",
"category": "Appliances",
},
)
# Navigate to Dashboard
page.locator(".tab-btn[data-tab='tabDashboard']").click()
page.wait_for_selector("#tabDashboard.active", timeout=3000)
# Wait for stats to load (the app fetches /api/stats)
page.wait_for_timeout(1000)
# Verify stats cards are present
cards = page.locator(".card")
assert cards.count() >= 2
@pytest.mark.frontend
def test_activity_feed_shows_events(page, live_server):
"""Activity feed shows recent actions."""
_login(page)
# Create an asset (triggers activity log entry)
requests.post(
f"{live_server}/api/assets",
json={
"machine_id": "ACT-001",
"name": "Activity Test Asset",
"category": "Other",
},
)
# Navigate to Activity tab (only accessible via drawer)
page.locator(".hamburger").click()
page.wait_for_selector("#drawer.open", timeout=3000)
page.locator(".dn-item[data-tab='tabActivity']").click()
page.wait_for_selector("#tabActivity.active", timeout=3000)
page.wait_for_timeout(2000)
# Should show activity items or empty state (scoped to #actList to avoid
# matching .empty-state divs in hidden tab panels)
page.wait_for_selector("#actList .activity-item, #actList .empty-state", timeout=5000)