opencode/packages/tui/test/prompt/history-provider.test.tsx
2026-08-01 15:05:02 +00:00

42 lines
1.5 KiB
TypeScript

/** @jsxImportSource @opentui/solid */
import { testRender } from "@opentui/solid"
import { expect, test } from "bun:test"
import { mkdir } from "node:fs/promises"
import path from "node:path"
import { TuiPathsProvider } from "../../src/context/runtime"
import { PromptHistoryProvider, usePromptHistory } from "../../src/prompt/history"
import { tmpdir } from "../fixture/fixture"
test("down rejects at the newest history item with an empty prompt", async () => {
await using tmp = await tmpdir()
const state = path.join(tmp.path, "state")
await mkdir(state, { recursive: true })
let history: ReturnType<typeof usePromptHistory>
function Consumer() {
history = usePromptHistory()
return <box />
}
const app = await testRender(() => (
<TuiPathsProvider value={{ cwd: tmp.path, home: tmp.path, state, worktree: tmp.path }}>
<PromptHistoryProvider>
<Consumer />
</PromptHistoryProvider>
</TuiPathsProvider>
))
try {
await app.renderOnce()
history!.append("ses_one", { text: "previous", files: [], agents: [], pasted: [] })
expect(history!.move("ses_one", 1, "")).toBeUndefined()
expect(history!.move("ses_one", -1, "")?.text).toBe("previous")
expect(history!.move("ses_one", 1, "previous")?.text).toBe("")
history!.append("ses_two", { text: "other", files: [], agents: [], pasted: [] })
expect(history!.move("ses_two", -1, "")?.text).toBe("other")
expect(history!.move("ses_one", -1, "")?.text).toBe("previous")
} finally {
app.renderer.destroy()
}
})