import 'whatwg-fetch'; import React from "react"; import { render } from '@testing-library/react'; import { ToastProvider } from '@/components/Toast'; // Fix for React production builds in testing // Mock React's act function for production builds if (process.env.NODE_ENV === 'production') { // Override React.act for production builds const originalAct = React.act; if (!originalAct) { React.act = (callback: () => void) => { callback(); }; } // Also mock the act function from react-dom/test-utils const { act } = require('react-dom/test-utils'); if (act) { global.act = act; } } // Mock react-responsive-masonry jest.mock("react-responsive-masonry", () => ({ __esModule: true, default: ({ children }: { children: React.ReactNode }) => React.createElement("div", null, children), get ResponsiveMasonry() { const ResponsiveMasonryComponent = ({ children }: { children: React.ReactNode }) => React.createElement("div", null, children); ResponsiveMasonryComponent.displayName = 'ResponsiveMasonry'; return ResponsiveMasonryComponent; }, })); // Mock next/link jest.mock('next/link', () => { const LinkComponent = ({ children }: { children: React.ReactNode }) => children; LinkComponent.displayName = 'Link'; return LinkComponent; }); // Mock next/image jest.mock('next/image', () => { const ImageComponent = ({ src, alt, fill, priority, ...props }: Record) => { // Convert boolean props to strings for DOM compatibility const domProps: Record = { src, alt }; if (fill) domProps.style = { width: '100%', height: '100%', objectFit: 'cover' }; if (priority) domProps.loading = 'eager'; return React.createElement('img', { ...domProps, ...props }); }; ImageComponent.displayName = 'Image'; return ImageComponent; }); // Custom render function with ToastProvider const customRender = (ui: React.ReactElement, options = {}) => render(ui, { wrapper: ({ children }) => React.createElement(ToastProvider, null, children), ...options, }); // Re-export everything export * from '@testing-library/react'; export { customRender as render };