node-sqlcipher/test/disk.test.ts
Fedor Indutny 9d3a85329e v1.0.0
2025-03-12 13:44:29 -07:00

68 lines
1.4 KiB
TypeScript

import { mkdtemp, rm } from 'node:fs/promises';
import { tmpdir } from 'node:os';
import { join } from 'node:path';
import { expect, test, beforeEach, afterEach } from 'vitest';
import Database from '../lib/index.js';
let dir: string;
let db: Database;
beforeEach(async () => {
dir = await mkdtemp(join(tmpdir(), 'sqlcipher-'));
db = new Database(join(dir, 'db.sqlite'));
});
afterEach(async () => {
try {
db.close();
} finally {
try {
await rm(dir, { recursive: true });
} catch {
// Best-effort
}
}
});
test.each([[false], [true]])('ciphertext=%j', (ciphertext) => {
if (ciphertext) {
db.pragma(`key = 'hello world'`);
}
db.pragma('journal_mode = WAL');
db.pragma('synchronous = FULL');
db.exec(`
CREATE TABLE t (
id INTEGER PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
value TEXT NOT NULL
);
`);
const stmt = db.prepare(
`INSERT INTO t (name, value) VALUES ($name, $value) RETURNING id`,
{ pluck: true },
);
const id = db.transaction(() => {
const result = stmt.get<number>({ name: 'Adam', value: 'Sandler' });
expect(result).not.toBeUndefined();
if (result === undefined) {
throw new Error('Pacify typescript');
}
return result;
})();
const row = db
.prepare(
`
SELECT name, value FROM t WHERE id IS $id
`,
)
.get({ id });
expect(row).toEqual({ name: 'Adam', value: 'Sandler' });
});