| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- 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" })
- })
- })
|