mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-23 18:55:37 -04:00
9e0d3976e1
Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: James Long <longster@gmail.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: starptech <starptech@starptechs-MBP.fritz.box> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <little-frank@opencord.local> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: runvip <164729189+runvip@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Julian Coy <julian@ex-machina.co> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: Jay <air@live.ca> Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com>
74 lines
2.8 KiB
TypeScript
74 lines
2.8 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import { createPromptState } from "@/context/prompt"
|
|
import { createPromptSubmissionState } from "@/components/prompt-input/submission-state"
|
|
|
|
describe("prompt submission state", () => {
|
|
test("keeps failed submission restoration with the prompt where it started", () => {
|
|
const target = createPromptState()
|
|
const submission = createPromptSubmissionState({
|
|
target,
|
|
prompt: [{ type: "text", content: "prompt-A", start: 0, end: 8 }],
|
|
context: [{ key: "file:src/index.ts:undefined:undefined", type: "file", path: "src/index.ts" }],
|
|
})
|
|
|
|
expect(submission.restore()).toEqual({
|
|
target,
|
|
prompt: [{ type: "text", content: "prompt-A", start: 0, end: 8 }],
|
|
context: [{ key: "file:src/index.ts:undefined:undefined", type: "file", path: "src/index.ts" }],
|
|
})
|
|
})
|
|
|
|
test("moves first-submit restoration and context to the promoted session", () => {
|
|
const draft = createPromptState()
|
|
const session = createPromptState()
|
|
const submission = createPromptSubmissionState({
|
|
target: draft,
|
|
prompt: [{ type: "text", content: "first prompt", start: 0, end: 12 }],
|
|
context: [{ key: "file:src/index.ts:undefined:undefined", type: "file", path: "src/index.ts" }],
|
|
})
|
|
|
|
submission.retarget(session)
|
|
|
|
expect(submission.restore()).toEqual({
|
|
target: session,
|
|
prompt: [{ type: "text", content: "first prompt", start: 0, end: 12 }],
|
|
context: [{ key: "file:src/index.ts:undefined:undefined", type: "file", path: "src/index.ts" }],
|
|
})
|
|
expect(session.context.items()).toHaveLength(1)
|
|
expect(session.context.items()[0]).toMatchObject({ type: "file", path: "src/index.ts" })
|
|
})
|
|
|
|
test("clears the original first-submit prompt after retargeting", () => {
|
|
const workspace = createPromptState()
|
|
const session = createPromptState()
|
|
workspace.set([{ type: "text", content: "first prompt", start: 0, end: 12 }])
|
|
const submission = createPromptSubmissionState({
|
|
target: workspace,
|
|
prompt: workspace.current(),
|
|
context: [],
|
|
})
|
|
|
|
submission.retarget(session)
|
|
submission.clear()
|
|
|
|
expect(workspace.current()[0]).toMatchObject({ type: "text", content: "" })
|
|
expect(session.current()[0]).toMatchObject({ type: "text", content: "" })
|
|
})
|
|
|
|
test("does not restore over a prompt edited after submission", () => {
|
|
const target = createPromptState()
|
|
target.set([{ type: "text", content: "submitted", start: 0, end: 9 }])
|
|
const submission = createPromptSubmissionState({
|
|
target,
|
|
prompt: target.current(),
|
|
context: [],
|
|
})
|
|
|
|
submission.clear()
|
|
target.set([{ type: "text", content: "new draft", start: 0, end: 9 }])
|
|
|
|
expect(submission.restore()).toBeUndefined()
|
|
expect(target.current()[0]).toMatchObject({ type: "text", content: "new draft" })
|
|
})
|
|
})
|