import React, { useRef } from 'react'; import userEvent from '@testing-library/user-event'; import renderWithTheme from '../../testUtils/renderWithTheme'; import { useDeprecation, useHover } from '../hooks'; describe('useHover', () => { it('returns an indicator to show if element is being hovered', () => { const TestComponent = () => { const componentRef = useRef(null); const isHovering = useHover(componentRef); return (
{isHovering ? 'Hovered' : 'Not hovered'}
); }; const { getByTestId, getByText } = renderWithTheme(); expect(getByText('Not hovered')).toBeInTheDocument(); userEvent.hover(getByTestId('test-component')); expect(getByText('Hovered')).toBeInTheDocument(); userEvent.unhover(getByTestId('test-component')); expect(getByText('Not hovered')).toBeInTheDocument(); }); }); describe('useDeprecation', () => { describe('with NODE_ENV', () => { it('does not warn in production environment', () => { process.env['NODE_ENV'] = 'production'; console.warn = jest.fn(); const DeprecatedComponent = () => { useDeprecation( 'This component is deprecated. Please use another component instead.' ); return <>; }; renderWithTheme(); expect(console.warn).not.toBeCalled(); }); it('warns correct message in development environment', () => { process.env['NODE_ENV'] = 'development'; console.warn = jest.fn(); const DeprecatedComponent = () => { useDeprecation( 'This component is deprecated. Please use another component instead.' ); return <>; }; renderWithTheme(); expect(console.warn).toHaveBeenCalledWith( `%c ██████╗ ███████╗██████╗ ██████╗ ███████╗ ██████╗ █████╗ ████████╗███████╗██████╗ ██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗ ██║ ██║█████╗ ██████╔╝██████╔╝█████╗ ██║ ███████║ ██║ █████╗ ██║ ██║ ██║ ██║██╔══╝ ██╔═══╝ ██╔══██╗██╔══╝ ██║ ██╔══██║ ██║ ██╔══╝ ██║ ██║ ██████╔╝███████╗██║ ██║ ██║███████╗╚██████╗██║ ██║ ██║ ███████╗██████╔╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝ %cThis component is deprecated. Please use another component instead.`, 'color: red', 'color: red; font-size: 15px' ); }); }); describe('with 2nd arg', () => { it('does not warn when 2nd arg is provided as false', () => { process.env['NODE_ENV'] = 'development'; console.warn = jest.fn(); const DeprecatedComponent = () => { useDeprecation( 'This component is deprecated. Please use another component instead.', false ); return <>; }; renderWithTheme(); expect(console.warn).not.toBeCalled(); }); it('warns correct message when 2nd arg is provided as true', () => { process.env['NODE_ENV'] = 'development'; console.warn = jest.fn(); const DeprecatedComponent = () => { useDeprecation( 'This component is deprecated. Please use another component instead.', true ); return <>; }; renderWithTheme(); expect(console.warn).toHaveBeenCalledWith( `%c ██████╗ ███████╗██████╗ ██████╗ ███████╗ ██████╗ █████╗ ████████╗███████╗██████╗ ██╔══██╗██╔════╝██╔══██╗██╔══██╗██╔════╝██╔════╝██╔══██╗╚══██╔══╝██╔════╝██╔══██╗ ██║ ██║█████╗ ██████╔╝██████╔╝█████╗ ██║ ███████║ ██║ █████╗ ██║ ██║ ██║ ██║██╔══╝ ██╔═══╝ ██╔══██╗██╔══╝ ██║ ██╔══██║ ██║ ██╔══╝ ██║ ██║ ██████╔╝███████╗██║ ██║ ██║███████╗╚██████╗██║ ██║ ██║ ███████╗██████╔╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═╝╚══════╝ ╚═════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚═════╝ %cThis component is deprecated. Please use another component instead.`, 'color: red', 'color: red; font-size: 15px' ); }); }); });