upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/tests/integration
diff options
context:
space:
mode:
authorYour Name <you@example.com>2026-05-20 02:14:45 +0530
committerYour Name <you@example.com>2026-05-20 02:14:45 +0530
commit899016795c389151e6b486ec470653f5688e5c5f (patch)
tree64b4c732d6f585552fd14df5f47890764c66ac1a /tests/integration
parent4f713120dbedd37a3512c2ec1af0766025a59d57 (diff)
feat: merge display-fix — touch driver, keyboard, WiFi setup UI
Squash-merge of feature/display-fix (27 commits): - AXS15231B touch driver with coordinate parsing (touch.c/h) - On-screen keyboard with layout/hit detection (keyboard.c/h) - WiFi setup state machine + config_add_wifi (wifi_setup.c/h) - Web-based WiFi setup via captive portal - Display rotation fix (stride=480), color fixes, DMA byte-swap - WiFi QR code on BOOT and ERROR screens - ERROR state transition after WiFi retries exhausted - Unit tests: test_touch, test_keyboard, test_wifi_setup - Integration test: wifi_setup.mjs - E2E test: wifi-setup.spec.mjs - Per-board hardware locks for flash targets Conflicts resolved: took master for config/cvm/api/main (more current), took display-fix for display/axs15231b (newer fixes).
Diffstat (limited to 'tests/integration')
-rw-r--r--tests/integration/wifi_setup.mjs74
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/integration/wifi_setup.mjs b/tests/integration/wifi_setup.mjs
new file mode 100644
index 0000000..a991ba5
--- /dev/null
+++ b/tests/integration/wifi_setup.mjs
@@ -0,0 +1,74 @@
1import { execSync } from 'child_process';
2
3const IP = process.env.TOLLGATE_IP || '10.192.45.1';
4
5console.log(`\n=== WiFi Setup Integration Test ===`);
6console.log(`Portal IP: ${IP}\n`);
7
8let passed = 0, failed = 0;
9function assert(cond, msg) {
10 if (cond) { console.log(` PASS: ${msg}`); passed++; }
11 else { console.log(` FAIL: ${msg}`); failed++; }
12}
13
14function run(cmd) {
15 try { return execSync(cmd, { encoding: 'utf8', timeout: 15000 }); }
16 catch { return null; }
17}
18
19function fetchJSON(path) {
20 const result = run(`curl -s --connect-timeout 5 http://${IP}${path}`);
21 if (!result) return null;
22 try { return JSON.parse(result); }
23 catch { return null; }
24}
25
26// 1. /setup page returns HTML (or redirects if already configured)
27const setupPage = run(`curl -s -o /dev/null -w "%{http_code}" --connect-timeout 5 http://${IP}/setup`);
28assert(setupPage === '200' || setupPage === '302', `/setup returns 200 or 302 (got ${setupPage})`);
29
30// 2. /wifi/status endpoint works
31const status = fetchJSON('/wifi/status');
32assert(status !== null, '/wifi/status returns JSON');
33assert(typeof status.connected === 'boolean', '/wifi/status has connected field');
34
35// 3. /wifi/scan endpoint returns array
36console.log('\n (wifi/scan may take a few seconds...)');
37const scanResult = run(`curl -s --connect-timeout 15 --max-time 15 http://${IP}/wifi/scan`);
38let scanData = null;
39if (scanResult) {
40 try { scanData = JSON.parse(scanResult); } catch {}
41}
42assert(scanData !== null, '/wifi/scan returns JSON');
43if (scanData && Array.isArray(scanData)) {
44 assert(scanData.length >= 0, `/wifi/scan returns array (${scanData.length} APs)`);
45 if (scanData.length > 0) {
46 const ap = scanData[0];
47 assert(ap.ssid !== undefined, 'AP has ssid field');
48 assert(ap.rssi !== undefined, 'AP has rssi field');
49 assert(ap.secured !== undefined, 'AP has secured field');
50 console.log(` First AP: "${ap.ssid}" (${ap.rssi} dBm, ${ap.secured ? 'secured' : 'open'})`);
51 }
52}
53
54// 4. /wifi/connect rejects invalid JSON
55const badConnect = run(`curl -s -X POST -d 'not json' --connect-timeout 5 http://${IP}/wifi/connect`);
56assert(badConnect !== null, '/wifi/connect responds to bad request');
57if (badConnect) {
58 try {
59 const err = JSON.parse(badConnect);
60 assert(err.ok === false, '/wifi/connect returns ok:false for bad request');
61 } catch {}
62}
63
64// 5. /wifi/connect rejects missing ssid
65const noSsid = run(`curl -s -X POST -H 'Content-Type: application/json' -d '{}' --connect-timeout 5 http://${IP}/wifi/connect`);
66if (noSsid) {
67 try {
68 const err = JSON.parse(noSsid);
69 assert(err.ok === false && err.error, '/wifi/connect returns error for missing ssid');
70 } catch {}
71}
72
73console.log(`\n=== Results: ${passed} passed, ${failed} failed ===`);
74process.exit(failed > 0 ? 1 : 0);