diff options
| author | Adam Malczewski <[email protected]> | 2026-06-07 18:52:13 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-07 18:52:13 +0900 |
| commit | 80f8a219c89a963c485da0f40dc428bf688fedb7 (patch) | |
| tree | 737822344118e5c1c840b8399a554a1898f07093 /src/features/chat/ui.test.ts | |
| parent | 48c6d85c3cc5a57a729f14068e2346b17ed62088 (diff) | |
| download | dispatch-web-80f8a219c89a963c485da0f40dc428bf688fedb7.tar.gz dispatch-web-80f8a219c89a963c485da0f40dc428bf688fedb7.zip | |
Revert "feat(chat): live turn metrics — telemetry reducer + rendering"
This reverts commit 48c6d85c3cc5a57a729f14068e2346b17ed62088.
Diffstat (limited to 'src/features/chat/ui.test.ts')
| -rw-r--r-- | src/features/chat/ui.test.ts | 150 |
1 files changed, 12 insertions, 138 deletions
diff --git a/src/features/chat/ui.test.ts b/src/features/chat/ui.test.ts index 02d3c5a..b31cbf1 100644 --- a/src/features/chat/ui.test.ts +++ b/src/features/chat/ui.test.ts @@ -3,15 +3,9 @@ import { render, screen } from "@testing-library/svelte"; import userEvent from "@testing-library/user-event"; import { describe, expect, it, vi } from "vitest"; import type { RenderedChunk } from "../../core/chunks"; -import type { TelemetryState } from "../../core/telemetry"; -import { initialState } from "../../core/telemetry"; import ChatView from "./ui/ChatView.svelte"; import Composer from "./ui/Composer.svelte"; import ModelSelector from "./ui/ModelSelector.svelte"; -import TurnSummary from "./ui/TurnSummary.svelte"; - -const emptyTelemetry = initialState(); -const noTurnId = null; describe("ChatView", () => { it("renders a message's text chunk", () => { @@ -24,7 +18,7 @@ describe("ChatView", () => { }, ]; - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks } }); expect(screen.getByText("Hello world")).toBeInTheDocument(); }); @@ -40,7 +34,7 @@ describe("ChatView", () => { }, ]; - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks } }); expect(screen.getByText("Hi there")).toBeInTheDocument(); expect(screen.getByText("Hello!")).toBeInTheDocument(); @@ -61,7 +55,7 @@ describe("ChatView", () => { }, ]; - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks } }); expect(screen.getByText("read_file")).toBeInTheDocument(); const pre = screen.getByText((content, element) => { @@ -86,7 +80,7 @@ describe("ChatView", () => { }, ]; - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks } }); expect(screen.getByText("read_file")).toBeInTheDocument(); expect(screen.getByText("file contents here")).toBeInTheDocument(); @@ -102,7 +96,7 @@ describe("ChatView", () => { }, ]; - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks } }); const alert = screen.getByRole("alert"); expect(alert).toHaveTextContent("Something failed"); @@ -118,7 +112,7 @@ describe("ChatView", () => { }, ]; - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks } }); expect(screen.getByText("Rate limited")).toBeInTheDocument(); expect(screen.getByText("[RATE_LIMIT]")).toBeInTheDocument(); @@ -134,7 +128,7 @@ describe("ChatView", () => { }, ]; - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks } }); expect(screen.getByText("System context loaded")).toBeInTheDocument(); }); @@ -149,7 +143,7 @@ describe("ChatView", () => { }, ]; - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks } }); // In-flight chunks render at full opacity (no faded "disabled" look). const wrapper = screen.getByText("Streaming...").closest("div"); @@ -157,7 +151,7 @@ describe("ChatView", () => { }); it("renders empty transcript", () => { - render(ChatView, { props: { chunks: [], telemetry: emptyTelemetry, currentTurnId: noTurnId } }); + render(ChatView, { props: { chunks: [] } }); const log = screen.getByRole("log"); expect(log).toBeInTheDocument(); @@ -205,9 +199,7 @@ describe("ChatView", () => { }, ]; - const { container } = render(ChatView, { - props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId }, - }); + const { container } = render(ChatView, { props: { chunks } }); // One DaisyUI list with two rows (one per call), not separate cards. const lists = container.querySelectorAll("ul.list"); @@ -232,9 +224,7 @@ describe("ChatView", () => { }, ]; - const { container } = render(ChatView, { - props: { chunks, telemetry: emptyTelemetry, currentTurnId: noTurnId }, - }); + const { container } = render(ChatView, { props: { chunks } }); const collapse = container.querySelector(".collapse"); expect(collapse).not.toBeNull(); @@ -257,9 +247,7 @@ describe("ChatView", () => { }, ]; - const { container, rerender } = render(ChatView, { - props: { chunks: streaming, telemetry: emptyTelemetry, currentTurnId: noTurnId }, - }); + const { container, rerender } = render(ChatView, { props: { chunks: streaming } }); // Streaming: "Thinking" + loading dots. expect(screen.getByText("Thinking")).toBeInTheDocument(); @@ -281,8 +269,6 @@ describe("ChatView", () => { provisional: false, }, ], - telemetry: emptyTelemetry, - currentTurnId: noTurnId, }); // Completed: "Thoughts", no dots — and the open state survived the transition. @@ -292,118 +278,6 @@ describe("ChatView", () => { expect(screen.getByRole("checkbox", { name: "Toggle thoughts" })).toBeChecked(); expect(container).toHaveTextContent("hmm, all done"); }); - - it("assistant text shows step metrics footer when step-complete data is available", () => { - const chunks: RenderedChunk[] = [ - { - seq: 1, - role: "assistant", - chunk: { type: "text", text: "Here is my answer" }, - provisional: false, - }, - ]; - - const telemetry: TelemetryState = { - turns: new Map([ - [ - "turn-1", - { - wallMs: 2500, - steps: [ - { - stepId: "turn-1#0" as StepId, - genTotalMs: 1200, - decodeMs: 1000, - usage: { inputTokens: 100, outputTokens: 86 }, - }, - ], - }, - ], - ]), - }; - - render(ChatView, { props: { chunks, telemetry, currentTurnId: "turn-1" } }); - - expect(screen.getByText("Here is my answer")).toBeInTheDocument(); - expect(screen.getByText("1.2s")).toBeInTheDocument(); - expect(screen.getByText("86 t/s")).toBeInTheDocument(); - expect(screen.getByText("86 tok")).toBeInTheDocument(); - }); - - it("does not show metrics footer when no step data exists", () => { - const chunks: RenderedChunk[] = [ - { - seq: 1, - role: "assistant", - chunk: { type: "text", text: "Still streaming" }, - provisional: true, - }, - ]; - - render(ChatView, { props: { chunks, telemetry: emptyTelemetry, currentTurnId: "turn-1" } }); - - expect(screen.getByText("Still streaming")).toBeInTheDocument(); - expect(screen.queryByText("t/s")).toBeNull(); - expect(screen.queryByText("tok")).toBeNull(); - }); -}); - -describe("TurnSummary", () => { - it("renders turn stats when telemetry has data", () => { - const telemetry: TelemetryState = { - turns: new Map([ - [ - "turn-1", - { - wallMs: 4200, - steps: [ - { - stepId: "turn-1#0" as StepId, - genTotalMs: 2000, - decodeMs: 1500, - usage: { inputTokens: 500, outputTokens: 300 }, - }, - { - stepId: "turn-1#1" as StepId, - genTotalMs: 1800, - decodeMs: 1200, - usage: { inputTokens: 600, outputTokens: 200 }, - }, - ], - }, - ], - ]), - }; - - render(TurnSummary, { props: { telemetry, turnId: "turn-1" } }); - - expect(screen.getByText("Turn")).toBeInTheDocument(); - expect(screen.getByText("4.2s")).toBeInTheDocument(); - expect(screen.getByText("Tokens")).toBeInTheDocument(); - expect(screen.getByText("1,600")).toBeInTheDocument(); - expect(screen.getByText("Output")).toBeInTheDocument(); - expect(screen.getByText("500")).toBeInTheDocument(); - expect(screen.getByText("Input")).toBeInTheDocument(); - expect(screen.getByText("1,100")).toBeInTheDocument(); - expect(screen.getByText("Steps")).toBeInTheDocument(); - expect(screen.getByText("2")).toBeInTheDocument(); - expect(screen.getByText("TPS")).toBeInTheDocument(); - expect(screen.getByText("185 t/s")).toBeInTheDocument(); - }); - - it("renders nothing when turnId is null", () => { - const { container } = render(TurnSummary, { - props: { telemetry: emptyTelemetry, turnId: null }, - }); - expect(container.querySelector(".stats")).toBeNull(); - }); - - it("renders nothing when turn metrics not found", () => { - const { container } = render(TurnSummary, { - props: { telemetry: emptyTelemetry, turnId: "nonexistent" }, - }); - expect(container.querySelector(".stats")).toBeNull(); - }); }); describe("Composer", () => { |
