test(preferences): add unit tests for PreferencesForm component
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
parent
a9d9ba50ea
commit
34b5300904
1 changed files with 70 additions and 0 deletions
70
tests/int/preferences-form.int.spec.ts
Normal file
70
tests/int/preferences-form.int.spec.ts
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
import { createElement } from "react";
|
||||
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
||||
import { beforeEach, describe, expect, it, vi } from "vitest";
|
||||
import { PreferencesForm } from "@/components/frontend/account/PreferencesForm";
|
||||
import { updatePreferences } from "@/app/(frontend)/account/actions";
|
||||
|
||||
vi.mock("next/navigation", () => ({
|
||||
useRouter: () => ({ refresh: vi.fn() }),
|
||||
}));
|
||||
|
||||
vi.mock("@/app/(frontend)/account/actions", () => ({
|
||||
updatePreferences: vi.fn(),
|
||||
}));
|
||||
|
||||
class ResizeObserverMock implements ResizeObserver {
|
||||
observe(_target: Element, _options?: ResizeObserverOptions): void {}
|
||||
|
||||
unobserve(_target: Element): void {}
|
||||
|
||||
disconnect(): void {}
|
||||
}
|
||||
|
||||
globalThis.ResizeObserver = ResizeObserverMock;
|
||||
|
||||
const mockedUpdatePreferences = vi.mocked(updatePreferences);
|
||||
|
||||
describe("PreferencesForm", () => {
|
||||
beforeEach(() => {
|
||||
mockedUpdatePreferences.mockReset();
|
||||
mockedUpdatePreferences.mockResolvedValue({ success: true });
|
||||
});
|
||||
|
||||
it("submits all display, in-app, and Discord preferences", async () => {
|
||||
render(
|
||||
createElement(PreferencesForm, {
|
||||
mutedAll: false,
|
||||
mutedTypes: ["market:offer"],
|
||||
showCallsign: false,
|
||||
showVersionOverlay: true,
|
||||
leadOrActual: "lead",
|
||||
discordEnabled: false,
|
||||
discordMutedTypes: [],
|
||||
}),
|
||||
);
|
||||
|
||||
fireEvent.click(screen.getByRole("switch", { name: "Show version overlay" }));
|
||||
fireEvent.click(screen.getByRole("switch", { name: "Show callsign instead of display name" }));
|
||||
fireEvent.click(screen.getByRole("switch", { name: "Mute all in-app notifications" }));
|
||||
fireEvent.click(screen.getByRole("radio", { name: "Actual" }));
|
||||
fireEvent.click(screen.getByRole("switch", { name: "Enable Discord notifications" }));
|
||||
const discordMarketOffer = document.getElementById("discord-market-offer");
|
||||
if (!(discordMarketOffer instanceof HTMLElement)) {
|
||||
throw new Error("Discord market-offer switch was not rendered.");
|
||||
}
|
||||
fireEvent.click(discordMarketOffer);
|
||||
fireEvent.click(screen.getByRole("button", { name: "Save preferences" }));
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockedUpdatePreferences).toHaveBeenCalledWith({
|
||||
mutedAll: true,
|
||||
mutedTypes: ["market:offer"],
|
||||
showCallsign: true,
|
||||
showVersionOverlay: false,
|
||||
leadOrActual: "actual",
|
||||
discordEnabled: true,
|
||||
discordMutedTypes: ["market:offer"],
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in a new issue