import type { ReactNode } from 'react';
import { render, screen } from '@testing-library/react';
import { Provider } from 'jotai';
import { useHydrateAtoms } from 'jotai/utils';
import { describe, expect, it, vi } from 'vitest';
import { isRomUserAllowedToCommentAtom } from '~/states/server-configurations';
import { NotAvailableIfReadOnlyUserNotAllowedToComment } from './NotAvailableForReadOnlyUser';
const useIsReadOnlyUser = vi.hoisted(() => vi.fn().mockReturnValue(true));
vi.mock('~/states/context', () => ({
useIsReadOnlyUser,
}));
vi.mock('react-disable', () => ({
Disable: ({
children,
disabled,
}: {
children: ReactNode;
disabled: boolean;
}) =>
{children}
,
}));
const HydrateAtoms = ({
children,
initialValues,
}: {
children: ReactNode;
initialValues: Array<[typeof isRomUserAllowedToCommentAtom, boolean]>;
}) => {
useHydrateAtoms(initialValues);
return <>{children}>;
};
describe('NotAvailableForReadOnlyUser.tsx', () => {
it('renders NotAvailable component as enable when user is read-only and comments by rom users is allowed', async () => {
useIsReadOnlyUser.mockReturnValue(true);
render(
Test Child
,
);
// when
const element = screen.getByTestId('test-child');
const wrapperElement = element.parentElement;
// then
expect(wrapperElement).not.toHaveAttribute('aria-hidden', 'true');
});
it('renders NotAvailable component as disable when user is read-only and comments by rom users is not allowed', async () => {
useIsReadOnlyUser.mockReturnValue(true);
render(
Test Child
,
);
// when
const element = screen.getByTestId('test-child');
const wrapperElement = element.parentElement;
// then
expect(wrapperElement).toHaveAttribute('aria-hidden', 'true');
});
it('renders NotAvailable component as enable when user is not read-only and comments by rom users is allowed', async () => {
useIsReadOnlyUser.mockReturnValue(false);
render(
Test Child
,
);
// when
const element = screen.getByTestId('test-child');
const wrapperElement = element.parentElement;
// then
expect(wrapperElement).not.toHaveAttribute('aria-hidden', 'true');
});
it('renders NotAvailable component as enable when user is not read-only and comments by rom users is not allowed', async () => {
useIsReadOnlyUser.mockReturnValue(false);
render(
Test Child
,
);
// when
const element = screen.getByTestId('test-child');
const wrapperElement = element.parentElement;
// then
expect(wrapperElement).not.toHaveAttribute('aria-hidden', 'true');
});
});