feat(pwa): на экране только включение уведомлений, выключения нет
Строка предлагает включить, пока уведомления выключены, и исчезает, когда они включены. Кнопка «выключить» рядом с балансом только подталкивала бы отказаться от двух событий, ради которых приложение и открывают. Отключение при этом никуда не делось: оно осталось системным — в настройках уведомлений телефона или в настройках сайта в браузере, там же, где человек управляет всеми остальными приложениями. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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(<NotificationsRow />);
|
||||
await userEvent.click(await screen.findByRole("button", { name: /Включить уведомления/ }));
|
||||
expect(push.enable).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("включённые — строки нет: отказаться от них мы не предлагаем", async () => {
|
||||
// Отключение остаётся системным (настройки телефона или сайта в браузере) —
|
||||
// рядом с балансом кнопка «выключить» только подталкивала бы к отказу.
|
||||
vi.mocked(push.currentState).mockResolvedValue("on");
|
||||
const { container } = render(<NotificationsRow />);
|
||||
await vi.waitFor(() => expect(container.textContent).toBe(""));
|
||||
expect(screen.queryByText(/Выключить/)).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it("запрещённые в браузере — объясняем, а не предлагаем кнопку", async () => {
|
||||
vi.mocked(push.currentState).mockResolvedValue("denied");
|
||||
render(<NotificationsRow />);
|
||||
expect(await screen.findByText(/запрещены в настройках браузера/)).toBeInTheDocument();
|
||||
expect(screen.queryByRole("button")).not.toBeInTheDocument();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user