64 lines
2.8 KiB
Python
64 lines
2.8 KiB
Python
from pathlib import Path
|
|
|
|
ROOT = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
def read(path: str) -> str:
|
|
return (ROOT / path).read_text(encoding="utf-8")
|
|
|
|
|
|
def test_v47_admin_ui_modules_exist_and_dashboard_is_smaller():
|
|
assert (ROOT / "app/admin_ui/styles.py").exists()
|
|
assert (ROOT / "app/admin_ui/navigation.py").exists()
|
|
assert (ROOT / "app/admin_ui/layout.py").exists()
|
|
admin_lines = read("app/admin_dashboard.py").count("\n") + 1
|
|
assert admin_lines < 4500
|
|
assert "ADMIN_UI_CSS moved to app.admin_ui.styles" in read("app/admin_dashboard.py")
|
|
|
|
|
|
def test_v47_primary_navigation_is_operator_first_and_admin_is_separate():
|
|
navigation = read("app/admin_ui/navigation.py")
|
|
primary = navigation[navigation.index("PRIMARY_NAV_ITEMS"):navigation.index("ADMIN_NAV_ITEMS")]
|
|
admin = navigation[navigation.index("ADMIN_NAV_ITEMS"):]
|
|
for label in ["Dashboard", "Centro de trabalho", "Oportunidades", "Clientes", "Produtos", "Encomendas", "Financeiro", "Integrações"]:
|
|
assert label in primary
|
|
for technical in ["Tasks", "Comunicações", "Outbox", "Eventos", "Runs", "Filas", "System health"]:
|
|
assert technical not in primary
|
|
assert technical in admin
|
|
assert "v4.7 Operator Workbench" in navigation
|
|
|
|
|
|
def test_v47_layout_uses_shared_navigation_and_css_endpoint_keeps_compatibility():
|
|
layout = read("app/admin_ui/layout.py")
|
|
dashboard = read("app/admin_dashboard.py")
|
|
styles = read("app/admin_ui/styles.py")
|
|
assert "from app.admin_ui.navigation import nav" in layout
|
|
assert "from app.admin_ui.styles import ADMIN_UI_V451_CSS" in layout
|
|
assert "return Response(ADMIN_UI_V451_CSS" in dashboard
|
|
assert "v4.7 admin navigation" in styles
|
|
|
|
|
|
def test_v47_opportunities_board_has_direct_pending_task_cta():
|
|
opportunities = read("app/admin_ui/pages/opportunities.py")
|
|
assert 'cta_label = "Concluir tarefa pendente" if pending else "Ver oportunidade"' in opportunities
|
|
assert "btn-primary" in opportunities
|
|
assert "Pipeline comercial com foco na próxima ação" in opportunities
|
|
|
|
|
|
def test_v47_documentation_describes_operator_model_and_no_db_migration():
|
|
doc = read("docs/CLIENTFLOW_V47_ADMIN_UI_REFACTOR.md")
|
|
assert "Chatwoot" in doc and "Operations" in doc
|
|
assert "Admin" in doc and "Outbox" in doc
|
|
assert "não requer migração de base de dados" in doc
|
|
|
|
|
|
def test_v471_sidebar_admin_menu_can_scroll_when_open_on_short_screens():
|
|
styles = read("app/admin_ui/styles.py")
|
|
assert "v4.7.1 admin navigation overflow fix" in styles
|
|
assert ".cf-sidebar" in styles
|
|
assert "overflow-y:auto" in styles
|
|
assert "max-height:100vh" in styles
|
|
assert "overscroll-behavior:contain" in styles
|
|
assert "scrollbar-gutter:stable" in styles
|
|
assert "overflow-y:hidden" in styles # mobile horizontal nav keeps old behavior
|