Portal customization API v2, SPA hardening, and test cleanup

- Group portal state into brand/pages/actions/layout structs; portal* API
- Bootstrap JSON: nested brand/context/pages/actions/layout; param kind
- Handlers: PROGMEM default CSS when no override/append; dynamic CSS path
- PortalAppJS: portal timeout countdown; safe WiFi scan DOM; serialized
  scan-status polling; fetch error handling; wm:view-changed on redirects
- CSS: scan list icon alignment; wm-status for timeout
- Tests: remove low-value/no-op tests; trim fragile JS substring checks
This commit is contained in:
2026-05-04 22:03:43 +10:00
parent 93711d981d
commit 7735d7f0cb
22 changed files with 1039 additions and 326 deletions
+1 -7
View File
@@ -9,10 +9,7 @@ void test_basic_wifimanager_instantiation() {
// Test default constructor
WiFiManager wm;
// Verify instance created (basic sanity check)
TEST_ASSERT_TRUE_MESSAGE(true, "WiFiManager instance created successfully");
// Test that we can call basic methods without crashing
String defaultName = wm.getDefaultAPName();
TEST_ASSERT_GREATER_THAN(0, defaultName.length());
@@ -69,9 +66,6 @@ void test_disconnect() {
// Can be called multiple times safely
(void)wm.disconnect();
// Verify no crash (results may be true/false depending on WiFi state)
TEST_ASSERT_TRUE_MESSAGE(true, "disconnect() executed without crash");
Serial.println("[TEST] disconnect() test completed successfully");
}