make some overall QoL improvements
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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(); }
|
||||
});
|
||||
@@ -442,7 +442,7 @@ test("composer search defaults on and source renderer supports old messages and
|
||||
const toggle = createWebSearchToggle(button);
|
||||
assert.equal(toggle.enabled, true);
|
||||
assert.equal(button.attributes["aria-pressed"], "true");
|
||||
assert.match(button.title, /Automatic web search on/);
|
||||
assert.match(button.title, /Web search allowed/);
|
||||
button.listeners.click();
|
||||
assert.equal(toggle.enabled, false);
|
||||
assert.equal(button.attributes["aria-pressed"], "false");
|
||||
|
||||
Reference in New Issue
Block a user