Files
KrisHD_AI/test/chatUsability.test.js
T
Frederik Spirgi 7723125c93
CI / check (22) (push) Failing after 15m53s
CI / check (24) (push) Failing after 15m50s
make some overall QoL improvements
2026-10-12 13:07:59 +02:00

48 lines
2.7 KiB
JavaScript

import test from "node:test";
import assert from "node:assert/strict";
import Database from "better-sqlite3";
import {initializeSchema, runMigrations} from "../src/db/schema.js";
import {createChatStatements} from "../src/db/chatRepository.js";
import {titleFromFirstMessage} from "../public/js/chatTitle.js";
import {createWebSearchToggle} from "../public/js/webSearch.js";
test("first messages produce short subject titles at word boundaries", () => {
assert.equal(titleFromFirstMessage("Can you help me plan a weekend trip to Lucerne? I prefer trains."), "Plan a weekend trip to Lucerne");
assert.equal(titleFromFirstMessage("What are the best hiking routes near Zurich?"), "Best hiking routes near Zurich");
const title = titleFromFirstMessage("Please explain the differences between local browser storage and server-side sessions for returning visitors");
assert.ok(title.length <= 68);
assert.ok(!title.endsWith("-"));
assert.equal(titleFromFirstMessage(" "), "New chat");
});
test("web search preference survives a fresh toggle", () => {
const values = new Map();
const storage = {getItem: key => values.get(key), setItem: (key, value) => values.set(key, value)};
const button = () => ({attributes: {}, setAttribute(key, value) { this.attributes[key] = value; }, addEventListener(_event, listener) { this.click = listener; }});
const first = button();
assert.equal(createWebSearchToggle(first, storage).enabled, true);
first.click();
const second = button();
assert.equal(createWebSearchToggle(second, storage).enabled, false);
assert.equal(second.attributes["aria-pressed"], "false");
second.click();
assert.equal(createWebSearchToggle(button(), storage).enabled, true);
});
test("chat list query returns a bounded latest message preview and activity time", () => {
const db = new Database(":memory:");
try {
initializeSchema(db);
runMigrations(db);
db.prepare("INSERT INTO chat_sessions (username, title) VALUES (?, ?)").run("owner", "Trip plans");
const chatId = db.prepare("SELECT id FROM chat_sessions").get().id;
db.prepare("INSERT INTO chat_messages (chat_id, role, content) VALUES (?, ?, ?)").run(chatId, "user", "First question");
db.prepare("INSERT INTO chat_messages (chat_id, role, content) VALUES (?, ?, ?)").run(chatId, "bot", "x".repeat(250));
const statements = createChatStatements(db);
const chat = statements.listChatSessions.get("owner");
assert.equal(chat.last_message_preview, "x".repeat(180));
assert.ok(chat.updated_at);
assert.equal(statements.searchChats.get("%Trip%", "owner", "%Trip%").last_message_preview, "x".repeat(180));
} finally { db.close(); }
});