fix: added tests to branch
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { render, screen, fireEvent } from '@testing-library/react';
|
||||
import { UnsafeRolesDialog } from '@components/Dialog/UnsafeRolesDialog/UnsafeRolesDialog.tsx';
|
||||
import { useUnsafeRoles } from '@components/Dialog/UnsafeRolesDialog/useUnsafeRoles.ts';
|
||||
|
||||
vi.mock('@components/Dialog/UnsafeRolesDialog/useUnsafeRoles', () => ({
|
||||
useUnsafeRoles: vi.fn()
|
||||
}));
|
||||
|
||||
describe('UnsafeRolesDialog', () => {
|
||||
const getConfirmStateMock = vi.fn();
|
||||
const toggleConfirmStateMock = vi.fn();
|
||||
const handleCloseDialogMock = vi.fn();
|
||||
const onOpenChangeMock = vi.fn();
|
||||
|
||||
beforeEach(() => {
|
||||
vi.resetAllMocks();
|
||||
|
||||
getConfirmStateMock.mockReturnValue(false);
|
||||
|
||||
(useUnsafeRoles as any).mockReturnValue({
|
||||
getConfirmState: getConfirmStateMock,
|
||||
toggleConfirmState: toggleConfirmStateMock,
|
||||
handleCloseDialog: handleCloseDialogMock
|
||||
});
|
||||
});
|
||||
|
||||
it('should not render when open is false', () => {
|
||||
render(<UnsafeRolesDialog open={false} onOpenChange={onOpenChangeMock} />);
|
||||
|
||||
expect(screen.queryByTestId('dialog')).not.toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should render when open is true', () => {
|
||||
render(<UnsafeRolesDialog open={true} onOpenChange={onOpenChangeMock} />);
|
||||
|
||||
expect(screen.getByRole('dialog')).toBeInTheDocument();
|
||||
expect(screen.getByRole('heading')).toBeInTheDocument();
|
||||
expect(screen.getByText('Are you sure?')).toBeInTheDocument();
|
||||
expect(screen.getAllByRole('link')).length(2);
|
||||
expect(screen.getByRole('checkbox')).toBeInTheDocument();
|
||||
expect(screen.getByText('Yes, I know what I\'m doing')).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: /dismiss/i })).toBeInTheDocument();
|
||||
expect(screen.getByRole('button', { name: /confirm/i })).toBeInTheDocument();
|
||||
});
|
||||
|
||||
it('should have disabled confirm button when checkbox is unchecked', () => {
|
||||
getConfirmStateMock.mockReturnValue(false);
|
||||
|
||||
render(<UnsafeRolesDialog open={true} onOpenChange={onOpenChangeMock} />);
|
||||
|
||||
expect(screen.getByRole('button', { name: /confirm/i })).toBeDisabled();
|
||||
});
|
||||
|
||||
it('should have enabled confirm button when checkbox is checked', () => {
|
||||
getConfirmStateMock.mockReturnValue(true);
|
||||
|
||||
render(<UnsafeRolesDialog open={true} onOpenChange={onOpenChangeMock} />);
|
||||
|
||||
expect(screen.getByRole('button', { name: /confirm/i })).not.toBeDisabled();
|
||||
});
|
||||
|
||||
it('should call toggleConfirmState when checkbox is clicked', () => {
|
||||
render(<UnsafeRolesDialog open={true} onOpenChange={onOpenChangeMock} />);
|
||||
|
||||
fireEvent.click(screen.getByRole('checkbox'));
|
||||
|
||||
expect(toggleConfirmStateMock).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it('should call handleCloseDialog with "dismiss" when dismiss button is clicked', () => {
|
||||
render(<UnsafeRolesDialog open={true} onOpenChange={onOpenChangeMock} />);
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: /dismiss/i }));
|
||||
|
||||
expect(handleCloseDialogMock).toHaveBeenCalledWith('dismiss');
|
||||
});
|
||||
|
||||
it('should call handleCloseDialog with "confirm" when confirm button is clicked', () => {
|
||||
getConfirmStateMock.mockReturnValue(true);
|
||||
|
||||
render(<UnsafeRolesDialog open={true} onOpenChange={onOpenChangeMock} />);
|
||||
|
||||
fireEvent.click(screen.getByRole('button', { name: /confirm/i }));
|
||||
|
||||
expect(handleCloseDialogMock).toHaveBeenCalledWith("confirm");
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,102 @@
|
||||
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
||||
import { renderHook, act } from '@testing-library/react';
|
||||
import { useUnsafeRoles } from './useUnsafeRoles.ts';
|
||||
import { useDevice } from '@core/stores/deviceStore.ts';
|
||||
import useLocalStorage from '@core/hooks/useLocalStorage.ts';
|
||||
|
||||
vi.mock('@core/stores/deviceStore', () => ({
|
||||
useDevice: vi.fn()
|
||||
}));
|
||||
|
||||
vi.mock('@core/hooks/useLocalStorage', () => {
|
||||
return {
|
||||
default: vi.fn()
|
||||
};
|
||||
});
|
||||
|
||||
describe('useUnsafeRoles', () => {
|
||||
const setDialogOpenMock = vi.fn();
|
||||
const setAgreedToUnsafeRolesMock = vi.fn();
|
||||
|
||||
beforeEach(() => {
|
||||
vi.resetAllMocks();
|
||||
|
||||
(useDevice as any).mockReturnValue({
|
||||
setDialogOpen: setDialogOpenMock
|
||||
});
|
||||
|
||||
(useLocalStorage as any).mockReturnValue([
|
||||
false,
|
||||
setAgreedToUnsafeRolesMock
|
||||
]);
|
||||
});
|
||||
|
||||
it('should initialize with correct default values', () => {
|
||||
const { result } = renderHook(() => useUnsafeRoles());
|
||||
|
||||
expect(result.current.agreedToUnSafeRoles).toBe(false);
|
||||
expect(result.current.getConfirmState()).toBe(false);
|
||||
});
|
||||
|
||||
it('should toggle confirm state correctly', () => {
|
||||
const { result } = renderHook(() => useUnsafeRoles());
|
||||
|
||||
act(() => {
|
||||
result.current.toggleConfirmState();
|
||||
});
|
||||
|
||||
expect(result.current.getConfirmState()).toBe(true);
|
||||
|
||||
act(() => {
|
||||
result.current.toggleConfirmState();
|
||||
});
|
||||
|
||||
expect(result.current.getConfirmState()).toBe(false);
|
||||
});
|
||||
|
||||
it('should handle dialog close with dismiss state', () => {
|
||||
const { result } = renderHook(() => useUnsafeRoles());
|
||||
|
||||
act(() => {
|
||||
result.current.handleCloseDialog('dismiss');
|
||||
});
|
||||
|
||||
expect(setAgreedToUnsafeRolesMock).toHaveBeenCalledWith(false);
|
||||
expect(setDialogOpenMock).toHaveBeenCalledWith('unsafeRoles', false);
|
||||
});
|
||||
|
||||
it('should handle dialog close with confirm state', () => {
|
||||
const { result } = renderHook(() => useUnsafeRoles());
|
||||
|
||||
act(() => {
|
||||
result.current.handleCloseDialog('confirm');
|
||||
});
|
||||
|
||||
expect(setAgreedToUnsafeRolesMock).toHaveBeenCalledWith(true);
|
||||
expect(setDialogOpenMock).toHaveBeenCalledWith('unsafeRoles', false);
|
||||
});
|
||||
|
||||
it('should maintain state consistency across multiple operations', () => {
|
||||
const { result } = renderHook(() => useUnsafeRoles());
|
||||
|
||||
act(() => {
|
||||
result.current.toggleConfirmState();
|
||||
});
|
||||
expect(result.current.getConfirmState()).toBe(true);
|
||||
|
||||
act(() => {
|
||||
result.current.handleCloseDialog('confirm');
|
||||
});
|
||||
|
||||
expect(result.current.getConfirmState()).toBe(false);
|
||||
expect(setAgreedToUnsafeRolesMock).toHaveBeenCalledWith(true);
|
||||
|
||||
(useLocalStorage as any).mockReturnValue([
|
||||
true,
|
||||
setAgreedToUnsafeRolesMock
|
||||
]);
|
||||
|
||||
const { result: newResult } = renderHook(() => useUnsafeRoles());
|
||||
expect(newResult.current.agreedToUnSafeRoles).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user