Files
nyaterm/src/components/settings/GeneralTab.test.tsx
T

91 lines
2.4 KiB
TypeScript

import { fireEvent, render, screen, within } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { GeneralTab } from "./GeneralTab";
const state = vi.hoisted(() => ({
isWindows: true,
updateAppSettings: vi.fn(),
updateUi: vi.fn(),
}));
vi.mock("@/lib/platform", () => ({
get isWindows() {
return state.isWindows;
},
}));
vi.mock("@/context/AppContext", () => ({
useApp: () => ({
appSettings: {
general: {
startup_restore: true,
startup_restore_window_layout: true,
minimize_to_tray: false,
boss_key: null,
confirm_on_close: true,
rdp_client_mode: "builtin",
},
ui: {
language: "en",
header_status_visible: true,
header_status_mode: "session",
},
diagnostics: { level: "info", retention_days: 7 },
},
updateAppSettings: state.updateAppSettings,
updateUi: state.updateUi,
}),
}));
vi.mock("@/hooks/useConfigTransfer", () => ({
useConfigTransfer: () => ({
handleExportDiagnostics: vi.fn(),
handleOpenLogs: vi.fn(),
}),
}));
vi.mock("react-i18next", async (importOriginal) => ({
...(await importOriginal<typeof import("react-i18next")>()),
useTranslation: () => ({
i18n: { changeLanguage: vi.fn() },
t: (key: string) => key,
}),
}));
describe("GeneralTab RDP client setting", () => {
beforeEach(() => {
vi.clearAllMocks();
state.isWindows = true;
});
it("shows the RDP client selector on Windows and saves Windows Remote Desktop", () => {
render(<GeneralTab />);
const field =
screen.getByText("settings.rdpClient").parentElement?.parentElement;
expect(field).not.toBeNull();
const combo = within(field as HTMLElement).getByRole("combobox");
fireEvent.keyDown(combo, { key: "ArrowDown" });
fireEvent.click(
screen.getByRole("option", { name: "settings.rdpClientWindows" }),
);
expect(state.updateAppSettings).toHaveBeenCalledWith({
general: {
startup_restore: true,
startup_restore_window_layout: true,
minimize_to_tray: false,
boss_key: null,
confirm_on_close: true,
rdp_client_mode: "windows",
},
});
});
it("does not show the Windows-only RDP client selector off Windows", () => {
state.isWindows = false;
render(<GeneralTab />);
expect(screen.queryByText("settings.rdpClient")).toBeNull();
});
});