import { render, screen } from '@testing-library/react'; import '@testing-library/jest-dom'; import ServicesPage from './page'; jest.mock('@/lib/cms/data-server', () => ({ getPublishedItems: jest.fn(), getPageCopy: jest.fn().mockResolvedValue(null), })); jest.mock('./services-content-v3', () => ({ __esModule: true, default: function MockServicesContentV3({ services }: { services: Array<{ id: string; title: string }> }) { return (
{services.map((item) => (
{item.title}
))}
); }, })); import { getPublishedItems } from '@/lib/cms/data-server'; const mockedGetPublishedItems = getPublishedItems as jest.MockedFunction; const createMockService = (topOverrides: Record = {}, dataOverrides: Record = {}) => ({ id: 'item-1', modelId: 'model-service', modelCode: 'service', title: '测试服务', slug: 'test-service', locale: 'zh-CN', status: 'published', data: { id: 'test-service', slug: 'test-service', title: '测试服务', description: '测试服务描述', icon: 'Lightbulb', overview: '测试服务概述', features: ['能力一:描述一'], benefits: ['价值一'], capabilities: ['能力一'], process: ['步骤一:描述一'], heroThemeId: 'service', caseStudies: [], dataProofs: [], ...dataOverrides, }, version: 1, sortOrder: 0, createdBy: 'system', updatedBy: 'system', createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(), ...topOverrides, }); describe('ServicesPage', () => { beforeEach(() => { jest.clearAllMocks(); mockedGetPublishedItems.mockResolvedValue([]); }); it('renders empty state when no CMS service items exist', async () => { const page = await ServicesPage(); render(page); expect(screen.getByTestId('services-content')).toBeInTheDocument(); expect(screen.queryByTestId('service-item')).not.toBeInTheDocument(); }); it('maps CMS items to Service shape', async () => { mockedGetPublishedItems.mockResolvedValue([ createMockService(), ] as unknown as Awaited>); const page = await ServicesPage(); render(page); expect(screen.getByText('测试服务')).toBeInTheDocument(); }); it('falls back to item.title when data.title is missing', async () => { mockedGetPublishedItems.mockResolvedValue([ createMockService( { title: 'Fallback Title' }, { title: undefined }, ), ] as unknown as Awaited>); const page = await ServicesPage(); render(page); expect(screen.getByText('Fallback Title')).toBeInTheDocument(); }); });