From 80f86afbca734d96a91dcb9b1862b5790b9c2d25 Mon Sep 17 00:00:00 2001 From: yyh Date: Mon, 2 Mar 2026 15:21:53 +0800 Subject: [PATCH] fix: tests and named import --- .../header/account-dropdown/index.spec.tsx | 2 + .../header/account-dropdown/support.spec.tsx | 38 ++++++++++++------- .../header/account-dropdown/support.tsx | 5 +-- 3 files changed, 29 insertions(+), 16 deletions(-) diff --git a/web/app/components/header/account-dropdown/index.spec.tsx b/web/app/components/header/account-dropdown/index.spec.tsx index a954351267..65399af36d 100644 --- a/web/app/components/header/account-dropdown/index.spec.tsx +++ b/web/app/components/header/account-dropdown/index.spec.tsx @@ -65,6 +65,7 @@ vi.mock('@/context/i18n', () => ({ const { mockConfig, mockEnv } = vi.hoisted(() => ({ mockConfig: { IS_CLOUD_EDITION: false, + ZENDESK_WIDGET_KEY: '', }, mockEnv: { env: { @@ -74,6 +75,7 @@ const { mockConfig, mockEnv } = vi.hoisted(() => ({ })) vi.mock('@/config', () => ({ get IS_CLOUD_EDITION() { return mockConfig.IS_CLOUD_EDITION }, + get ZENDESK_WIDGET_KEY() { return mockConfig.ZENDESK_WIDGET_KEY }, IS_DEV: false, IS_CE_EDITION: false, })) diff --git a/web/app/components/header/account-dropdown/support.spec.tsx b/web/app/components/header/account-dropdown/support.spec.tsx index b30a290ea5..90bcb9f3ec 100644 --- a/web/app/components/header/account-dropdown/support.spec.tsx +++ b/web/app/components/header/account-dropdown/support.spec.tsx @@ -1,6 +1,7 @@ import type { AppContextValue } from '@/context/app-context' import { fireEvent, render, screen } from '@testing-library/react' +import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger } from '@/app/components/base/ui/dropdown-menu' import { Plan } from '@/app/components/billing/type' import { useAppContext } from '@/context/app-context' import { baseProviderContextValue, useProviderContext } from '@/context/provider-context' @@ -93,10 +94,21 @@ describe('Support', () => { }) }) + const renderSupport = () => { + return render( + {}}> + open + + + + , + ) + } + describe('Rendering', () => { it('should render support menu trigger', () => { // Act - render() + renderSupport() // Assert expect(screen.getByText('common.userProfile.support')).toBeInTheDocument() @@ -104,8 +116,8 @@ describe('Support', () => { it('should show forum and community links when opened', () => { // Act - render() - fireEvent.click(screen.getByRole('button')) + renderSupport() + fireEvent.click(screen.getByText('common.userProfile.support')) // Assert expect(screen.getByText('common.userProfile.forum')).toBeInTheDocument() @@ -116,8 +128,8 @@ describe('Support', () => { describe('Plan-based Channels', () => { it('should show "Contact Us" when ZENDESK_WIDGET_KEY is present', () => { // Act - render() - fireEvent.click(screen.getByRole('button')) + renderSupport() + fireEvent.click(screen.getByText('common.userProfile.support')) // Assert expect(screen.getByText('common.userProfile.contactUs')).toBeInTheDocument() @@ -134,8 +146,8 @@ describe('Support', () => { }) // Act - render() - fireEvent.click(screen.getByRole('button')) + renderSupport() + fireEvent.click(screen.getByText('common.userProfile.support')) // Assert expect(screen.queryByText('common.userProfile.contactUs')).not.toBeInTheDocument() @@ -147,8 +159,8 @@ describe('Support', () => { mockZendeskKey.value = '' // Act - render() - fireEvent.click(screen.getByRole('button')) + renderSupport() + fireEvent.click(screen.getByText('common.userProfile.support')) // Assert expect(screen.getByText('common.userProfile.emailSupport')).toBeInTheDocument() @@ -159,8 +171,8 @@ describe('Support', () => { describe('Interactions and Links', () => { it('should call toggleZendeskWindow and closeAccountDropdown when "Contact Us" is clicked', () => { // Act - render() - fireEvent.click(screen.getByRole('button')) + renderSupport() + fireEvent.click(screen.getByText('common.userProfile.support')) fireEvent.click(screen.getByText('common.userProfile.contactUs')) // Assert @@ -170,8 +182,8 @@ describe('Support', () => { it('should have correct forum and community links', () => { // Act - render() - fireEvent.click(screen.getByRole('button')) + renderSupport() + fireEvent.click(screen.getByText('common.userProfile.support')) // Assert const forumLink = screen.getByText('common.userProfile.forum').closest('a') diff --git a/web/app/components/header/account-dropdown/support.tsx b/web/app/components/header/account-dropdown/support.tsx index 9ee5d03862..e6519d7ff2 100644 --- a/web/app/components/header/account-dropdown/support.tsx +++ b/web/app/components/header/account-dropdown/support.tsx @@ -3,7 +3,7 @@ import { useTranslation } from 'react-i18next' import { DropdownMenuGroup, DropdownMenuItem, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger } from '@/app/components/base/ui/dropdown-menu' import { toggleZendeskWindow } from '@/app/components/base/zendesk/utils' import { Plan } from '@/app/components/billing/type' -import * as config from '@/config' +import { ZENDESK_WIDGET_KEY } from '@/config' import { useAppContext } from '@/context/app-context' import { useProviderContext } from '@/context/provider-context' import { cn } from '@/utils/classnames' @@ -48,8 +48,7 @@ export default function Support({ closeAccountDropdown }: SupportProps) { const { plan } = useProviderContext() const { userProfile, langGeniusVersionInfo } = useAppContext() const hasDedicatedChannel = plan.type !== Plan.sandbox - const zendeskWidgetKey = 'ZENDESK_WIDGET_KEY' in config ? config.ZENDESK_WIDGET_KEY : '' - const hasZendeskWidget = !!zendeskWidgetKey?.trim() + const hasZendeskWidget = !!ZENDESK_WIDGET_KEY?.trim() return (