Versie 0.2.0
This commit is contained in:
commit
e77d8fd373
495 files changed
+81026
No files matched your search
@@ -0,0 +1,80 @@
|
||||
// Generated, do not edit. sha256:82c1a99dd9bcb14921519651f00e41b83ebb6753c9cc496d2de5d3792c7a8814
|
||||
import { DatabaseSync } from 'node:sqlite';
|
||||
import { SCHEMA, createDatabase as echteCreateDatabase } from '../../server/db.js';
|
||||
import { CONFIG, PREFERENCES } from '../../shared/config.js';
|
||||
|
||||
const bind = params => params.map(v => {
|
||||
if (v === undefined) return null;
|
||||
if (typeof v === 'boolean') return v ? 1n : 0n;
|
||||
if (typeof v === 'number' && Number.isInteger(v)) return BigInt(v);
|
||||
return v;
|
||||
});
|
||||
|
||||
export function createDbHarness({ seedPreferences = false } = {}) {
|
||||
let sqlite;
|
||||
let calls;
|
||||
|
||||
function fresh() {
|
||||
sqlite = new DatabaseSync(':memory:', { enableForeignKeyConstraints: true });
|
||||
sqlite.exec(SCHEMA);
|
||||
sqlite.prepare(`INSERT INTO Schema (version) VALUES (?)`).run(CONFIG.SCHEMA_VERSION);
|
||||
sqlite.prepare(`INSERT INTO Portfolio (id, baseCurrency, createdAt) VALUES (1, ?, ?)`)
|
||||
.run(CONFIG.PORTFOLIO.DEFAULT_BASE_CURRENCY, '2026-01-01T00:00:00.000Z');
|
||||
calls = { run: 0, persist: 0, seedPriceSource: [] };
|
||||
if (seedPreferences) seedPrefs();
|
||||
}
|
||||
|
||||
function seedPrefs() {
|
||||
for (const [scope, keys] of Object.entries(PREFERENCES)) {
|
||||
for (const [key, spec] of Object.entries(keys)) {
|
||||
if (spec.secret) continue;
|
||||
api.run(`INSERT INTO Preference (scope, key, value) VALUES (?,?,?)`,
|
||||
[scope, key, JSON.stringify(spec.initial)]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const api = {
|
||||
run(sql, params = []) {
|
||||
calls.run++;
|
||||
if (params.length === 0) sqlite.exec(sql);
|
||||
else sqlite.prepare(sql).run(...bind(params));
|
||||
},
|
||||
all(sql, params = []) {
|
||||
return sqlite.prepare(sql).all(...bind(params)).map(row => ({ ...row }));
|
||||
},
|
||||
one(sql, params = []) {
|
||||
const rows = api.all(sql, params);
|
||||
return rows.length ? rows[0] : null;
|
||||
},
|
||||
lastId() {
|
||||
const r = api.one(`SELECT last_insert_rowid() AS id`);
|
||||
return r ? r.id : null;
|
||||
},
|
||||
schemaVersion() {
|
||||
const r = api.one(`SELECT version FROM Schema`);
|
||||
return r ? r.version : null;
|
||||
},
|
||||
async persist() { calls.persist++; },
|
||||
seedPriceSource(assetId, status) { calls.seedPriceSource.push([assetId, status]); },
|
||||
|
||||
async init() { return sqlite; },
|
||||
exportBytes() { throw new Error('db-node-harness: exportBytes() niet ondersteund in tests.'); },
|
||||
async reset() { throw new Error('db-node-harness: reset() niet ondersteund; gebruik harness.recreate().'); },
|
||||
async importBytes() { throw new Error('db-node-harness: importBytes() niet ondersteund in tests.'); },
|
||||
createDatabase: echteCreateDatabase,
|
||||
async idbGet(key) { return idb.has(key) ? idb.get(key) : null; },
|
||||
async idbPut(key, value) { idb.set(key, value); },
|
||||
};
|
||||
|
||||
const idb = new Map();
|
||||
|
||||
fresh();
|
||||
|
||||
return {
|
||||
exports: api,
|
||||
recreate() { sqlite.close(); idb.clear(); fresh(); },
|
||||
get sqlite() { return sqlite; },
|
||||
get calls() { return calls; },
|
||||
};
|
||||
}
|
||||
Reference in new issue
Block a user