fix: unify project create form and timezone data

This commit is contained in:
wangxuming
2026-07-15 10:05:33 +08:00
parent 68d61700d5
commit 49435aeaa2
8 changed files with 126 additions and 58 deletions

View File

@@ -1,6 +1,7 @@
import { fireEvent, render, screen } from "@testing-library/react";
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { MemoryRouter } from "react-router-dom";
import { api } from "../api";
vi.mock("../components/AppShell", () => ({ AppShell: ({ children }: { children: React.ReactNode }) => <div>{children}</div> }));
vi.mock("../hooks/usePollingResource", () => ({
@@ -117,16 +118,44 @@ describe("AdminPage active tickets", () => {
expect(screen.getByRole("button", { name: "保存项目" })).toBeVisible();
});
it("创建项目使用独立表单", () => {
it("创建项目与维护项目使用相同字段", () => {
render(<MemoryRouter initialEntries={["/admin/projects/new"]}><AdminPage /></MemoryRouter>);
expect(screen.getByRole("form", { name: "创建项目" })).toBeVisible();
expect(screen.getByRole("textbox", { name: "项目名称" })).toBeVisible();
expect(screen.getByRole("textbox", { name: "项目编码" })).toBeVisible();
expect(screen.getByRole("combobox", { name: "票号格式" })).toHaveDisplayValue("00000");
expect(screen.getByRole("combobox", { name: "项目状态" })).toHaveDisplayValue("未开放");
expect(screen.getByRole("spinbutton", { name: "每次叫号数量" })).toHaveValue(1);
expect(screen.getByRole("spinbutton", { name: "单个号码预计间隔时间(秒)" })).toHaveValue(60);
expect(screen.getByRole("textbox", { name: "游客官方提示" })).toHaveValue("请您在景区附近等候,注意听从工作人员指引。");
expect(screen.queryByRole("textbox", { name: "时区" })).not.toBeInTheDocument();
expect(screen.getByRole("button", { name: "创建项目" })).toBeVisible();
});
it("创建项目提交完整的默认配置", async () => {
const createdProject = { id: "project-2", code: "NEW-RIDE", name: "新项目", status: "NOT_OPEN", batch_size: 1, timezone: "Asia/Shanghai", ticket_prefix: "A" };
const createProject = vi.spyOn(api, "createProject").mockResolvedValue({ project: createdProject });
const updateProjectSettings = vi.spyOn(api, "updateProjectSettings").mockResolvedValue({ project: createdProject });
try {
render(<MemoryRouter initialEntries={["/admin/projects/new"]}><AdminPage /></MemoryRouter>);
fireEvent.change(screen.getByRole("textbox", { name: "项目名称" }), { target: { value: "新项目" } });
fireEvent.change(screen.getByRole("textbox", { name: "项目编码" }), { target: { value: "new-ride" } });
fireEvent.submit(screen.getByRole("form", { name: "创建项目" }));
await waitFor(() => expect(createProject).toHaveBeenCalledTimes(1));
expect(createProject).toHaveBeenCalledWith({ name: "新项目", code: "NEW-RIDE", timezone: "Asia/Shanghai", ticket_prefix: "A" });
expect(updateProjectSettings).toHaveBeenCalledWith("project-2", {
status: "NOT_OPEN",
call_batch_size: 1,
grace_period_minutes: 5,
eta_interval_seconds: 60,
visitor_notice: "请您在景区附近等候,注意听从工作人员指引。",
});
} finally {
vi.restoreAllMocks();
}
});
it("keeps the screen center free of contact details", () => {
render(<MemoryRouter initialEntries={["/admin/display"]}><AdminPage /></MemoryRouter>);