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();
});
});