29 lines
1.1 KiB
TypeScript
Vendored
29 lines
1.1 KiB
TypeScript
Vendored
import { test } from "vitest";
|
|
import assert from "node:assert/strict";
|
|
import type { ColumnInfo } from "../../apps/desktop/src/types/database.ts";
|
|
import { findMatchedSearchColumns, isNumericSearchColumn, isTextSearchColumn } from "../../apps/desktop/src/lib/database/databaseSearch.ts";
|
|
|
|
function col(name: string, dataType: string, primary = false): ColumnInfo {
|
|
return {
|
|
name,
|
|
data_type: dataType,
|
|
is_nullable: true,
|
|
column_default: null,
|
|
is_primary_key: primary,
|
|
extra: null,
|
|
};
|
|
}
|
|
|
|
test("classifies searchable database search columns", () => {
|
|
assert.equal(isTextSearchColumn(col("email", "varchar")), true);
|
|
assert.equal(isNumericSearchColumn(col("id", "bigint")), true);
|
|
assert.equal(isTextSearchColumn(col("payload", "blob")), false);
|
|
assert.equal(isNumericSearchColumn(col("payload", "blob")), false);
|
|
});
|
|
|
|
test("finds matched columns from returned rows", () => {
|
|
const matches = findMatchedSearchColumns(["id", "email", "note"], [42, "Alice@Example.com", "inactive"], [col("id", "integer", true), col("email", "varchar"), col("note", "text")], "alice");
|
|
|
|
assert.deepEqual(matches, ["email"]);
|
|
});
|