From 39cd15b9543af45dd8aed75612bf9baebe92abbd Mon Sep 17 00:00:00 2001 From: maria-rcks Date: Wed, 22 Jul 2026 23:36:08 -0400 Subject: [PATCH] test(web): stabilize timeline module setup --- .../components/chat/MessagesTimeline.test.tsx | 47 ++++++++----------- 1 file changed, 19 insertions(+), 28 deletions(-) diff --git a/apps/web/src/components/chat/MessagesTimeline.test.tsx b/apps/web/src/components/chat/MessagesTimeline.test.tsx index 24acb28226117348970d9bbbe011dd8e95faea40..c0b41527fa5246c235e045786ec7a49d37b559cc 100644 --- a/apps/web/src/components/chat/MessagesTimeline.test.tsx +++ b/apps/web/src/components/chat/MessagesTimeline.test.tsx @@ -130,7 +130,9 @@ function matchMedia() { }; } -beforeAll(() => { +let MessagesTimeline: typeof import("./MessagesTimeline").MessagesTimeline; + +beforeAll(async () => { const classList = { add: () => {}, remove: () => {}, @@ -161,7 +163,9 @@ beforeAll(() => { offsetHeight: 0, }, }); -}); + + ({ MessagesTimeline } = await import("./MessagesTimeline")); +}, 30_000); const ACTIVE_THREAD_ENVIRONMENT_ID = EnvironmentId.make("environment-local"); const MESSAGE_CREATED_AT = "2026-03-17T19:12:28.000Z"; @@ -219,8 +223,7 @@ function buildUserTimelineEntry(text: string) { } describe("MessagesTimeline", () => { - it("uses the larger leading inset only when the top fade is enabled", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("uses the larger leading inset only when the top fade is enabled", () => { const timelineEntries = [buildUserTimelineEntry("Hello")]; const compactMarkup = renderToStaticMarkup( @@ -236,8 +239,7 @@ describe("MessagesTimeline", () => { expect(fadedMarkup).toContain("chat-timeline-scroll-fade"); }); - it("keeps assistant changed-files headers sticky below the thread header", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("keeps assistant changed-files headers sticky below the thread header", () => { const assistantMessageId = MessageId.make("message-assistant-with-files"); const turnId = TurnId.make("turn-with-files"); const markup = renderToStaticMarkup( @@ -349,8 +351,7 @@ describe("MessagesTimeline", () => { expect(resolveTimelineMinimapInteractiveWidth(40, true)).toBe("22rem"); }); - it("anchors a sent attachment message using its measured height", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("anchors a sent attachment message using its measured height", () => { const onAnchorReady = vi.fn(); const onAnchorSizeChanged = vi.fn(); const firstEntry = buildUserTimelineEntry("First prompt."); @@ -398,8 +399,7 @@ describe("MessagesTimeline", () => { expect(onAnchorSizeChanged).toHaveBeenCalledWith(secondEntry.message.id, 240); }); - it("renders collapse controls for long user messages", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("renders collapse controls for long user messages", () => { const markup = renderToStaticMarkup( { expect(markup).toContain('data-user-message-footer="true"'); }); - it("does not render collapse controls for short user messages", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("does not render collapse controls for short user messages", () => { const markup = renderToStaticMarkup( { expect(markup).toContain('data-user-message-collapsible="false"'); }); - it("renders inline terminal labels with the composer chip UI", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("renders inline terminal labels with the composer chip UI", () => { const markup = renderToStaticMarkup( { expect(markup).toContain("Show full message"); }, 20_000); - it("renders chips for standalone element-pick context messages", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("renders chips for standalone element-pick context messages", () => { const markup = renderToStaticMarkup( { expect(markup).not.toContain(" { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("keeps the copy button for collapsed long user messages", () => { const markup = renderToStaticMarkup( { expect(markup).toContain('data-user-message-footer="true"'); }); - it("renders context compaction entries in the normal work log", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("renders context compaction entries in the normal work log", () => { const markup = renderToStaticMarkup( { expect(markup).toContain("Work Log"); }); - it("formats changed file paths from the workspace root", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("formats changed file paths from the workspace root", () => { const markup = renderToStaticMarkup( { expect(markup).not.toContain("C:/Users/mike/dev-stuff/t3code/apps/web/src/session-logic.ts"); }); - it("renders review comment contexts as structured cards instead of raw tags", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("renders review comment contexts as structured cards instead of raw tags", () => { const markup = renderToStaticMarkup( { expect(markup).not.toContain("</review_comment>"); }); - it("renders file review comments as source code instead of diffs", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("renders file review comments as source code instead of diffs", () => { const markup = renderToStaticMarkup( { expect(markup).not.toContain('data-testid="file-diff"'); }); - it("renders a failure marker for failed tool lifecycle entries", async () => { - const { MessagesTimeline } = await import("./MessagesTimeline"); + it("renders a failure marker for failed tool lifecycle entries", () => { const markup = renderToStaticMarkup(