From eb17109fe04e0087041fb1ec472bef7a6f593dcc Mon Sep 17 00:00:00 2001 From: claude code agent 227 Date: Sun, 21 Jun 2026 05:39:35 +0300 Subject: [PATCH] test(ai-chat): cover the conditional assistant-name signature (#108) Extract the shared assistant-name predicate (resolveAssistantName: trimmed name or null) used by typing-indicator + message-item, and unit-test the branches (name shown; whitespace-only -> 'AI agent' fallback; undefined -> fallback). Behavior-identical (|| -> ?? since the helper returns null). Co-Authored-By: Claude Opus 4.8 --- .../ai-chat/components/message-item.tsx | 3 ++- .../ai-chat/components/typing-indicator.tsx | 5 ++-- .../ai-chat/utils/assistant-name.test.ts | 24 +++++++++++++++++++ .../features/ai-chat/utils/assistant-name.ts | 16 +++++++++++++ 4 files changed, 45 insertions(+), 3 deletions(-) create mode 100644 apps/client/src/features/ai-chat/utils/assistant-name.test.ts create mode 100644 apps/client/src/features/ai-chat/utils/assistant-name.ts diff --git a/apps/client/src/features/ai-chat/components/message-item.tsx b/apps/client/src/features/ai-chat/components/message-item.tsx index a0c37089..2feaa8de 100644 --- a/apps/client/src/features/ai-chat/components/message-item.tsx +++ b/apps/client/src/features/ai-chat/components/message-item.tsx @@ -5,6 +5,7 @@ import type { UIMessage } from "@ai-sdk/react"; import ToolCallCard from "@/features/ai-chat/components/tool-call-card.tsx"; import { ToolUiPart, isToolPart } from "@/features/ai-chat/utils/tool-parts.tsx"; import { renderChatMarkdown } from "@/features/ai-chat/utils/markdown.ts"; +import { resolveAssistantName } from "@/features/ai-chat/utils/assistant-name.ts"; import { describeChatError } from "@/features/ai-chat/utils/error-message.ts"; import classes from "@/features/ai-chat/components/ai-chat.module.css"; @@ -67,7 +68,7 @@ export default function MessageItem({ return ( - {assistantName?.trim() || t("AI agent")} + {resolveAssistantName(assistantName) ?? t("AI agent")} {message.parts.map((part, index) => { if (part.type === "text") { diff --git a/apps/client/src/features/ai-chat/components/typing-indicator.tsx b/apps/client/src/features/ai-chat/components/typing-indicator.tsx index ba6c6db0..27373a3e 100644 --- a/apps/client/src/features/ai-chat/components/typing-indicator.tsx +++ b/apps/client/src/features/ai-chat/components/typing-indicator.tsx @@ -1,5 +1,6 @@ import { Box, Group, Text } from "@mantine/core"; import { useTranslation } from "react-i18next"; +import { resolveAssistantName } from "@/features/ai-chat/utils/assistant-name.ts"; import classes from "@/features/ai-chat/components/ai-chat.module.css"; interface TypingIndicatorProps { @@ -23,12 +24,12 @@ interface TypingIndicatorProps { */ export default function TypingIndicator({ assistantName }: TypingIndicatorProps) { const { t } = useTranslation(); - const name = assistantName?.trim(); + const name = resolveAssistantName(assistantName); return ( - {name || t("AI agent")} + {name ?? t("AI agent")}