feat(webui): unify dashboard into 4 primary tabs and administration subtabs row, deprecate separate client-info
CI Test Suite / Run Component Tests & Pipeline Verification (push) Successful in 2m24s

This commit is contained in:
2026-10-11 10:33:14 +02:00
parent fc97964e95
commit b44191ed89
3 changed files with 99 additions and 928 deletions
+76 -911
View File
File diff suppressed because it is too large Load Diff
+7 -7
View File
@@ -824,16 +824,16 @@ class TestServerComponent(unittest.TestCase):
html_content = resp.body.decode("utf-8") html_content = resp.body.decode("utf-8")
# Verify clean tab buttons without number suffixes # Verify clean tab buttons without number suffixes
self.assertIn('>💻 Forwarders</button>', html_content) self.assertIn('>💻 Fleet Forwarders</button>', html_content)
self.assertIn('>🏢 Server Roles</button>', html_content) self.assertIn('>🖥️ Server Roles &amp; Client Directory</button>', html_content)
self.assertIn('>📊 Telemetry</button>', html_content) self.assertIn('>📊 Events</button>', html_content)
self.assertIn('>📜 Events</button>', html_content) self.assertIn('>⚙️ Administration', html_content)
self.assertIn('>⚙️ Settings', html_content) self.assertIn('>🤖 Hermes AI &amp; Tokens</button>', html_content)
self.assertIn('>📜 Sub-CA &amp; Licensing</button>', html_content) self.assertIn('>📜 Sub-CA &amp; Licensing</button>', html_content)
self.assertIn('>💾 DB Engine</button>', html_content) self.assertIn('>💾 DB Engine</button>', html_content)
self.assertIn('>🤖 Hermes AI &amp; Tokens</button>', html_content) self.assertIn('>📦 Updates &amp; Distribution', html_content)
self.assertNotIn('🟢 UNLOCKED', html_content) self.assertNotIn('🟢 UNLOCKED', html_content)
self.assertNotIn('Forwarders (', html_content) self.assertNotIn('Fleet Forwarders (', html_content)
# Verify Licensed Capabilities card is present # Verify Licensed Capabilities card is present
self.assertIn('Licensed Capabilities &amp; Feature Modules', html_content) self.assertIn('Licensed Capabilities &amp; Feature Modules', html_content)
+16 -10
View File
@@ -173,30 +173,36 @@ class TestServerRolesAndBestPractices(unittest.TestCase):
self.assertIn("Node Telemetry &amp; Server Roles Inventory", res_follow.text) self.assertIn("Node Telemetry &amp; Server Roles Inventory", res_follow.text)
def test_dashboard_tabs_structure(self): def test_dashboard_tabs_structure(self):
"""Verifies primary tabs (Forwarders, Server Roles, Telemetry, Events, Settings) and secondary settings subtabs (Sub-CA, DB, Updates, Hermes).""" """Verifies primary tabs (Fleet Forwarders, Server Roles & Client Directory, Events, Administration) and secondary admin subtabs (Hermes, Sub-CA, DB, Updates)."""
res = self.client.get("/webui", cookies={SessionManager.SESSION_COOKIE_NAME: self.session_token}) res = self.client.get("/webui", cookies={SessionManager.SESSION_COOKIE_NAME: self.session_token})
self.assertEqual(res.status_code, 200) self.assertEqual(res.status_code, 200)
html = res.text html = res.text
# Primary navigation tabs # Primary navigation tabs (only 4 tabs on top row)
self.assertIn("id=\"mainTabsNav\"", html) self.assertIn("id=\"mainTabsNav\"", html)
self.assertIn("id=\"tabBtn-fleet\"", html) self.assertIn("id=\"tabBtn-fleet\"", html)
self.assertIn(">💻 Fleet Forwarders</button>", html)
self.assertIn("id=\"tabBtn-server-roles\"", html) self.assertIn("id=\"tabBtn-server-roles\"", html)
self.assertIn("id=\"tabBtn-telemetry\"", html) self.assertIn(">🖥️ Server Roles &amp; Client Directory</button>", html)
self.assertIn("id=\"tabBtn-events\"", html) self.assertIn("id=\"tabBtn-events\"", html)
self.assertIn("id=\"tabBtn-settings\"", html) self.assertIn(">📊 Events</button>", html)
self.assertIn("id=\"tabBtn-admin\"", html)
self.assertIn(">⚙️ Administration", html)
# Settings sub-navigation tabs (row below) # Administration sub-navigation tabs (row below)
self.assertIn("id=\"settingsSubtabs\"", html) self.assertIn("id=\"adminSubtabs\"", html)
self.assertIn("id=\"tabBtn-pki\"", html)
self.assertIn("id=\"tabBtn-db\"", html)
self.assertIn("id=\"tabBtn-updates\"", html)
self.assertIn("id=\"tabBtn-hermes\"", html) self.assertIn("id=\"tabBtn-hermes\"", html)
self.assertIn(">🤖 Hermes AI &amp; Tokens</button>", html)
self.assertIn("id=\"tabBtn-pki\"", html)
self.assertIn(">📜 Sub-CA &amp; Licensing</button>", html)
self.assertIn("id=\"tabBtn-db\"", html)
self.assertIn(">💾 DB Engine</button>", html)
self.assertIn("id=\"tabBtn-updates\"", html)
self.assertIn(">📦 Updates &amp; Distribution", html)
# Tab panes # Tab panes
self.assertIn("id=\"tabPane-fleet\"", html) self.assertIn("id=\"tabPane-fleet\"", html)
self.assertIn("id=\"tabPane-server-roles\"", html) self.assertIn("id=\"tabPane-server-roles\"", html)
self.assertIn("id=\"tabPane-telemetry\"", html)
self.assertIn("id=\"tabPane-events\"", html) self.assertIn("id=\"tabPane-events\"", html)
self.assertIn("id=\"tabPane-pki\"", html) self.assertIn("id=\"tabPane-pki\"", html)
self.assertIn("id=\"tabPane-db\"", html) self.assertIn("id=\"tabPane-db\"", html)