memos/web/tests/create-access-token-dialog.test.tsx
2026-07-26 22:21:19 +08:00

49 lines
1.6 KiB
TypeScript

import { fireEvent, render, screen, waitFor } from "@testing-library/react";
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import CreateAccessTokenDialog from "@/components/CreateAccessTokenDialog";
const createPersonalAccessToken = vi.hoisted(() => vi.fn());
vi.mock("@/connect", () => ({
userServiceClient: {
createPersonalAccessToken,
},
}));
vi.mock("@/hooks/useCurrentUser", () => ({
default: () => ({ name: "users/alice" }),
}));
vi.mock("@/utils/i18n", () => ({
useTranslate: () => (key: string) => key,
}));
describe("CreateAccessTokenDialog", () => {
beforeAll(() => {
Element.prototype.scrollIntoView = vi.fn();
Element.prototype.hasPointerCapture = vi.fn(() => false);
Element.prototype.setPointerCapture = vi.fn();
Element.prototype.releasePointerCapture = vi.fn();
});
beforeEach(() => {
createPersonalAccessToken.mockReset();
createPersonalAccessToken.mockResolvedValue({ token: "" });
});
it("creates a non-expiring token by default", async () => {
render(<CreateAccessTokenDialog open onOpenChange={vi.fn()} onSuccess={vi.fn()} />);
expect(screen.getByRole("radio", { name: "setting.access-token.create-dialog.duration-never" })).toBeChecked();
fireEvent.change(screen.getByRole("textbox"), { target: { value: "CLI token" } });
fireEvent.click(screen.getByRole("button", { name: "common.create" }));
await waitFor(() =>
expect(createPersonalAccessToken).toHaveBeenCalledWith({
parent: "users/alice",
description: "CLI token",
expiresInDays: 0,
}),
);
});
});