import React from 'react'; import { cleanup, render } from '@testing-library/react'; import LeafyGreenProvider, { useBaseFontSize, useDarkMode, usePopoverPortalContainer, } from '..'; import { LeafyGreenProviderProps } from './LeafyGreenContext.types'; afterAll(cleanup); const ContextChecker = () => { const { darkMode } = useDarkMode(); const baseFontSize = useBaseFontSize(); const { portalContainer, scrollContainer } = usePopoverPortalContainer(); return ( <>
); }; describe('packages/leafygreen-provider/LeafyGreenProvider', () => { const childTestID = 'using-keyboard-provider'; const TestContextComponent = () =>
Test
; const { container, getByTestId } = render( , ); const testChild = getByTestId(childTestID); test('only renders children in the DOM', () => { expect(container.firstChild).toBe(testChild); }); describe('Context rendering', () => { const createContextValues = ( darkMode = true, baseFontSize = 16, portalId = 'portal', scrollId = 'scroll', forceUseTopLayer = false, ) => { const portalContainer = document.createElement('div'); portalContainer.setAttribute('id', portalId); const scrollContainer = document.createElement('div'); scrollContainer.setAttribute('id', scrollId); return { darkMode, baseFontSize, popoverPortalContainer: { portalContainer, scrollContainer, }, forceUseTopLayer, } as Required; }; test('Children inherit all context values', () => { const defaultContext = createContextValues(); const { getByTestId } = render( , ); const darkModeDiv = getByTestId('dark-mode'); const fontSizeDiv = getByTestId('font-size'); const portalContainerDiv = getByTestId('portal-container'); const scrollContainerDiv = getByTestId('scroll-container'); expect(darkModeDiv).toHaveAttribute( 'data-value', `${defaultContext.darkMode}`, ); expect(fontSizeDiv).toHaveAttribute( 'data-value', `${defaultContext.baseFontSize}`, ); expect(portalContainerDiv).toHaveAttribute('id', 'portal'); expect(scrollContainerDiv).toHaveAttribute('id', 'scroll'); }); describe('Nested contexts', () => { test('Inner context inherits all unset values', () => { const defaultContext = createContextValues(); const { getByTestId } = render( , ); const darkModeDiv = getByTestId('dark-mode'); const fontSizeDiv = getByTestId('font-size'); const portalContainerDiv = getByTestId('portal-container'); const scrollContainerDiv = getByTestId('scroll-container'); expect(darkModeDiv).toHaveAttribute( 'data-value', `${defaultContext.darkMode}`, ); expect(fontSizeDiv).toHaveAttribute( 'data-value', `${defaultContext.baseFontSize}`, ); expect(portalContainerDiv).toHaveAttribute('id', 'portal'); expect(scrollContainerDiv).toHaveAttribute('id', 'scroll'); }); test('Inner context uses set values', () => { const defaultContext = createContextValues(); const newContext = createContextValues( false, 14, 'new-portal', 'new-scroll', ); const { getByTestId } = render( , ); const darkModeDiv = getByTestId('dark-mode'); const fontSizeDiv = getByTestId('font-size'); const portalContainerDiv = getByTestId('portal-container'); const scrollContainerDiv = getByTestId('scroll-container'); expect(darkModeDiv).toHaveAttribute( 'data-value', `${newContext.darkMode}`, ); expect(fontSizeDiv).toHaveAttribute( 'data-value', `${newContext.baseFontSize}`, ); expect(portalContainerDiv).toHaveAttribute('id', 'new-portal'); expect(scrollContainerDiv).toHaveAttribute('id', 'new-scroll'); }); }); }); });