import { act, fireEvent, render, screen } from "@testing-library/react"
import { describe, expect, it, vi } from "vitest"
import { CameraPermissionRequest } from "../../components/camera-permission-request"
// Определяем типы для пропсов компонента
type PermissionStatus = "pending" | "granted" | "denied" | "error"
// Мокируем useTranslation
vi.mock("react-i18next", () => ({
useTranslation: () => ({
t: (key: string) => key,
}),
}))
describe("CameraPermissionRequest", () => {
it("renders pending state", () => {
render()
// Проверяем, что отображается текст о запросе разрешений
expect(screen.getByText("dialogs.cameraCapture.requestingPermissions")).toBeInTheDocument()
})
it("renders denied state with retry button", () => {
const mockOnRequestPermissions = vi.fn()
const errorMessage = "Access denied"
render(
,
)
// Проверяем, что отображается сообщение об ошибке
expect(screen.getByText(errorMessage)).toBeInTheDocument()
// Проверяем, что есть кнопка для повторного запроса разрешений
const button = screen.getByText("dialogs.cameraCapture.retryRequest")
expect(button).toBeInTheDocument()
// Проверяем, что при клике на кнопку вызывается функция onRequestPermissions
act(() => {
act(() => {
fireEvent.click(button)
})
})
expect(mockOnRequestPermissions).toHaveBeenCalledTimes(1)
})
it("renders denied state with empty error message", () => {
render()
// Проверяем, что есть кнопка для повторного запроса разрешений
expect(screen.getByText("dialogs.cameraCapture.retryRequest")).toBeInTheDocument()
})
it("renders error state with custom error message", () => {
const mockOnRequestPermissions = vi.fn()
const errorMessage = "Custom error message"
render(
,
)
// Проверяем, что отображается сообщение об ошибке
expect(screen.getByText(errorMessage)).toBeInTheDocument()
// Проверяем, что есть кнопка для повторного запроса разрешений
const button = screen.getByText("dialogs.cameraCapture.retry")
expect(button).toBeInTheDocument()
// Проверяем, что при клике на кнопку вызывается функция onRequestPermissions
act(() => {
act(() => {
fireEvent.click(button)
})
})
expect(mockOnRequestPermissions).toHaveBeenCalledTimes(1)
})
it("renders granted state", () => {
render()
// Проверяем, что компонент не отображает никакого содержимого при предоставленных разрешениях
expect(screen.queryByText("dialogs.cameraCapture.permissionsNeeded")).not.toBeInTheDocument()
expect(screen.queryByText("dialogs.cameraCapture.permissionsDenied")).not.toBeInTheDocument()
expect(screen.queryByText("dialogs.cameraCapture.requestingPermissions")).not.toBeInTheDocument()
})
it("handles unknown permission status", () => {
render(
,
)
// Проверяем, что компонент не отображает никакого содержимого при неизвестном статусе
expect(screen.queryByText("dialogs.cameraCapture.permissionsNeeded")).not.toBeInTheDocument()
expect(screen.queryByText("dialogs.cameraCapture.permissionsDenied")).not.toBeInTheDocument()
expect(screen.queryByText("dialogs.cameraCapture.requestingPermissions")).not.toBeInTheDocument()
})
})