signal-desktop/ts/test-electron/sql/utils_test.ts
2023-11-22 14:48:53 -08:00

53 lines
1.3 KiB
TypeScript

// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { assert } from 'chai';
import type { Database } from '@signalapp/better-sqlite3';
import SQL from '@signalapp/better-sqlite3';
import { sql, sqlFragment, sqlJoin } from '../../sql/util';
describe('sql/utils/sql', () => {
let db: Database;
beforeEach(() => {
db = new SQL(':memory:');
});
afterEach(() => {
db.close();
});
it('can run different query types with nested sql syntax', async () => {
const [createQuery, createParams] = sql`
CREATE TABLE examples (
id INTEGER PRIMARY KEY,
body TEXT
);
`;
db.prepare(createQuery).run(createParams);
const [insertQuery, insertParams] = sql`
INSERT INTO examples (id, body) VALUES
(1, 'foo'),
(2, 'bar'),
(3, 'baz');
`;
db.prepare(insertQuery).run(insertParams);
const predicate = sqlFragment`body = ${'baz'}`;
const [selectQuery, selectParams] = sql`
SELECT * FROM examples WHERE
id IN (${sqlJoin([1, 2])}) OR
${predicate};
`;
const result = db.prepare(selectQuery).all(selectParams);
assert.deepEqual(result, [
{ id: 1, body: 'foo' },
{ id: 2, body: 'bar' },
{ id: 3, body: 'baz' },
]);
});
});