64 lines
2.6 KiB
JavaScript
64 lines
2.6 KiB
JavaScript
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();
|
|
});
|
|
}
|