修复项目无法删除问题

This commit is contained in:
2026-08-13 20:42:09 +08:00
parent cb88a69012
commit a407e69ba7
18 changed files with 623 additions and 63 deletions

View File

@@ -151,22 +151,23 @@ describe("AdminPage active tickets", () => {
expect(screen.queryByRole("combobox", { name: "预计等待时间方式" })).not.toBeInTheDocument();
expect(screen.getByRole("textbox", { name: "游客官方提示" })).toHaveValue("请在入口附近等候。");
expect(screen.getByRole("button", { name: "保存项目" })).toBeVisible();
expect(screen.getByRole("button", { name: "除项目" })).toBeVisible();
expect(screen.getByRole("button", { name: "除项目" })).toBeVisible();
expect(screen.getByText("有运营历史的已结束项目将从所有项目列表隐藏,历史记录仍保留;无运营历史项目会永久删除。")).toBeVisible();
});
it("确认后除项目,刷新数据并返回列表", async () => {
it("确认后归档或移除项目,刷新数据并返回列表", async () => {
let resolveDelete!: () => void;
const deleteProject = vi.spyOn(api, "deleteProject").mockImplementation(() => new Promise<void>((resolve) => { resolveDelete = resolve; }));
refreshMock.mockResolvedValueOnce(undefined);
try {
render(<MemoryRouter initialEntries={["/admin/projects/project-1"]}><AdminPage /></MemoryRouter>);
fireEvent.click(screen.getByRole("button", { name: "除项目" }));
fireEvent.click(screen.getByRole("button", { name: "除项目" }));
expect(deleteProject).not.toHaveBeenCalled();
fireEvent.click(screen.getByRole("button", { name: "确认除" }));
fireEvent.click(screen.getByRole("button", { name: "确认除" }));
await waitFor(() => expect(deleteProject).toHaveBeenCalledWith("project-1"));
const deletingButton = screen.getByRole("button", { name: "正在除" });
const deletingButton = screen.getByRole("button", { name: "正在除" });
expect(deletingButton).toBeDisabled();
fireEvent.click(deletingButton);
expect(deleteProject).toHaveBeenCalledTimes(1);
@@ -178,15 +179,16 @@ describe("AdminPage active tickets", () => {
}
});
it("除项目失败时留在维护页并显示服务端消息", async () => {
it("归档或移除项目失败时留在维护页并显示服务端消息", async () => {
const deleteProject = vi.spyOn(api, "deleteProject").mockRejectedValue(new ApiError("项目存在活动排队,无法删除", 409));
try {
render(<MemoryRouter initialEntries={["/admin/projects/project-1"]}><AdminPage /></MemoryRouter>);
fireEvent.click(screen.getByRole("button", { name: "除项目" }));
fireEvent.click(screen.getByRole("button", { name: "确认除" }));
fireEvent.click(screen.getByRole("button", { name: "除项目" }));
fireEvent.click(screen.getByRole("button", { name: "确认除" }));
expect(await screen.findByText("项目存在活动排队,无法删除")).toBeVisible();
expect(screen.getByText("移除失败")).toBeVisible();
expect(screen.getByRole("heading", { name: "东门观光车" })).toBeVisible();
} finally {
vi.restoreAllMocks();