58 lines
2.3 KiB
JavaScript
58 lines
2.3 KiB
JavaScript
import { fireEvent, render, screen } from "@testing-library/react";
|
||
import { expect, test, vi } from "vitest";
|
||
import { MemoryRouter, Route, Routes, useLocation } from "react-router-dom";
|
||
import { QueryProvider } from "@/shared/query/QueryProvider.jsx";
|
||
import { getAppUser } from "@/features/app-users/api";
|
||
import { AppUserDetailPage } from "@/features/app-users/pages/AppUserDetailPage.jsx";
|
||
|
||
// AppUserDetailView 会静态导入 issueAppUserAccessToken,mock 工厂缺少该导出会直接导致模块加载失败。
|
||
vi.mock("@/features/app-users/api", () => ({ getAppUser: vi.fn(), issueAppUserAccessToken: vi.fn() }));
|
||
|
||
test("full user detail route loads the URL user and returns to its source list", async () => {
|
||
vi.mocked(getAppUser).mockResolvedValue({
|
||
age: 24,
|
||
defaultDisplayUserId: "163337",
|
||
gender: "female",
|
||
levels: {
|
||
charm: { displayLevel: 3, realLevel: 3 },
|
||
game: { displayLevel: 6, realLevel: 6 },
|
||
wealth: { displayLevel: 4, realLevel: 4 },
|
||
},
|
||
status: "active",
|
||
userId: "10001",
|
||
username: "tester",
|
||
vip: { active: false, level: 0 },
|
||
});
|
||
|
||
render(
|
||
<QueryProvider>
|
||
<MemoryRouter
|
||
initialEntries={[
|
||
{
|
||
pathname: "/app/users/10001",
|
||
state: { from: "/app/users?status=active" },
|
||
},
|
||
]}
|
||
>
|
||
<Routes>
|
||
<Route path="/app/users/:userId" element={<AppUserDetailPage />} />
|
||
<Route path="/app/users" element={<LocationValue />} />
|
||
</Routes>
|
||
</MemoryRouter>
|
||
</QueryProvider>,
|
||
);
|
||
|
||
expect((await screen.findAllByText("tester")).length).toBeGreaterThan(0);
|
||
expect(getAppUser).toHaveBeenCalledWith("10001");
|
||
expect(screen.getByRole("tab", { name: "总览" })).toBeInTheDocument();
|
||
expect(screen.queryByRole("link", { name: /完整详情/ })).not.toBeInTheDocument();
|
||
|
||
fireEvent.click(screen.getByRole("button", { name: /返回用户列表/ }));
|
||
expect(await screen.findByTestId("location-value")).toHaveTextContent("/app/users?status=active");
|
||
});
|
||
|
||
function LocationValue() {
|
||
const location = useLocation();
|
||
return <span data-testid="location-value">{`${location.pathname}${location.search}`}</span>;
|
||
}
|