Initial commit: Canteen Asset Geolocation Tool v2
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
"""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)
|
||||
Reference in New Issue
Block a user