mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-23 04:13:33 +00:00
Request root sessions before applying the session list limit so child sessions cannot crowd roots out of the switcher. Keep the synchronized cache available while requests are pending or fail, reconcile results with live updates, and retain current and pinned sessions. Preserve selection by session ID when asynchronous results reorder the list. Closes #16270 Closes #32725
46 lines
1.5 KiB
TypeScript
46 lines
1.5 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import { createDialogSessionListQuery, loadDialogSessionList } from "../../src/component/dialog-session-list"
|
|
|
|
describe("dialog session list", () => {
|
|
test("requests root sessions for the default browse list", () => {
|
|
expect(createDialogSessionListQuery({ filter: { path: "packages/tui" } })).toEqual({
|
|
roots: true,
|
|
limit: 100,
|
|
path: "packages/tui",
|
|
})
|
|
})
|
|
|
|
test("requests root sessions for search results", () => {
|
|
expect(createDialogSessionListQuery({ search: " deploy ", filter: { scope: "project" } })).toEqual({
|
|
roots: true,
|
|
limit: 30,
|
|
search: "deploy",
|
|
scope: "project",
|
|
})
|
|
})
|
|
|
|
test("keeps the cache usable while the root request is pending", async () => {
|
|
let resolve!: (result: { data: string[] }) => void
|
|
const pending = loadDialogSessionList<string>({
|
|
filter: {},
|
|
list: () => new Promise((done) => (resolve = done)),
|
|
})
|
|
|
|
expect(await Promise.race([pending, Promise.resolve("pending")])).toBe("pending")
|
|
resolve({ data: ["root"] })
|
|
expect(await pending).toEqual(["root"])
|
|
})
|
|
|
|
test("falls back when the root request returns an error response", async () => {
|
|
expect(await loadDialogSessionList({ filter: {}, list: async () => ({}) })).toBeUndefined()
|
|
})
|
|
|
|
test("falls back when the root request rejects", async () => {
|
|
expect(
|
|
await loadDialogSessionList({
|
|
filter: {},
|
|
list: () => Promise.reject(new Error("offline")),
|
|
}),
|
|
).toBeUndefined()
|
|
})
|
|
})
|