feat(selection): 收紧执行状态交互与页面布局
This commit is contained in:
@@ -1,4 +1,10 @@
|
||||
import { fireEvent, render, screen, within } from "@testing-library/react"
|
||||
import {
|
||||
fireEvent,
|
||||
render,
|
||||
screen,
|
||||
waitFor,
|
||||
within,
|
||||
} from "@testing-library/react"
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest"
|
||||
|
||||
import type { SelectionResults } from "../api/selection.types"
|
||||
@@ -100,6 +106,77 @@ describe("SelectionResultsPage", () => {
|
||||
expect(within(table).getAllByText("平安银行")).toHaveLength(2)
|
||||
})
|
||||
|
||||
it("opens execution status details in a drawer and restores trigger focus", async () => {
|
||||
useSelectionResults.mockReturnValue({
|
||||
data: {
|
||||
...selectedResult,
|
||||
failed_count: 1,
|
||||
failures: [
|
||||
{
|
||||
name: "招商银行",
|
||||
reason: "目标日数据读取失败",
|
||||
status: "data_error",
|
||||
ts_code: "600036.SH",
|
||||
},
|
||||
],
|
||||
status: "partial_success",
|
||||
},
|
||||
isError: false,
|
||||
isPending: false,
|
||||
})
|
||||
|
||||
render(<SelectionResultsPage />)
|
||||
|
||||
const trigger = screen.getByRole("button", {
|
||||
name: "查看执行状态:部分成功,未完成评估 1 条",
|
||||
})
|
||||
fireEvent.click(trigger)
|
||||
|
||||
const dialog = await screen.findByRole("dialog", {
|
||||
name: "知行 B1 执行状态",
|
||||
})
|
||||
const table = within(dialog).getByRole("table")
|
||||
expect(
|
||||
within(table).getByRole("columnheader", { name: "股票名称" }),
|
||||
).toBeInTheDocument()
|
||||
expect(within(table).getByText("招商银行")).toBeInTheDocument()
|
||||
expect(within(table).getByText("600036.SH")).toBeInTheDocument()
|
||||
expect(within(table).getByText("数据读取失败")).toBeInTheDocument()
|
||||
expect(within(table).getByText("目标日数据读取失败")).toBeInTheDocument()
|
||||
expect(
|
||||
screen.queryByRole("heading", { name: "未完成评估" }),
|
||||
).not.toBeInTheDocument()
|
||||
|
||||
fireEvent.click(
|
||||
within(dialog).getByRole("button", { name: "关闭执行状态" }),
|
||||
)
|
||||
await waitFor(() => {
|
||||
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
||||
})
|
||||
expect(document.activeElement).toBe(trigger)
|
||||
})
|
||||
|
||||
it("shows an empty evaluation table when there are no failures", async () => {
|
||||
render(<SelectionResultsPage />)
|
||||
|
||||
fireEvent.click(
|
||||
screen.getByRole("button", {
|
||||
name: "查看执行状态:执行完成,未完成评估 0 条",
|
||||
}),
|
||||
)
|
||||
|
||||
const dialog = await screen.findByRole("dialog", {
|
||||
name: "知行 B1 执行状态",
|
||||
})
|
||||
expect(within(dialog).getByRole("table")).toBeInTheDocument()
|
||||
expect(within(dialog).getByText("暂无未完成评估")).toBeInTheDocument()
|
||||
|
||||
fireEvent.keyDown(dialog, { key: "Escape" })
|
||||
await waitFor(() => {
|
||||
expect(screen.queryByRole("dialog")).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
it("filters signals, updates the detail panel, and expands mobile details", () => {
|
||||
const extraSignal = {
|
||||
...selectedResult.signals[0],
|
||||
|
||||
Reference in New Issue
Block a user