82 lines
2.7 KiB
TypeScript
82 lines
2.7 KiB
TypeScript
import * as React from 'react'
|
|
import { createElement } from 'react'
|
|
import type { ComponentProps, ReactElement } from 'react'
|
|
import { describe, expect, it, vi } from 'vitest'
|
|
import { renderToStaticMarkup } from 'react-dom/server'
|
|
import { NextIntlClientProvider } from 'next-intl'
|
|
import type { AbstractIntlMessages } from 'next-intl'
|
|
import { LocationCreationModal } from '@/components/shared/assets/LocationCreationModal'
|
|
|
|
vi.mock('@/lib/query/hooks', () => ({
|
|
useAiCreateProjectLocation: vi.fn(() => ({ mutateAsync: vi.fn() })),
|
|
useAiDesignLocation: vi.fn(() => ({ mutateAsync: vi.fn() })),
|
|
useCreateAssetHubLocation: vi.fn(() => ({ mutateAsync: vi.fn() })),
|
|
useGenerateLocationImage: vi.fn(() => ({ mutateAsync: vi.fn() })),
|
|
useCreateProjectLocation: vi.fn(() => ({ mutateAsync: vi.fn() })),
|
|
useGenerateProjectLocationImage: vi.fn(() => ({ mutateAsync: vi.fn() })),
|
|
}))
|
|
|
|
const messages = {
|
|
assetModal: {
|
|
location: {
|
|
title: '新建场景',
|
|
name: '场景名称',
|
|
namePlaceholder: '请输入场景名称',
|
|
description: '场景描述',
|
|
descPlaceholder: '请输入场景描述...',
|
|
},
|
|
artStyle: { title: '画面风格' },
|
|
aiDesign: {
|
|
title: 'AI 设计',
|
|
placeholderLocation: '描述场景氛围和环境...',
|
|
generating: '设计中...',
|
|
generate: '生成',
|
|
tip: '输入简单描述,AI 帮你生成详细设定',
|
|
},
|
|
common: {
|
|
cancel: '取消',
|
|
addOnlyLocation: '仅添加场景',
|
|
addOnlyToAssetHubLocation: '仅添加场景到资产库',
|
|
addAndGeneratePrefix: '添加并生成',
|
|
generateCountSuffix: '张图片',
|
|
selectGenerateCount: '选择生成数量',
|
|
optional: '(可选)',
|
|
},
|
|
errors: {
|
|
createFailed: '创建失败',
|
|
aiDesignFailed: 'AI 设计失败',
|
|
insufficientBalance: '账户余额不足',
|
|
},
|
|
},
|
|
} as const
|
|
|
|
const renderWithIntl = (node: ReactElement) => {
|
|
const providerProps: ComponentProps<typeof NextIntlClientProvider> = {
|
|
locale: 'zh',
|
|
messages: messages as unknown as AbstractIntlMessages,
|
|
timeZone: 'Asia/Shanghai',
|
|
children: node,
|
|
}
|
|
|
|
return renderToStaticMarkup(
|
|
createElement(NextIntlClientProvider, providerProps),
|
|
)
|
|
}
|
|
|
|
describe('LocationCreationModal', () => {
|
|
it('renders add-only and add-and-generate actions in the fixed footer', () => {
|
|
Reflect.set(globalThis, 'React', React)
|
|
const html = renderWithIntl(
|
|
createElement(LocationCreationModal, {
|
|
mode: 'asset-hub',
|
|
onClose: () => undefined,
|
|
onSuccess: () => undefined,
|
|
}),
|
|
)
|
|
|
|
expect(html).toContain('仅添加场景到资产库')
|
|
expect(html).toContain('添加并生成')
|
|
expect(html).toContain('取消')
|
|
})
|
|
})
|