This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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);
|
||||
});
|
||||
Reference in New Issue
Block a user