Files
Clipboard/test/db-prepared.test.js
2026-09-12 13:59:12 +08:00

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);
});