UNPKG

@joystick.js/db-canary

Version:

JoystickDB - A minimalist database server for the Joystick framework

76 lines (63 loc) 2.44 kB
import test from 'ava'; import sinon from 'sinon'; import { initialize_database, get_database, generate_document_id, build_collection_key, parse_collection_key, cleanup_database } from '../../../src/server/lib/query_engine.js'; test.afterEach(async () => { // Clean up database connections after each test await cleanup_database(true); // Remove test database directory }); test('query_engine - should throw if get_database called before initialization', (t) => { const original_db_instance = global.db_instance; global.db_instance = null; t.throws(() => get_database(), { message: 'Database not initialized. Call initialize_database first.' }); global.db_instance = original_db_instance; }); test('query_engine - should initialize database and return instance', (t) => { const db = initialize_database('./test_data'); t.truthy(db); }); test('query_engine - should return same instance on multiple initialize calls', (t) => { const db1 = initialize_database('./test_data'); const db2 = initialize_database('./test_data'); t.is(db1, db2); }); test('query_engine - should generate unique document ids', (t) => { const id1 = generate_document_id(); const id2 = generate_document_id(); t.not(id1, id2); }); test('query_engine - should generate 16-character alphanumeric document ids', (t) => { const id = generate_document_id(); // Should be exactly 16 characters t.is(id.length, 16); // Should only contain alphanumeric characters (A-Z, a-z, 0-9) const alphanumeric_regex = /^[A-Za-z0-9]+$/; t.true(alphanumeric_regex.test(id)); // Should not contain hyphens or other punctuation t.false(id.includes('-')); t.false(id.includes('_')); t.false(id.includes('.')); }); test('query_engine - should generate cryptographically secure document ids', (t) => { // Generate multiple IDs to check for randomness const ids = new Set(); for (let i = 0; i < 1000; i++) { const id = generate_document_id(); t.false(ids.has(id), `Duplicate ID generated: ${id}`); ids.add(id); } // All IDs should be unique t.is(ids.size, 1000); }); test('query_engine - should build and parse collection keys correctly', (t) => { const key = build_collection_key('default', 'users', 'abc123'); t.is(key, 'default:users:abc123'); const parsed = parse_collection_key(key); t.deepEqual(parsed, { database: 'default', collection: 'users', document_id: 'abc123' }); });