fix: added tests to branch

This commit is contained in:
Dan Ditomaso
2025-03-09 12:57:51 -04:00
parent eca5d780c1
commit 97f2abb582
3 changed files with 310 additions and 0 deletions
@@ -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);
});
});