feat: add tests and compose
This commit is contained in:
191
backend/uframe/tests/test_navigation.py
Normal file
191
backend/uframe/tests/test_navigation.py
Normal file
@@ -0,0 +1,191 @@
|
||||
"""Tests for HNav and VNav navigation components."""
|
||||
|
||||
import uframe
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# HNav — Horizontal Navigation
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def test_hnav_bar():
|
||||
source = '''page "Test" 60
|
||||
hnav bar
|
||||
item "Home" "/page/index.mu" active
|
||||
item "About" "/page/about.mu"
|
||||
item "Settings" "/page/settings.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Home" in result.ascii
|
||||
assert "About" in result.ascii
|
||||
assert "Settings" in result.ascii
|
||||
# Bar style has borders
|
||||
assert "┌" in result.ascii or "─" in result.ascii
|
||||
|
||||
|
||||
def test_hnav_tabs():
|
||||
source = '''page "Test" 60
|
||||
hnav tabs
|
||||
item "Dashboard" "/page/dash.mu" active
|
||||
item "Logs" "/page/logs.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Dashboard" in result.ascii
|
||||
assert "Logs" in result.ascii
|
||||
|
||||
|
||||
def test_hnav_pills():
|
||||
source = '''page "Test" 60
|
||||
hnav pills
|
||||
item "All" "/page/all.mu" active
|
||||
item "Active" "/page/active.mu"
|
||||
item "Stale" "/page/stale.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "All" in result.ascii
|
||||
assert "Active" in result.ascii
|
||||
assert "Stale" in result.ascii
|
||||
|
||||
|
||||
def test_hnav_breadcrumb():
|
||||
source = '''page "Test" 60
|
||||
hnav breadcrumb
|
||||
item "Home" "/page/index.mu"
|
||||
item "Network" "/page/network.mu"
|
||||
item "Node Alpha" "/page/alpha.mu" active'''
|
||||
result = uframe.compile(source)
|
||||
assert "Home" in result.ascii
|
||||
assert "Network" in result.ascii
|
||||
assert "Node Alpha" in result.ascii
|
||||
# Breadcrumb uses ▸ separator
|
||||
assert "▸" in result.ascii
|
||||
|
||||
|
||||
def test_hnav_underline():
|
||||
source = '''page "Test" 60
|
||||
hnav underline
|
||||
item "Overview" "/page/overview.mu" active
|
||||
item "Details" "/page/details.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Overview" in result.ascii
|
||||
assert "Details" in result.ascii
|
||||
# Active item has underline
|
||||
assert "━" in result.ascii
|
||||
|
||||
|
||||
def test_hnav_with_separator():
|
||||
source = '''page "Test" 60
|
||||
hnav bar
|
||||
item "Home" "/page/index.mu" active
|
||||
separator
|
||||
item "Help" "/page/help.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Home" in result.ascii
|
||||
assert "Help" in result.ascii
|
||||
|
||||
|
||||
def test_hnav_micron_links():
|
||||
source = '''page "Test" 60
|
||||
hnav bar
|
||||
item "Home" "/page/index.mu"
|
||||
item "About" "/page/about.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "index.mu" in result.micron
|
||||
assert "about.mu" in result.micron
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# VNav — Vertical Navigation
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def test_vnav_list():
|
||||
source = '''page "Test" 60
|
||||
vnav list
|
||||
item "Dashboard" "/page/dash.mu" active
|
||||
item "Peers" "/page/peers.mu"
|
||||
item "Routes" "/page/routes.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Dashboard" in result.ascii
|
||||
assert "Peers" in result.ascii
|
||||
assert "Routes" in result.ascii
|
||||
# Active item has marker
|
||||
assert "▸" in result.ascii
|
||||
|
||||
|
||||
def test_vnav_boxed():
|
||||
source = '''page "Test" 60
|
||||
vnav boxed
|
||||
item "Home" "/page/index.mu" active
|
||||
item "Settings" "/page/settings.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Home" in result.ascii
|
||||
assert "Settings" in result.ascii
|
||||
# Boxed style has borders
|
||||
assert "┌" in result.ascii
|
||||
assert "└" in result.ascii
|
||||
|
||||
|
||||
def test_vnav_tree():
|
||||
source = '''page "Test" 60
|
||||
vnav tree
|
||||
item "Root" "/page/root.mu" active
|
||||
item "Child A" "/page/a.mu"
|
||||
item "Child B" "/page/b.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Root" in result.ascii
|
||||
assert "Child A" in result.ascii
|
||||
assert "Child B" in result.ascii
|
||||
# Tree style has connectors
|
||||
assert "├" in result.ascii or "└" in result.ascii
|
||||
|
||||
|
||||
def test_vnav_sidebar():
|
||||
source = '''page "Test" 60
|
||||
vnav sidebar
|
||||
item "Overview" "/page/overview.mu" active
|
||||
item "Metrics" "/page/metrics.mu"
|
||||
item "Alerts" "/page/alerts.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Overview" in result.ascii
|
||||
assert "Metrics" in result.ascii
|
||||
assert "Alerts" in result.ascii
|
||||
|
||||
|
||||
def test_vnav_minimal():
|
||||
source = '''page "Test" 60
|
||||
vnav minimal
|
||||
item "Page 1" "/page/1.mu"
|
||||
item "Page 2" "/page/2.mu" active
|
||||
item "Page 3" "/page/3.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Page 1" in result.ascii
|
||||
assert "Page 2" in result.ascii
|
||||
assert "Page 3" in result.ascii
|
||||
|
||||
|
||||
def test_vnav_with_separator():
|
||||
source = '''page "Test" 60
|
||||
vnav list
|
||||
item "Home" "/page/index.mu" active
|
||||
separator
|
||||
item "Help" "/page/help.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "Home" in result.ascii
|
||||
assert "Help" in result.ascii
|
||||
assert "─" in result.ascii
|
||||
|
||||
|
||||
def test_vnav_with_width():
|
||||
source = '''page "Test" 60
|
||||
vnav boxed 25
|
||||
item "Nav Item" "/page/nav.mu" active'''
|
||||
result = uframe.compile(source)
|
||||
assert "Nav Item" in result.ascii
|
||||
|
||||
|
||||
def test_vnav_micron_links():
|
||||
source = '''page "Test" 60
|
||||
vnav list
|
||||
item "Home" "/page/index.mu"
|
||||
item "About" "/page/about.mu"'''
|
||||
result = uframe.compile(source)
|
||||
assert "index.mu" in result.micron
|
||||
assert "about.mu" in result.micron
|
||||
Reference in New Issue
Block a user