import React from 'react'; import { cleanup, render, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import LeafyGreenProvider, { useDarkMode } from '..'; afterAll(cleanup); describe('packages/leafygreen-provider/DarkModeContext', () => { const TestComponent = () => { const { darkMode, theme, setDarkMode } = useDarkMode(); return ( <>
); }; test('without a provider, by default useDarkMode returns false', () => { const { getByTestId } = render(); expect(getByTestId('darkMode')).toHaveAttribute('data-mode', 'false'); }); test('without a provider, by default theme returns "light"', () => { const { getByTestId } = render(); expect(getByTestId('darkMode')).toHaveAttribute('data-theme', 'light'); }); test('with a provider, by default useDarkMode returns false', () => { const { getByTestId } = render( , ); expect(getByTestId('darkMode')).toHaveAttribute('data-mode', 'false'); }); test('with a provider, by default theme returns "light"', () => { const { getByTestId } = render( , ); expect(getByTestId('darkMode')).toHaveAttribute('data-theme', 'light'); }); test(`when darkMode prop is set to true, useDarkMode returns true`, () => { const { getByTestId } = render( , ); expect(getByTestId('darkMode')).toHaveAttribute('data-mode', 'true'); }); test(`when darkMode prop is set to true, theme returns dark`, () => { const { getByTestId } = render( , ); expect(getByTestId('darkMode')).toHaveAttribute('data-theme', 'dark'); }); test('setter updates mode & theme', () => { const { getByTestId, getByRole } = render( , ); expect(getByTestId('darkMode')).toHaveAttribute('data-mode', 'true'); expect(getByTestId('darkMode')).toHaveAttribute('data-theme', 'dark'); const button = getByRole('button'); userEvent.click(button); expect(getByTestId('darkMode')).toHaveAttribute('data-mode', 'false'); expect(getByTestId('darkMode')).toHaveAttribute('data-theme', 'light'); }); test('dark mode changes if re-rendered with a different value', () => { const { getByTestId, rerender } = render( , ); waitFor(() => { rerender( , ); expect(getByTestId('darkMode')).toHaveAttribute('data-mode', 'false'); expect(getByTestId('darkMode')).toHaveAttribute('data-theme', 'light'); }); }); });