109 lines
3.0 KiB
TypeScript
109 lines
3.0 KiB
TypeScript
import { expect, test } from 'vitest';
|
|
|
|
import {
|
|
buildPuzzleWorkCoverSlides,
|
|
formatPlatformWorkDisplayName,
|
|
formatPlatformWorkDisplayTags,
|
|
formatPlatformWorldTime,
|
|
} from './rpgEntryWorldPresentation';
|
|
|
|
test('formatPlatformWorldTime formats backend seconds timestamp text as date', () => {
|
|
expect(formatPlatformWorldTime('1777110165.990127Z')).toBe('2026-04-25');
|
|
});
|
|
|
|
test('formatPlatformWorldTime keeps full year for iso date strings', () => {
|
|
expect(formatPlatformWorldTime('2026-04-25T12:00:00.000Z')).toBe(
|
|
'2026-04-25',
|
|
);
|
|
});
|
|
|
|
test('formatPlatformWorldTime uses utc calendar date for zulu time', () => {
|
|
expect(formatPlatformWorldTime('2026-04-25T00:30:00.000Z')).toBe(
|
|
'2026-04-25',
|
|
);
|
|
});
|
|
|
|
test('formatPlatformWorldTime keeps fallback text for invalid values', () => {
|
|
expect(formatPlatformWorldTime(null)).toBe('未发布');
|
|
expect(formatPlatformWorldTime('not-a-date')).toBe('not-a-date');
|
|
});
|
|
|
|
test('platform work display text limits names and tags by character count', () => {
|
|
expect(formatPlatformWorkDisplayName('热门高分拼图超长标题')).toBe(
|
|
'热门高分拼图超长',
|
|
);
|
|
expect(formatPlatformWorkDisplayTags(['超长机关标签', '星桥', '超长机关标签'])).toEqual([
|
|
'超长机关',
|
|
'星桥',
|
|
]);
|
|
});
|
|
|
|
test('buildPuzzleWorkCoverSlides prefers each level formal image', () => {
|
|
const slides = buildPuzzleWorkCoverSlides({
|
|
workId: 'work-1',
|
|
profileId: 'profile-1',
|
|
ownerUserId: 'user-1',
|
|
authorDisplayName: '玩家',
|
|
levelName: '第一关',
|
|
summary: '拼图摘要',
|
|
themeTags: ['拼图'],
|
|
coverImageSrc: '/cover.png',
|
|
publicationStatus: 'published',
|
|
updatedAt: '2026-04-25T00:00:00.000Z',
|
|
publishedAt: '2026-04-25T00:00:00.000Z',
|
|
publishReady: true,
|
|
levels: [
|
|
{
|
|
levelId: 'level-1',
|
|
levelName: '石桥',
|
|
pictureDescription: '石桥画面',
|
|
selectedCandidateId: 'candidate-2',
|
|
coverImageSrc: '/level-1-cover.png',
|
|
coverAssetId: null,
|
|
generationStatus: 'ready',
|
|
candidates: [
|
|
{
|
|
candidateId: 'candidate-1',
|
|
imageSrc: '/level-1-a.png',
|
|
assetId: 'asset-1',
|
|
prompt: '',
|
|
sourceType: 'generated',
|
|
selected: false,
|
|
},
|
|
{
|
|
candidateId: 'candidate-2',
|
|
imageSrc: '/level-1-b.png',
|
|
assetId: 'asset-2',
|
|
prompt: '',
|
|
sourceType: 'generated',
|
|
selected: false,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
levelId: 'level-2',
|
|
levelName: '星港',
|
|
pictureDescription: '星港画面',
|
|
selectedCandidateId: null,
|
|
coverImageSrc: '/level-2-cover.png',
|
|
coverAssetId: null,
|
|
generationStatus: 'ready',
|
|
candidates: [],
|
|
},
|
|
],
|
|
});
|
|
|
|
expect(slides).toEqual([
|
|
{
|
|
id: 'level-1',
|
|
imageSrc: '/level-1-b.png',
|
|
label: '石桥',
|
|
},
|
|
{
|
|
id: 'level-2',
|
|
imageSrc: '/level-2-cover.png',
|
|
label: '星港',
|
|
},
|
|
]);
|
|
});
|