diff --git a/ui/src/components/RoutineResponsibleUser.test.tsx b/ui/src/components/RoutineResponsibleUser.test.tsx
index 55e75f6825e..b5836f6ead5 100644
--- a/ui/src/components/RoutineResponsibleUser.test.tsx
+++ b/ui/src/components/RoutineResponsibleUser.test.tsx
@@ -15,7 +15,7 @@ const routine = {
latestRevisionId: "revision-1", canChangeResponsibleUser: true,
} as RoutineDetail;
const users = ["Alex", "Sam"].map((name) => ({
- principalId: `user-${name.toLowerCase()}`, status: "active" as const,
+ principalId: `user-${name.toLowerCase()}`, status: "active" as const, membershipRole: "member" as const,
user: { id: `user-${name.toLowerCase()}`, name, email: `${name.toLowerCase()}@example.test`, image: null },
}));
diff --git a/ui/src/components/task-chat/TaskChatBubble.test.tsx b/ui/src/components/task-chat/TaskChatBubble.test.tsx
index 99416ae0d17..efa46befe8a 100644
--- a/ui/src/components/task-chat/TaskChatBubble.test.tsx
+++ b/ui/src/components/task-chat/TaskChatBubble.test.tsx
@@ -9,6 +9,7 @@ import { ThemeProvider } from "@/context/ThemeContext";
import { IssueGalleryContext } from "@/context/IssueGalleryContext";
import { MemoryRouter, useLocation } from "@/lib/router";
import { TaskChatAgentIdentity, TaskChatBubble } from "./TaskChatBubble";
+import { copyTextToClipboard } from "@/lib/clipboard";
import { paperclipHumanAvatarUrl } from "@/lib/issue-chat-human-author";
import type { TaskChatMessageItem } from "./task-chat-model";
@@ -17,6 +18,8 @@ vi.mock("@/context/CompanyContext", async (importOriginal) => ({
useCompany: () => ({ selectedCompany: { issuePrefix: "TES" } }),
}));
+vi.mock("@/lib/clipboard", () => ({ copyTextToClipboard: vi.fn().mockResolvedValue(undefined) }));
+
function CurrentPath() {
return ;
}
@@ -144,6 +147,36 @@ describe("TaskChatBubble attachment chips", () => {
expect(container.textContent).not.toContain("Sent from iMessage");
});
+ it("copies the viewer's original Markdown beside the timestamp, including attachment links", async () => {
+ const text = "**My message**\n\n[report.txt](/api/attachments/report/content)";
+ flushSync(() => root!.render(
+