import { describe, it, expect, vi, beforeEach } from "vitest";
import { render, screen } from "@testing-library/react";
import userEvent from "@testing-library/user-event";
vi.mock("@/lib/push", () => ({
currentState: vi.fn(async () => "off"),
enable: vi.fn(async () => "on"),
}));
import { NotificationsRow } from "./NotificationsRow";
import * as push from "@/lib/push";
describe("строка уведомлений", () => {
beforeEach(() => {
vi.clearAllMocks();
vi.mocked(push.currentState).mockResolvedValue("off");
});
it("выключенные уведомления предлагает включить", async () => {
render();
await userEvent.click(await screen.findByRole("button", { name: /Включить уведомления/ }));
expect(push.enable).toHaveBeenCalled();
});
it("включённые — строки нет: отказаться от них мы не предлагаем", async () => {
// Отключение остаётся системным (настройки телефона или сайта в браузере) —
// рядом с балансом кнопка «выключить» только подталкивала бы к отказу.
vi.mocked(push.currentState).mockResolvedValue("on");
const { container } = render();
await vi.waitFor(() => expect(container.textContent).toBe(""));
expect(screen.queryByText(/Выключить/)).not.toBeInTheDocument();
});
it("запрещённые в браузере — объясняем, а не предлагаем кнопку", async () => {
vi.mocked(push.currentState).mockResolvedValue("denied");
render();
expect(await screen.findByText(/запрещены в настройках браузера/)).toBeInTheDocument();
expect(screen.queryByRole("button")).not.toBeInTheDocument();
});
});