60 lines
2.5 KiB
JavaScript
60 lines
2.5 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import {
|
|
filterSidebarItemsWithForkGroups,
|
|
getForkGroupPresentation,
|
|
groupForkedChatItems,
|
|
shouldRequestChatTitle,
|
|
} from "../src/lib/chat-forking.ts";
|
|
|
|
const root = { kind: "chat", id: "root", parentChatId: null };
|
|
const firstFork = { kind: "chat", id: "first-fork", parentChatId: "root" };
|
|
const nestedFork = { kind: "chat", id: "nested-fork", parentChatId: "root" };
|
|
const search = { kind: "search", id: "search", parentChatId: null };
|
|
|
|
test("fork groups are positioned by their newest member and always render root first", () => {
|
|
assert.deepEqual(groupForkedChatItems([nestedFork, search, root, firstFork]), [
|
|
[root, nestedFork, firstFork],
|
|
[search],
|
|
]);
|
|
});
|
|
|
|
test("sidebar filtering keeps a matching fork with its root", () => {
|
|
assert.deepEqual(
|
|
filterSidebarItemsWithForkGroups([search, root, firstFork, nestedFork], (item) => item.id === "nested-fork"),
|
|
[root, nestedFork]
|
|
);
|
|
});
|
|
|
|
test("sidebar filtering keeps all children when their root matches", () => {
|
|
assert.deepEqual(
|
|
filterSidebarItemsWithForkGroups([search, root, firstFork, nestedFork], (item) => item.id === "root"),
|
|
[root, firstFork, nestedFork]
|
|
);
|
|
});
|
|
|
|
test("a filtered family keeps its full-family date and root-owned star state", () => {
|
|
const fullFamily = [
|
|
{ ...root, updatedAt: "2026-08-10T00:00:00.000Z", starred: true, starredAt: "2026-08-15T00:00:00.000Z" },
|
|
{ ...firstFork, updatedAt: "2026-08-11T00:00:00.000Z", starred: false, starredAt: null },
|
|
{ ...nestedFork, updatedAt: "2026-08-16T00:00:00.000Z", starred: false, starredAt: null },
|
|
];
|
|
const filteredFamily = [fullFamily[0], fullFamily[1]];
|
|
|
|
assert.deepEqual(getForkGroupPresentation(filteredFamily, fullFamily), {
|
|
updatedAt: "2026-08-16T00:00:00.000Z",
|
|
starred: true,
|
|
starredAt: "2026-08-15T00:00:00.000Z",
|
|
});
|
|
});
|
|
|
|
test("a fork placeholder title is replaced on its first submitted prompt", () => {
|
|
assert.equal(shouldRequestChatTitle({ title: "Fork of original", titleGenerationPending: true }, false), true);
|
|
assert.equal(shouldRequestChatTitle({ title: "Generated title", titleGenerationPending: false }, false), false);
|
|
});
|
|
|
|
test("title generation remains compatible with untitled chats and deduplicates in-flight requests", () => {
|
|
assert.equal(shouldRequestChatTitle({ title: null, titleGenerationPending: false }, false), true);
|
|
assert.equal(shouldRequestChatTitle({ title: "Fork of original", titleGenerationPending: true }, true), false);
|
|
});
|