summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/sync-optimistic.test.ts
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-06 10:02:31 -0600
committerGitHub <[email protected]>2026-02-06 10:02:31 -0600
commit2c58dd6203df7806f57ef6b29672091cb764e871 (patch)
tree10fca96d3098465b497f78e29de8d0a585c4dac3 /packages/app/src/context/sync-optimistic.test.ts
parenta4bc883595df9ea0f752079519081bc602408553 (diff)
downloadopencode-2c58dd6203df7806f57ef6b29672091cb764e871.tar.gz
opencode-2c58dd6203df7806f57ef6b29672091cb764e871.zip
chore: refactoring and tests, splitting up files (#12495)
Diffstat (limited to 'packages/app/src/context/sync-optimistic.test.ts')
-rw-r--r--packages/app/src/context/sync-optimistic.test.ts56
1 files changed, 56 insertions, 0 deletions
diff --git a/packages/app/src/context/sync-optimistic.test.ts b/packages/app/src/context/sync-optimistic.test.ts
new file mode 100644
index 000000000..7deeddd6e
--- /dev/null
+++ b/packages/app/src/context/sync-optimistic.test.ts
@@ -0,0 +1,56 @@
+import { describe, expect, test } from "bun:test"
+import type { Message, Part } from "@opencode-ai/sdk/v2/client"
+import { applyOptimisticAdd, applyOptimisticRemove } from "./sync"
+
+const userMessage = (id: string, sessionID: string): Message => ({
+ id,
+ sessionID,
+ role: "user",
+ time: { created: 1 },
+ agent: "assistant",
+ model: { providerID: "openai", modelID: "gpt" },
+})
+
+const textPart = (id: string, sessionID: string, messageID: string): Part => ({
+ id,
+ sessionID,
+ messageID,
+ type: "text",
+ text: id,
+})
+
+describe("sync optimistic reducers", () => {
+ test("applyOptimisticAdd inserts message in sorted order and stores parts", () => {
+ const sessionID = "ses_1"
+ const draft = {
+ message: { [sessionID]: [userMessage("msg_2", sessionID)] },
+ part: {} as Record<string, Part[] | undefined>,
+ }
+
+ applyOptimisticAdd(draft, {
+ sessionID,
+ message: userMessage("msg_1", sessionID),
+ parts: [textPart("prt_2", sessionID, "msg_1"), textPart("prt_1", sessionID, "msg_1")],
+ })
+
+ expect(draft.message[sessionID]?.map((x) => x.id)).toEqual(["msg_1", "msg_2"])
+ expect(draft.part.msg_1?.map((x) => x.id)).toEqual(["prt_1", "prt_2"])
+ })
+
+ test("applyOptimisticRemove removes message and part entries", () => {
+ const sessionID = "ses_1"
+ const draft = {
+ message: { [sessionID]: [userMessage("msg_1", sessionID), userMessage("msg_2", sessionID)] },
+ part: {
+ msg_1: [textPart("prt_1", sessionID, "msg_1")],
+ msg_2: [textPart("prt_2", sessionID, "msg_2")],
+ } as Record<string, Part[] | undefined>,
+ }
+
+ applyOptimisticRemove(draft, { sessionID, messageID: "msg_1" })
+
+ expect(draft.message[sessionID]?.map((x) => x.id)).toEqual(["msg_2"])
+ expect(draft.part.msg_1).toBeUndefined()
+ expect(draft.part.msg_2).toHaveLength(1)
+ })
+})