Files
waooplus/tests/unit/components/character-card-gallery-aspect-ratio.test.ts

71 lines
2.2 KiB
TypeScript

import * as React from 'react'
import { createElement } from 'react'
import { renderToStaticMarkup } from 'react-dom/server'
import { describe, expect, it, vi } from 'vitest'
import { NextIntlClientProvider } from 'next-intl'
import type { AbstractIntlMessages } from 'next-intl'
vi.mock('@/components/ui/icons', () => ({
AppIcon: () => createElement('span', null),
}))
vi.mock('@/components/task/TaskStatusOverlay', () => ({
default: () => createElement('div', null, 'overlay'),
}))
vi.mock('@/components/media/MediaImageWithLoading', () => ({
MediaImageWithLoading: (props: { containerClassName?: string; className?: string }) =>
createElement('div', { className: [props.containerClassName, props.className].filter(Boolean).join(' ') }),
}))
const messages = {
assets: {
common: {
generateFailed: '生成失败',
},
image: {
optionNumber: '方案 {number}',
},
},
} as const
const TestIntlProvider = NextIntlClientProvider as React.ComponentType<{
locale: string
messages: AbstractIntlMessages
timeZone: string
children?: React.ReactNode
}>
describe('CharacterCardGallery aspect ratio', () => {
it('renders the single-image slot at a fixed 3:2 ratio', async () => {
Reflect.set(globalThis, 'React', React)
const { default: CharacterCardGallery } = await import('@/app/[locale]/workspace/[projectId]/modes/novel-promotion/components/assets/character-card/CharacterCardGallery')
const html = renderToStaticMarkup(
createElement(
TestIntlProvider,
{
locale: 'zh',
messages: messages as unknown as AbstractIntlMessages,
timeZone: 'Asia/Shanghai',
},
createElement(CharacterCardGallery, {
mode: 'single',
characterName: '沈烬',
changeReason: '默认形象',
aspectClassName: 'aspect-[3/2]',
currentImageUrl: null,
selectedIndex: null,
hasMultipleImages: false,
isAppearanceTaskRunning: true,
displayTaskPresentation: null,
onImageClick: () => undefined,
overlayActions: null,
}),
),
)
expect(html).toContain('aspect-[3/2]')
})
})