import React, { useContext } from 'react'
import { render, screen } from '@testing-library/react'
import {
MediaSize,
MediaSizeContext,
MediaSizeProvider,
useIsLargeMediaSize,
useIsSmallMediaSize,
} from './index'
const mockWindowInnerWidth = (value: number): void => {
Object.defineProperty(window, 'innerWidth', {
writable: true,
configurable: true,
value,
})
}
describe('MediaSizeProvider', () => {
let ChildComponent: any
beforeEach(() => {
ChildComponent = () => {
const valueFromContext = useContext(MediaSizeContext)
const isSmall = useIsSmallMediaSize().toString()
const isLarge = useIsLargeMediaSize().toString()
return (
context: {valueFromContext} | isSmall: {isSmall} | isLarge: {isLarge}
)
}
})
it('Should provide "small" value when screen is under `responsiveBreakpoints.small`', () => {
mockWindowInnerWidth(300)
render(
,
)
screen.getByText('context: small | isSmall: true | isLarge: false')
})
it('Should provide "large" value when screen is above `responsiveBreakpoints.small`', () => {
mockWindowInnerWidth(900)
render(
,
)
screen.getByText('context: large | isSmall: false | isLarge: true')
})
it('Should provide "small" when no provider', () => {
mockWindowInnerWidth(900)
render()
screen.getByText('context: small | isSmall: true | isLarge: false')
})
it('Should respect the mediaSizeForTestsOnly override`', () => {
mockWindowInnerWidth(300)
render(
,
)
screen.getByText('context: large | isSmall: false | isLarge: true')
})
})