mirror of
https://github.com/NocturnLabs/opencode-personal-knowledge.git
synced 2026-07-18 08:05:59 +02:00
feat: Implement initial personal knowledge management system with vector search and MCP server integration.
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
import { describe, test, expect, beforeAll, afterAll } from "bun:test";
|
||||
import { Database } from "bun:sqlite";
|
||||
import { join } from "path";
|
||||
import { existsSync, unlinkSync, mkdirSync } from "fs";
|
||||
|
||||
// Test with a separate test database
|
||||
const TEST_DIR = join(import.meta.dir, "../../test-data");
|
||||
const TEST_DB_PATH = join(TEST_DIR, "test_knowledge.db");
|
||||
|
||||
describe("database", () => {
|
||||
let db: Database;
|
||||
|
||||
beforeAll(() => {
|
||||
if (!existsSync(TEST_DIR)) {
|
||||
mkdirSync(TEST_DIR, { recursive: true });
|
||||
}
|
||||
db = new Database(TEST_DB_PATH, { create: true });
|
||||
db.run(`
|
||||
CREATE TABLE IF NOT EXISTS knowledge_entries (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
source TEXT,
|
||||
tags TEXT,
|
||||
created_at TEXT NOT NULL,
|
||||
updated_at TEXT NOT NULL
|
||||
)
|
||||
`);
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
db.close();
|
||||
if (existsSync(TEST_DB_PATH)) {
|
||||
unlinkSync(TEST_DB_PATH);
|
||||
}
|
||||
});
|
||||
|
||||
test("can insert a knowledge entry", () => {
|
||||
const stmt = db.prepare(`
|
||||
INSERT INTO knowledge_entries
|
||||
(title, content, source, tags, created_at, updated_at)
|
||||
VALUES (?, ?, ?, ?, ?, ?)
|
||||
`);
|
||||
|
||||
const now = new Date().toISOString();
|
||||
stmt.run("Test Title", "Test content here", "https://example.com", '["test","demo"]', now, now);
|
||||
|
||||
const count = db.prepare("SELECT COUNT(*) as count FROM knowledge_entries").get() as { count: number };
|
||||
expect(count.count).toBe(1);
|
||||
});
|
||||
|
||||
test("can query entries", () => {
|
||||
const records = db.prepare("SELECT * FROM knowledge_entries").all();
|
||||
expect(records.length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
test("can search by title", () => {
|
||||
const records = db.prepare(
|
||||
"SELECT * FROM knowledge_entries WHERE LOWER(title) LIKE ?"
|
||||
).all("%test%");
|
||||
expect(records.length).toBe(1);
|
||||
});
|
||||
|
||||
test("can search by content", () => {
|
||||
const records = db.prepare(
|
||||
"SELECT * FROM knowledge_entries WHERE LOWER(content) LIKE ?"
|
||||
).all("%content%");
|
||||
expect(records.length).toBe(1);
|
||||
});
|
||||
|
||||
test("can parse tags JSON", () => {
|
||||
const record = db.prepare("SELECT tags FROM knowledge_entries WHERE id = 1").get() as { tags: string };
|
||||
const tags = JSON.parse(record.tags);
|
||||
expect(tags).toEqual(["test", "demo"]);
|
||||
});
|
||||
|
||||
test("can update an entry", () => {
|
||||
const now = new Date().toISOString();
|
||||
db.prepare("UPDATE knowledge_entries SET title = ?, updated_at = ? WHERE id = ?").run("Updated Title", now, 1);
|
||||
|
||||
const record = db.prepare("SELECT title FROM knowledge_entries WHERE id = 1").get() as { title: string };
|
||||
expect(record.title).toBe("Updated Title");
|
||||
});
|
||||
|
||||
test("can delete an entry", () => {
|
||||
db.prepare("DELETE FROM knowledge_entries WHERE id = ?").run(1);
|
||||
|
||||
const count = db.prepare("SELECT COUNT(*) as count FROM knowledge_entries").get() as { count: number };
|
||||
expect(count.count).toBe(0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user