import React from 'react'; import { act, waitFor, render, screen } from '@testing-library/react'; import '@testing-library/jest-dom'; import { SocialEmbedsProvider, useSocialEmbedsContext } from '../SocialEmbedsProvider'; import { renderHook } from '@testing-library/react-hooks'; describe('SocialEmbedsProvider and useSocialEmbedsContext', () => { it('provides default values for isSocialEmbedAllowed and isAllowedOnce', () => { const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} ); const { result } = renderHook(() => useSocialEmbedsContext(), { wrapper }); expect(result.current.isSocialEmbedAllowed).toEqual({ instagram: false, twitter: false, tiktok: false, youtube: false, facebook: false }); expect(result.current.isAllowedOnce).toEqual({ instagram: false, twitter: false, tiktok: false, youtube: false, facebook: false }); }); it('updates isSocialEmbedAllowed correctly', () => { const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} ); const { result } = renderHook(() => useSocialEmbedsContext(), { wrapper }); act(() => { result.current.setIsSocialEmbedAllowed(prev => ({ ...prev, twitter: true })); }); expect(result.current.isSocialEmbedAllowed.twitter).toBe(true); }); it('syncs isAllowedOnce with isSocialEmbedAllowed on change', async () => { const wrapper = ({ children }: { children: React.ReactNode }) => ( {children} ); const { result } = renderHook(() => useSocialEmbedsContext(), { wrapper }); act(() => { result.current.setIsSocialEmbedAllowed(prev => ({ ...prev, youtube: true })); }); await waitFor(() => { expect(result.current.isAllowedOnce.youtube).toBe(true); }); }); it('throws an error if useSocialEmbedsContext is used outside of provider', () => { const { result } = renderHook(() => useSocialEmbedsContext()); expect(result.error).toEqual( new Error( 'useSocialEmbedsContext must be used within a SocialEmbedsProvider' ) ); }); it('renders children correctly within the provider', () => { render(
Test Child
); expect(screen.getByTestId('child-element')).toBeInTheDocument(); }); });