summaryrefslogtreecommitdiffhomepage
path: root/src/app/App.test.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-10-21 03:23:35 +0900
committerAdam Malczewski <[email protected]>2026-10-21 03:23:35 +0900
commit550ade33285d1f39a909733e02a6b27211464df2 (patch)
tree365672bb62798b2b64d44a18b237f1f34394073f /src/app/App.test.ts
parent0c0f366b3820136c9877f80005939011c30b2de4 (diff)
downloaddispatch-web-550ade33285d1f39a909733e02a6b27211464df2.tar.gz
dispatch-web-550ade33285d1f39a909733e02a6b27211464df2.zip
fix(review-4.7): preserve images through composer queue submissions
Diffstat (limited to 'src/app/App.test.ts')
-rw-r--r--src/app/App.test.ts47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/app/App.test.ts b/src/app/App.test.ts
index 183b8b4..14dac3a 100644
--- a/src/app/App.test.ts
+++ b/src/app/App.test.ts
@@ -434,6 +434,53 @@ describe("App component interaction tests", () => {
store.dispose();
});
+ it.each([
+ "look at this",
+ "",
+ ])("queues staged images through the full UI with text %j", async (text) => {
+ const ws = fakeSocket();
+ const store = createAppStore({
+ socketFactory: () => ws,
+ fetchImpl: fakeFetchImpl(),
+ localStorage: createFakeStorage(),
+ chatFlushScheduler: null,
+ });
+ ws.resolveOpen();
+ const { container } = render(App, { props: { store, onNavigate: vi.fn() } });
+ const user = userEvent.setup();
+ const textarea = screen.getByRole("textbox", { name: "Message input" });
+ await user.type(textarea, "start");
+ await user.click(screen.getByRole("button", { name: "Send" }));
+ const conversationId = activeConversationId(store);
+ ws.feedServerMessage({
+ type: "chat.delta",
+ event: { type: "turn-start", conversationId, turnId: "t1" },
+ });
+ if (text) await user.type(textarea, text);
+ const input = container.querySelector('input[type="file"]') as HTMLInputElement;
+ Object.defineProperty(input, "files", {
+ value: [new File(["GIF"], "shot.gif", { type: "image/gif" })],
+ });
+ input.dispatchEvent(new Event("change", { bubbles: true }));
+ await screen.findByRole("button", { name: "Remove image" });
+ ws.sent.length = 0;
+
+ await user.click(screen.getByRole("button", { name: "Queue" }));
+
+ expect(sentMessages(ws).filter((m: { type: string }) => m.type.startsWith("chat."))).toEqual([
+ {
+ type: "chat.queue",
+ conversationId,
+ workspaceId: "default",
+ text,
+ images: [{ url: "data:image/gif;base64,R0lG", mimeType: "image/gif" }],
+ },
+ ]);
+ expect(textarea).toHaveValue("");
+ expect(screen.queryByRole("button", { name: "Remove image" })).not.toBeInTheDocument();
+ store.dispose();
+ });
+
it("incoming chat.delta renders text in the chat transcript", async () => {
const ws = fakeSocket();
const store = createAppStore({