import * as React from 'react';
import { BlueprintModernizationContext } from '@box/blueprint-web';
import { render } from '../../../test-utils/testing-library';
import { withBlueprintModernization } from '../withBlueprintModernization';
// Mock the Blueprint Web package with simple components
jest.mock('@box/blueprint-web', () => {
const ReactMock = jest.requireActual('react');
const mockContext = ReactMock.createContext({ enableModernizedComponents: false });
return {
BlueprintModernizationContext: mockContext,
BlueprintModernizationProvider: ({ children, enableModernizedComponents }) =>
ReactMock.createElement(
'div',
{
'data-testid': 'blueprint-provider',
'data-enabled': String(enableModernizedComponents),
},
children,
),
TooltipProvider: ({ children }) =>
ReactMock.createElement('div', { 'data-testid': 'tooltip-provider' }, children),
BlueprintModernizationContextValue: {},
};
});
type TestComponentProps = {
value?: string;
enableModernizedComponents?: boolean;
};
describe('src/elements/common/withBlueprintModernization', () => {
const TestComponent = ({ value }: TestComponentProps) => (
{`Test ${value || 'default'}`}
);
const WrappedComponent = withBlueprintModernization(TestComponent);
const renderComponent = (props?: TestComponentProps) => render();
test('should wrap component with BlueprintModernizationProvider', () => {
const { getByTestId } = renderComponent();
expect(getByTestId('test-component')).toBeInTheDocument();
expect(getByTestId('test-component')).toHaveTextContent('Test default');
expect(getByTestId('blueprint-provider')).toBeInTheDocument();
expect(getByTestId('blueprint-provider')).toHaveAttribute('data-enabled', 'false');
});
test('should pass props to wrapped component', () => {
const { getByTestId } = renderComponent({ value: 'test-value' });
expect(getByTestId('test-component')).toBeInTheDocument();
expect(getByTestId('test-component')).toHaveTextContent('Test test-value');
});
test('should handle enableModernizedComponents prop', () => {
const { getByTestId } = renderComponent({
value: 'modernized',
enableModernizedComponents: true,
});
expect(getByTestId('test-component')).toBeInTheDocument();
expect(getByTestId('test-component')).toHaveTextContent('Test modernized');
expect(getByTestId('blueprint-provider')).toBeInTheDocument();
expect(getByTestId('blueprint-provider')).toHaveAttribute('data-enabled', 'true');
});
test('should not wrap component when upstream BlueprintModernizationProvider exists', () => {
// Create a parent component with existing BlueprintModernizationContext
const ParentWithContext = ({ children }) => (
{children}
);
const { getByTestId, queryByTestId } = render(
,
);
// Component should render
expect(getByTestId('test-component')).toBeInTheDocument();
expect(getByTestId('test-component')).toHaveTextContent('Test with-context');
// HOC should NOT add its own BlueprintModernizationProvider since upstream context exists
expect(queryByTestId('blueprint-provider')).not.toBeInTheDocument();
});
});