feat: integrate learning module
Some checks failed
Electron E2E / Electron E2E (macos-latest) (push) Has been cancelled
Electron E2E / Electron E2E (ubuntu-latest) (push) Has been cancelled
Electron E2E / Electron E2E (windows-latest) (push) Has been cancelled

This commit is contained in:
inman
2026-08-16 20:52:16 +08:00
parent 26b52d76e3
commit 01bee3188b
107 changed files with 6318 additions and 12063 deletions

View File

@@ -62,6 +62,21 @@ async function advancePoll() {
});
}
async function submitProjectMetadata() {
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
fireEvent.change(screen.getByLabelText(/发布者姓名/), { target: { value: '小明' } });
fireEvent.change(screen.getByLabelText(/发布者年龄/), { target: { value: '12' } });
fireEvent.change(screen.getByLabelText(/项目简介/), { target: { value: '这是一个太空清洁小游戏。' } });
const cover = new File([new Uint8Array([1, 2, 3])], 'cover.png', { type: 'image/png' });
fireEvent.change(screen.getByTestId('project-publish-cover'), { target: { files: [cover] } });
fireEvent.click(screen.getByRole('button', { name: '提交审核' }));
await act(async () => {
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
});
}
describe('ProjectPublishAction', () => {
beforeEach(() => {
vi.useFakeTimers();
@@ -74,12 +89,12 @@ describe('ProjectPublishAction', () => {
vi.useRealTimers();
});
it('submits automatic metadata and locks after Builder succeeds', async () => {
it('submits user-entered metadata and cover, then locks after Builder succeeds', async () => {
fetchCurrentWorksProjectStatusMock.mockResolvedValue(projectStatus('succeeded'));
render(<ProjectPublishAction project={project} projectType="mini_game" />);
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
expect(screen.getByRole('button', { name: '正在生成本次构建结果…' })).toBeDisabled();
await submitProjectMetadata();
expect(screen.getByRole('button', { name: '正在等待云端检查…' })).toBeDisabled();
await flushSubmission();
expect(screen.getByTestId('project-publish-status')).toHaveTextContent(
@@ -91,12 +106,20 @@ describe('ProjectPublishAction', () => {
project: {
app_id: 'makelore-prj-space-cleaner',
title: 'space-cleaner',
summary: 'space-cleaner由 Makelore 创建的作品。',
summary: '这是一个太空清洁小游戏。',
description: null,
cover_url: null,
creator_name: '小明',
creator_age: 12,
category: 'mini_game',
age_band: null,
difficulty: null,
},
cover: expect.objectContaining({
fileName: 'cover.png',
mimeType: 'image/png',
dataBase64: 'AQID',
}),
});
expect(fetchCurrentWorksProjectStatusMock).not.toHaveBeenCalled();
@@ -115,7 +138,7 @@ describe('ProjectPublishAction', () => {
);
render(<ProjectPublishAction project={project} projectType="mini_game" />);
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
await submitProjectMetadata();
await flushSubmission();
await advancePoll();
@@ -134,7 +157,7 @@ describe('ProjectPublishAction', () => {
);
render(<ProjectPublishAction project={project} projectType="mini_game" />);
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
await submitProjectMetadata();
await flushSubmission();
await advancePoll();
@@ -157,7 +180,7 @@ describe('ProjectPublishAction', () => {
fetchCurrentWorksProjectStatusMock.mockResolvedValue(projectStatus('succeeded'));
render(<ProjectPublishAction project={project} projectType="mini_game" />);
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
await submitProjectMetadata();
await flushSubmission();
expect(screen.getByTestId('project-publish-binding-warning')).toHaveTextContent(
@@ -178,7 +201,7 @@ describe('ProjectPublishAction', () => {
fetchCurrentWorksProjectStatusMock.mockResolvedValue(status);
render(<ProjectPublishAction project={project} projectType="mini_game" />);
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
await submitProjectMetadata();
await flushSubmission();
await act(async () => {
await vi.runAllTimersAsync();
@@ -198,7 +221,7 @@ describe('ProjectPublishAction', () => {
));
render(<ProjectPublishAction project={project} projectType="mini_game" />);
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
await submitProjectMetadata();
await flushSubmission();
const failure = screen.getByTestId('project-publish-failure');
@@ -215,7 +238,7 @@ describe('ProjectPublishAction', () => {
));
render(<ProjectPublishAction project={project} projectType="mini_game" />);
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
await submitProjectMetadata();
await flushSubmission();
const failure = screen.getByTestId('project-publish-failure');
@@ -230,13 +253,15 @@ describe('ProjectPublishAction', () => {
const longName = `作品-${'x'.repeat(250)}`;
render(<ProjectPublishAction project={{ ...project, name: longName }} projectType="mini_program" />);
fireEvent.click(screen.getByRole('button', { name: '一键提交审核' }));
await submitProjectMetadata();
await flushSubmission();
const input = publishWorksProjectSourceMock.mock.calls[0]?.[0];
expect(input.project.app_id).toBe('makelore-prj-space-cleaner');
expect(input.project.title).toHaveLength(160);
expect(input.project.summary).toBe(`${input.project.title},由 Makelore 创建的作品。`);
expect(input.project.summary).toBe('这是一个太空清洁小游戏。');
expect(input.project.creator_name).toBe('小明');
expect(input.project.creator_age).toBe(12);
expect(input.project.category).toBe('mini_program');
});
});