44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
'use strict';
|
|
const assert = require('node:assert');
|
|
const fs = require('node:fs');
|
|
const os = require('node:os');
|
|
const path = require('node:path');
|
|
|
|
const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'clip-stmt-'));
|
|
process.env.USERPROFILE = tmp;
|
|
process.env.HOME = tmp;
|
|
|
|
const Database = require('better-sqlite3');
|
|
const dbPath = path.join(tmp, 'history.db');
|
|
const db = new Database(dbPath);
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS clips (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
type TEXT NOT NULL, text TEXT, image BLOB, preview TEXT,
|
|
top_at REAL, created_at REAL NOT NULL
|
|
);
|
|
`);
|
|
|
|
let passed = 0;
|
|
function check(name, fn) {
|
|
try { fn(); console.log(' ok -', name); passed++; }
|
|
catch (e) { console.error(' FAIL -', name, e.message); process.exitCode = 1; }
|
|
}
|
|
|
|
const cached = {
|
|
insert: db.prepare('INSERT INTO clips(type, text, preview, top_at, created_at) VALUES(?, ?, ?, ?, ?)'),
|
|
};
|
|
|
|
check('prepare reuse returns same statement object (sanity)', () => {
|
|
const a = db.prepare('SELECT 1');
|
|
const b = db.prepare('SELECT 1');
|
|
assert.ok(a !== b, 'sanity: each prepare() returns new object');
|
|
});
|
|
|
|
check('cached insert works repeatedly', () => {
|
|
for (let i = 0; i < 5; i++) {
|
|
cached.insert.run('text', `m${i}`, `p${i}`, null, Date.now()/1000);
|
|
}
|
|
const n = db.prepare('SELECT COUNT(*) AS n FROM clips').get().n;
|
|
assert.strictEqual(n, 5);
|
|
}); |