Buckets:
GHHG10/CodeServer / opencode /packages /app /src /pages /session /composer /session-composer-state.test.ts
| import { describe, expect, test } from "bun:test" | |
| import type { PermissionRequest, QuestionRequest, Session } from "@opencode-ai/sdk/v2/client" | |
| import { todoState } from "./session-composer-state" | |
| import { sessionPermissionRequest, sessionQuestionRequest } from "./session-request-tree" | |
| const session = (input: { id: string; parentID?: string }) => | |
| ({ | |
| id: input.id, | |
| parentID: input.parentID, | |
| }) as Session | |
| const permission = (id: string, sessionID: string) => | |
| ({ | |
| id, | |
| sessionID, | |
| }) as PermissionRequest | |
| const question = (id: string, sessionID: string) => | |
| ({ | |
| id, | |
| sessionID, | |
| questions: [], | |
| }) as QuestionRequest | |
| describe("sessionPermissionRequest", () => { | |
| test("prefers the current session permission", () => { | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| const permissions = { | |
| root: [permission("perm-root", "root")], | |
| child: [permission("perm-child", "child")], | |
| } | |
| expect(sessionPermissionRequest(sessions, permissions, "root")?.id).toBe("perm-root") | |
| }) | |
| test("returns a nested child permission", () => { | |
| const sessions = [ | |
| session({ id: "root" }), | |
| session({ id: "child", parentID: "root" }), | |
| session({ id: "grand", parentID: "child" }), | |
| session({ id: "other" }), | |
| ] | |
| const permissions = { | |
| grand: [permission("perm-grand", "grand")], | |
| other: [permission("perm-other", "other")], | |
| } | |
| expect(sessionPermissionRequest(sessions, permissions, "root")?.id).toBe("perm-grand") | |
| }) | |
| test("returns undefined without a matching tree permission", () => { | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| const permissions = { | |
| other: [permission("perm-other", "other")], | |
| } | |
| expect(sessionPermissionRequest(sessions, permissions, "root")).toBeUndefined() | |
| }) | |
| test("skips filtered permissions in the current tree", () => { | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| const permissions = { | |
| root: [permission("perm-root", "root")], | |
| child: [permission("perm-child", "child")], | |
| } | |
| expect(sessionPermissionRequest(sessions, permissions, "root", (item) => item.id !== "perm-root"))?.toMatchObject({ | |
| id: "perm-child", | |
| }) | |
| }) | |
| test("returns undefined when all tree permissions are filtered out", () => { | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| const permissions = { | |
| root: [permission("perm-root", "root")], | |
| child: [permission("perm-child", "child")], | |
| } | |
| expect(sessionPermissionRequest(sessions, permissions, "root", () => false)).toBeUndefined() | |
| }) | |
| }) | |
| describe("sessionQuestionRequest", () => { | |
| test("prefers the current session question", () => { | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| const questions = { | |
| root: [question("q-root", "root")], | |
| child: [question("q-child", "child")], | |
| } | |
| expect(sessionQuestionRequest(sessions, questions, "root")?.id).toBe("q-root") | |
| }) | |
| test("returns a nested child question", () => { | |
| const sessions = [ | |
| session({ id: "root" }), | |
| session({ id: "child", parentID: "root" }), | |
| session({ id: "grand", parentID: "child" }), | |
| ] | |
| const questions = { | |
| grand: [question("q-grand", "grand")], | |
| } | |
| expect(sessionQuestionRequest(sessions, questions, "root")?.id).toBe("q-grand") | |
| }) | |
| }) | |
| describe("todoState", () => { | |
| test("hides when there are no todos", () => { | |
| expect(todoState({ count: 0, done: false, live: true })).toBe("hide") | |
| }) | |
| test("opens while the session is still working", () => { | |
| expect(todoState({ count: 2, done: false, live: true })).toBe("open") | |
| }) | |
| test("closes completed todos after a running turn", () => { | |
| expect(todoState({ count: 2, done: true, live: true })).toBe("close") | |
| }) | |
| test("clears stale todos when the turn ends", () => { | |
| expect(todoState({ count: 2, done: false, live: false })).toBe("clear") | |
| }) | |
| test("clears completed todos when the session is no longer live", () => { | |
| expect(todoState({ count: 2, done: true, live: false })).toBe("clear") | |
| }) | |
| }) | |
Xet Storage Details
- Size:
- 4.24 kB
- Xet hash:
- ee3dfa6a4ad5575c5483e55d9cfea29ad2275316ef48d5152c884edfdfc22260
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.