feat: redesign report batch workflow
This commit is contained in:
@@ -9,6 +9,8 @@ import { AdminReportTasksPage } from './AdminReportTasksPage';
|
||||
const { adminApi, clipboardWriteText } = vi.hoisted(() => ({
|
||||
adminApi: {
|
||||
changeReportTaskStatuses: vi.fn(),
|
||||
downloadReportMaterialBatch: vi.fn(),
|
||||
downloadReportMaterialBatchFile: vi.fn(),
|
||||
exportSingleReportMaterial: vi.fn(),
|
||||
getReportMaterialBatch: vi.fn(),
|
||||
getSingleReportMaterialDetail: vi.fn(),
|
||||
@@ -49,7 +51,12 @@ describe('report workbench pages', () => {
|
||||
});
|
||||
|
||||
it('selects and clears every detail on the current page', async () => {
|
||||
adminApi.listReportDetailsPage.mockResolvedValue({ items: [task('1'), task('2')], total: 2, page: 1, pageSize: 10 });
|
||||
adminApi.listReportDetailsPage.mockResolvedValue({
|
||||
items: [task('1'), task('2')],
|
||||
total: 2,
|
||||
page: 1,
|
||||
pageSize: 10,
|
||||
});
|
||||
render(
|
||||
<MemoryRouter>
|
||||
<AdminReportTasksPage />
|
||||
@@ -120,7 +127,9 @@ describe('report workbench pages', () => {
|
||||
channelCount: 1,
|
||||
fileCount: 1,
|
||||
reportTotal: 1,
|
||||
reportingCount: 0,
|
||||
successCount: 0,
|
||||
failedCount: 0,
|
||||
successRate: 0,
|
||||
createdAt: '2026-09-02T01:00:00.000Z',
|
||||
exportFiles: [],
|
||||
@@ -155,11 +164,56 @@ describe('report workbench pages', () => {
|
||||
configurable: true,
|
||||
value: { writeText: clipboardWriteText },
|
||||
});
|
||||
await user.click(await screen.findByRole('button', { name: '打开明细' }));
|
||||
await user.click(await screen.findByRole('button', { name: '报备文件导出' }));
|
||||
expect(await screen.findByText('测试通道')).toBeVisible();
|
||||
expect(screen.getByText(/1\.短信签名:/)).toBeVisible();
|
||||
expect(screen.getByRole('button', { name: '全部下载' })).toBeEnabled();
|
||||
await user.click(screen.getByRole('button', { name: '复制简报' }));
|
||||
await waitFor(() => expect(clipboardWriteText).toHaveBeenCalledWith(content));
|
||||
expect(screen.getByRole('button', { name: '已复制' })).toBeVisible();
|
||||
});
|
||||
|
||||
it('opens batch details in a drawer and keeps status controls in a nested dialog', async () => {
|
||||
const batch = {
|
||||
id: 'batch-2',
|
||||
batchNo: 'RB-DRAWER',
|
||||
status: 'completed',
|
||||
selectedCount: 2,
|
||||
channelCount: 1,
|
||||
fileCount: 1,
|
||||
reportTotal: 2,
|
||||
reportingCount: 1,
|
||||
successCount: 1,
|
||||
failedCount: 0,
|
||||
successRate: 0.5,
|
||||
createdAt: '2026-09-03T01:00:00.000Z',
|
||||
exportFiles: [],
|
||||
briefs: [],
|
||||
};
|
||||
adminApi.listReportMaterialBatches.mockResolvedValue({ items: [batch], total: 1, page: 1, pageSize: 20 });
|
||||
adminApi.getReportMaterialBatch.mockResolvedValue(batch);
|
||||
adminApi.listReportMaterialBatchTasks.mockResolvedValue({
|
||||
items: [task('1'), task('2')],
|
||||
total: 2,
|
||||
page: 1,
|
||||
pageSize: 100,
|
||||
});
|
||||
render(
|
||||
<MemoryRouter>
|
||||
<AdminReportBatchesPage />
|
||||
</MemoryRouter>,
|
||||
);
|
||||
|
||||
const user = userEvent.setup();
|
||||
await user.click(await screen.findByRole('button', { name: '打开明细' }));
|
||||
const drawer = await screen.findByRole('dialog', { name: '批次明细 · RB-DRAWER' });
|
||||
expect(drawer).toHaveClass('report-batch-drawer');
|
||||
await user.click(screen.getByRole('checkbox', { name: '全选批次明细' }));
|
||||
expect(screen.getByRole('button', { name: '批量修改报备状态' })).toBeEnabled();
|
||||
expect(screen.getAllByRole('button', { name: '修改状态' })).toHaveLength(2);
|
||||
await user.click(screen.getByRole('button', { name: '批量修改报备状态' }));
|
||||
expect(await screen.findByRole('dialog', { name: '批量修改 2 条报备状态' })).toBeVisible();
|
||||
expect(screen.getByLabelText('修改后的状态')).toBeVisible();
|
||||
expect(screen.queryByRole('button', { name: '导出本条' })).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user