1
This commit is contained in:
@@ -25,6 +25,9 @@ vi.mock('../ResolvedAssetImage', () => ({
|
||||
vi.mock('../../services/assetReadUrlService', () => ({
|
||||
isGeneratedLegacyPath: (value: string) =>
|
||||
/^\/?generated-[^/?#]+\/.+/u.test(value.trim()),
|
||||
resolveAssetReadUrl: vi.fn((value: string) =>
|
||||
Promise.resolve(`https://signed.example.com/${value.replace(/^\/+/u, '')}`),
|
||||
),
|
||||
}));
|
||||
|
||||
vi.mock('../../services/match3d-works', () => ({
|
||||
@@ -167,6 +170,7 @@ describe('Match3DResultView', () => {
|
||||
expect(match3dWorksService.generateMatch3DWorkTags).toHaveBeenCalledWith({
|
||||
gameName: '水果抓大鹅',
|
||||
themeText: '水果',
|
||||
summary: '',
|
||||
});
|
||||
expect(screen.getByText('果园')).toBeTruthy();
|
||||
expect(screen.getByText('轻量休闲')).toBeTruthy();
|
||||
@@ -500,6 +504,7 @@ describe('Match3DResultView', () => {
|
||||
expect(screen.getByRole('dialog', { name: /水果核心物件/u })).toBeTruthy();
|
||||
expect(screen.getByText('素材名称')).toBeTruthy();
|
||||
expect(screen.getByText('暂无音效')).toBeTruthy();
|
||||
expect(screen.getByLabelText('生成点击音效,10光点')).toBeTruthy();
|
||||
expect(screen.queryByRole('button', { name: '重新生成' })).toBeNull();
|
||||
expect(screen.queryByText('用途')).toBeNull();
|
||||
});
|
||||
@@ -633,7 +638,8 @@ describe('Match3DResultView', () => {
|
||||
fireEvent.change(screen.getByLabelText('物品名称 4'), {
|
||||
target: { value: '苹果' },
|
||||
});
|
||||
fireEvent.click(screen.getByRole('button', { name: '生成物品素材' }));
|
||||
expect(screen.getByRole('button', { name: /生成物品素材 · 2光点/u })).toBeTruthy();
|
||||
fireEvent.click(screen.getByRole('button', { name: /生成物品素材/u }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(match3dWorksService.generateMatch3DItemAssets).toHaveBeenCalledWith(
|
||||
@@ -674,7 +680,7 @@ describe('Match3DResultView', () => {
|
||||
fireEvent.change(screen.getByLabelText('物品名称 1'), {
|
||||
target: { value: '草莓' },
|
||||
});
|
||||
fireEvent.click(screen.getByRole('button', { name: '生成物品素材' }));
|
||||
fireEvent.click(screen.getByRole('button', { name: /生成物品素材/u }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getAllByText('生成中').length).toBeGreaterThan(0);
|
||||
@@ -716,14 +722,20 @@ describe('Match3DResultView', () => {
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: '难度配置' }));
|
||||
|
||||
expect(screen.getByRole('button', { name: /轻松/u })).toBeTruthy();
|
||||
expect(
|
||||
screen.getByRole('button', { name: /标准/u }).getAttribute('aria-pressed'),
|
||||
screen.getByRole('button', { name: '轻松 8次 · 3种' }),
|
||||
).toBeTruthy();
|
||||
const difficultySlider = screen.getByRole('slider', { name: '难度' });
|
||||
expect((difficultySlider as HTMLInputElement).value).toBe('1');
|
||||
expect(
|
||||
screen
|
||||
.getByRole('button', { name: '标准 12次 · 9种' })
|
||||
.getAttribute('aria-pressed'),
|
||||
).toBe('true');
|
||||
expect(screen.getByText('36 件')).toBeTruthy();
|
||||
expect(screen.getAllByText('9 种').length).toBeGreaterThan(0);
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: /硬核/u }));
|
||||
fireEvent.change(difficultySlider, { target: { value: '3' } });
|
||||
|
||||
await waitFor(() => {
|
||||
expect(match3dWorksService.updateMatch3DWork).toHaveBeenCalledWith(
|
||||
@@ -799,7 +811,6 @@ describe('Match3DResultView', () => {
|
||||
);
|
||||
|
||||
expect(screen.getByDisplayValue('物品1')).toBeTruthy();
|
||||
expect(screen.getAllByText('素材已就绪').length).toBeGreaterThan(0);
|
||||
expect(
|
||||
[...document.querySelectorAll('img')].some((image) =>
|
||||
image
|
||||
@@ -845,7 +856,29 @@ describe('Match3DResultView', () => {
|
||||
expect(
|
||||
imageSources.some((source) => source.includes('views/view-05.png')),
|
||||
).toBe(true);
|
||||
expect(screen.getAllByText('5 视角').length).toBeGreaterThan(0);
|
||||
});
|
||||
|
||||
test('物品详情五视角预览使用 1:1 五格布局', () => {
|
||||
render(
|
||||
<Match3DResultView
|
||||
profile={createProfile({
|
||||
clearCount: 3,
|
||||
generatedItemAssets: [createReadyGeneratedItemAsset(1)],
|
||||
})}
|
||||
onBack={() => {}}
|
||||
onStartTestRun={() => {}}
|
||||
/>,
|
||||
);
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: '素材配置' }));
|
||||
fireEvent.click(
|
||||
screen.getByRole('button', { name: '打开物品1物品素材' }),
|
||||
);
|
||||
|
||||
const preview = screen.getByLabelText('物品1五视角预览');
|
||||
expect(preview.className).toContain('aspect-square');
|
||||
expect(preview.className).toContain('grid-cols-[repeat(5,minmax(0,1fr))]');
|
||||
expect(preview.querySelectorAll('img')).toHaveLength(5);
|
||||
});
|
||||
|
||||
test('草稿阶段仅有切割图片时展示 2D 素材', () => {
|
||||
@@ -882,7 +915,11 @@ describe('Match3DResultView', () => {
|
||||
);
|
||||
|
||||
expect(screen.getByDisplayValue('草莓')).toBeTruthy();
|
||||
expect(screen.getAllByText('素材已就绪').length).toBeGreaterThan(0);
|
||||
expect(
|
||||
[...document.querySelectorAll('img')].some((image) =>
|
||||
image.getAttribute('src')?.includes('items/strawberry/image.png'),
|
||||
),
|
||||
).toBe(true);
|
||||
expect(screen.queryByRole('link', { name: /\.glb/u })).toBeNull();
|
||||
});
|
||||
|
||||
@@ -997,6 +1034,11 @@ describe('Match3DResultView', () => {
|
||||
'/generated-match3d-assets/session/profile/background/old/background.png',
|
||||
imageObjectKey:
|
||||
'generated-match3d-assets/session/profile/background/old/background.png',
|
||||
containerPrompt: '旧容器提示词',
|
||||
containerImageSrc:
|
||||
'/generated-match3d-assets/session/profile/ui-container/old/container.png',
|
||||
containerImageObjectKey:
|
||||
'generated-match3d-assets/session/profile/ui-container/old/container.png',
|
||||
status: 'image_ready',
|
||||
error: null,
|
||||
},
|
||||
@@ -1015,6 +1057,11 @@ describe('Match3DResultView', () => {
|
||||
'/generated-match3d-assets/session/profile/background/new/background.png',
|
||||
imageObjectKey:
|
||||
'generated-match3d-assets/session/profile/background/new/background.png',
|
||||
containerPrompt: '新容器提示词',
|
||||
containerImageSrc:
|
||||
'/generated-match3d-assets/session/profile/ui-container/new/container.png',
|
||||
containerImageObjectKey:
|
||||
'generated-match3d-assets/session/profile/ui-container/new/container.png',
|
||||
status: 'image_ready',
|
||||
error: null,
|
||||
},
|
||||
@@ -1026,6 +1073,11 @@ describe('Match3DResultView', () => {
|
||||
'/generated-match3d-assets/session/profile/background/new/background.png',
|
||||
imageObjectKey:
|
||||
'generated-match3d-assets/session/profile/background/new/background.png',
|
||||
containerPrompt: '新容器提示词',
|
||||
containerImageSrc:
|
||||
'/generated-match3d-assets/session/profile/ui-container/new/container.png',
|
||||
containerImageObjectKey:
|
||||
'generated-match3d-assets/session/profile/ui-container/new/container.png',
|
||||
status: 'image_ready',
|
||||
error: null,
|
||||
},
|
||||
@@ -1057,7 +1109,8 @@ describe('Match3DResultView', () => {
|
||||
fireEvent.change(screen.getByLabelText('UI背景图画面描述提示词'), {
|
||||
target: { value: '新背景提示词' },
|
||||
});
|
||||
fireEvent.click(screen.getByRole('button', { name: '重新生成' }));
|
||||
expect(screen.getByRole('button', { name: /重新生成 · 2光点/u })).toBeTruthy();
|
||||
fireEvent.click(screen.getByRole('button', { name: /重新生成/u }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(
|
||||
@@ -1074,6 +1127,8 @@ describe('Match3DResultView', () => {
|
||||
prompt: '新背景提示词',
|
||||
imageSrc:
|
||||
'/generated-match3d-assets/session/profile/background/new/background.png',
|
||||
containerImageSrc:
|
||||
'/generated-match3d-assets/session/profile/ui-container/new/container.png',
|
||||
}),
|
||||
}),
|
||||
],
|
||||
@@ -1128,7 +1183,11 @@ describe('Match3DResultView', () => {
|
||||
);
|
||||
|
||||
expect(screen.getByDisplayValue('草莓')).toBeTruthy();
|
||||
expect(screen.getAllByText('素材已就绪').length).toBeGreaterThan(0);
|
||||
expect(
|
||||
[...document.querySelectorAll('img')].some((image) =>
|
||||
image.getAttribute('src')?.includes('views/view-01.png'),
|
||||
),
|
||||
).toBe(true);
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: '试玩' }));
|
||||
|
||||
@@ -1240,11 +1299,9 @@ describe('Match3DResultView', () => {
|
||||
],
|
||||
}),
|
||||
);
|
||||
expect(
|
||||
document.querySelector(
|
||||
'audio[src="/generated-match3d-assets/audio/click.wav"]',
|
||||
),
|
||||
).toBeTruthy();
|
||||
expect(screen.getByLabelText('草莓点击音效').getAttribute('src')).toBe(
|
||||
'https://signed.example.com/generated-match3d-assets/audio/click.wav',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1312,6 +1369,7 @@ describe('Match3DResultView', () => {
|
||||
'轻快, 休闲',
|
||||
);
|
||||
expect(screen.queryByLabelText('抓大鹅背景音乐提示词')).toBeNull();
|
||||
expect(screen.getByRole('button', { name: /生成音乐 · 5光点/u })).toBeTruthy();
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: /生成音乐/u }));
|
||||
|
||||
@@ -1351,11 +1409,9 @@ describe('Match3DResultView', () => {
|
||||
],
|
||||
}),
|
||||
);
|
||||
expect(
|
||||
document.querySelector(
|
||||
'audio[src="/generated-match3d-assets/audio/music.wav"]',
|
||||
),
|
||||
).toBeTruthy();
|
||||
expect(screen.getByLabelText('抓大鹅背景音乐').getAttribute('src')).toBe(
|
||||
'https://signed.example.com/generated-match3d-assets/audio/music.wav',
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user