authorgravatar for me@t3.ggTheo Browne <me@t3.gg> 2026-07-27 03:44:29-07:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-07-27 03:44:29-07:00
log23ea08daf27a2f56b85e605dd3d36f66bd1a132d
tree38e59cdda216ac005ac4d06751554df0e265adda
parentb4680cbfd064d59fdd2386a5ac6fc75e26e8c96b
signature Signed by PGP key B5690EEEBB952194

test: account for lazy thread feed details (#4628)


1 files changed, 23 insertions(+), 4 deletions(-)

apps/server/test/ActivityPayloadProjection.test.ts+23-4
...@@ -10,7 +10,7 @@ import {...@@ -10,7 +10,7 @@ import {
10} from "@t3tools/contracts";10} from "@t3tools/contracts";
11import { describe, expect, it } from "vite-plus/test";11import { describe, expect, it } from "vite-plus/test";
1212
13import { buildThreadFeed } from "../../mobile/src/lib/threadActivity.ts";13import { buildThreadFeed, type ThreadFeedActivity } from "../../mobile/src/lib/threadActivity.ts";
14import { deriveWorkLogEntries } from "../../web/src/session-logic.ts";14import { deriveWorkLogEntries } from "../../web/src/session-logic.ts";
15import {15import {
16 projectActivityEvent,16 projectActivityEvent,
...@@ -134,6 +134,27 @@ const fixtures = [...@@ -134,6 +134,27 @@ const fixtures = [
134] satisfies ReadonlyArray<OrchestrationThreadActivity>;134] satisfies ReadonlyArray<OrchestrationThreadActivity>;
135135
136describe("projectActivityPayload", () => {136describe("projectActivityPayload", () => {
137 function comparableActivity(activity: ThreadFeedActivity) {
138 return {
139 ...activity,
140 fullDetail: activity.getFullDetail(),
141 copyText: activity.getCopyText(),
142 getFullDetail: undefined,
143 getCopyText: undefined,
144 };
145 }
146
147 function comparableThreadFeed(activities: ReadonlyArray<OrchestrationThreadActivity>) {
148 return buildThreadFeed(makeThread(activities)).map((entry) =>
149 entry.type === "activity-group"
150 ? {
151 ...entry,
152 activities: entry.activities.map(comparableActivity),
153 }
154 : entry,
155 );
156 }
157
137 it("drops unread bulk while retaining command, file, tool, and summary inputs", () => {158 it("drops unread bulk while retaining command, file, tool, and summary inputs", () => {
138 const projected = projectActivityPayload(fixtures[0]!);159 const projected = projectActivityPayload(fixtures[0]!);
139 expect(projected.payload).toEqual({160 expect(projected.payload).toEqual({
...@@ -170,9 +191,7 @@ describe("projectActivityPayload", () => {...@@ -170,9 +191,7 @@ describe("projectActivityPayload", () => {
170 for (const activity of fixtures) {191 for (const activity of fixtures) {
171 const projected = projectActivityPayload(activity);192 const projected = projectActivityPayload(activity);
172 expect(deriveWorkLogEntries([projected])).toEqual(deriveWorkLogEntries([activity]));193 expect(deriveWorkLogEntries([projected])).toEqual(deriveWorkLogEntries([activity]));
173 expect(buildThreadFeed(makeThread([projected]))).toEqual(194 expect(comparableThreadFeed([projected])).toEqual(comparableThreadFeed([activity]));
174 buildThreadFeed(makeThread([activity])),
175 );
176 }195 }
177 });196 });
178197