import { describe, expect, test } from "bun:test" import type { Session } from "@opencode-ai/sdk/v2" import { areRequestArraysReferentiallyEqual, collectScopedBlockingRequests, } from "./scoped-blocking-requests" const session = (id: string, parentID?: string): Session => ({ id, parentID }) as Session describe("scoped blocking requests", () => { test("collects requests for the current session subtree", () => { const rootRequest = { id: "perm_root" } const childRequest = { id: "perm_child" } const grandchildRequest = { id: "perm_grandchild" } const siblingRequest = { id: "perm_sibling" } const empty: Array = [] const result = collectScopedBlockingRequests( [ session("ses_root"), session("ses_child", "ses_root"), session("ses_grandchild", "ses_child"), session("ses_sibling"), ], { ses_root: [rootRequest], ses_child: [childRequest], ses_grandchild: [grandchildRequest], ses_sibling: [siblingRequest], }, "ses_root", empty, ) expect(result).toEqual([rootRequest, childRequest, grandchildRequest]) }) test("returns the provided empty array when no scoped requests exist", () => { const empty: Array<{ id: string }> = [] expect(collectScopedBlockingRequests([session("ses_root")], {}, "ses_root", empty)).toBe(empty) expect(collectScopedBlockingRequests([session("ses_root")], {}, null, empty)).toBe(empty) }) test("compares request arrays by item identity", () => { const first = { id: "perm_1" } const second = { id: "perm_2" } expect(areRequestArraysReferentiallyEqual([first, second], [first, second])).toBe(true) expect(areRequestArraysReferentiallyEqual([first, second], [second, first])).toBe(false) expect(areRequestArraysReferentiallyEqual([first], [{ id: "perm_1" }])).toBe(false) }) })