import sqlite3 from 'sqlite3'; const db = new sqlite3.Database(':memory:'); db.serialize(() => { db.run("CREATE TABLE devices (mac TEXT PRIMARY KEY, model TEXT, connected INTEGER, last_seen TEXT)"); }); const upsertSql = ` INSERT INTO devices (mac, model, connected, last_seen) VALUES (?, ?, ?, ?) ON CONFLICT(mac) DO UPDATE SET model = excluded.model, connected = COALESCE(excluded.connected, devices.connected), last_seen = excluded.last_seen `; console.log("Starting sequential tests..."); // Test 1: Insert initial online device db.run(upsertSql, ['AA:BB:CC', 'T110', 1, '2023-01-01T12:00:00Z'], (err) => { if (err) console.error(err); checkDevice('Test 1 (Init Online)', 'AA:BB:CC', 1, () => { // Test 2: Update with NULL status db.run(upsertSql, ['AA:BB:CC', 'T110', null, '2023-01-01T12:05:00Z'], (err) => { if (err) console.error(err); checkDevice('Test 2 (Sensor Event/Null)', 'AA:BB:CC', 1, () => { // Test 3: Update with offline status db.run(upsertSql, ['AA:BB:CC', 'T110', 0, '2023-01-01T12:10:00Z'], (err) => { if (err) console.error(err); checkDevice('Test 3 (Offline/0)', 'AA:BB:CC', 0, () => { // Test 4: Update with NULL status while offline db.run(upsertSql, ['AA:BB:CC', 'T110', null, '2023-01-01T12:15:00Z'], (err) => { if (err) console.error(err); checkDevice('Test 4 (Sensor Event while Offline)', 'AA:BB:CC', 0, () => { // Test 5: Back online db.run(upsertSql, ['AA:BB:CC', 'T110', 1, '2023-01-01T12:20:00Z'], (err) => { if (err) console.error(err); checkDevice('Test 5 (Online again)', 'AA:BB:CC', 1, () => { console.log("All tests completed."); }); }); }); }); }); }); }); }); }); }); function checkDevice(testName, mac, expectedConnected, callback) { db.get("SELECT * FROM devices WHERE mac = ?", [mac], (err, row) => { if (err) console.error("DB Error:", err); const status = row.connected === expectedConnected ? 'PASS' : 'FAIL'; console.log(`${testName}: connected=${row.connected} (Expected: ${expectedConnected}) -> ${status}`); if (callback) callback(); }); }