* test: wip several component under containers * remoce checkbox test containers * test: added more test to containers component
111 lines
3.1 KiB
TypeScript
111 lines
3.1 KiB
TypeScript
import '@testing-library/jest-dom'
|
|
import React from 'react'
|
|
import { render } from '@testing-library/react'
|
|
import { useAtom } from 'jotai'
|
|
import Responsive from './Responsive'
|
|
import { showLeftPanelAtom, showRightPanelAtom } from '@/helpers/atoms/App.atom'
|
|
|
|
// Mocking the required atoms
|
|
jest.mock('jotai', () => {
|
|
const originalModule = jest.requireActual('jotai')
|
|
return {
|
|
...originalModule,
|
|
useAtom: jest.fn(),
|
|
useAtomValue: jest.fn(),
|
|
}
|
|
})
|
|
|
|
const mockSetShowLeftPanel = jest.fn()
|
|
const mockSetShowRightPanel = jest.fn()
|
|
const mockShowLeftPanel = true
|
|
const mockShowRightPanel = true
|
|
|
|
beforeEach(() => {
|
|
// Mocking the atom behavior
|
|
;(useAtom as jest.Mock).mockImplementation((atom) => {
|
|
if (atom === showLeftPanelAtom) {
|
|
return [mockShowLeftPanel, mockSetShowLeftPanel]
|
|
}
|
|
if (atom === showRightPanelAtom) {
|
|
return [mockShowRightPanel, mockSetShowRightPanel]
|
|
}
|
|
return [null, jest.fn()]
|
|
})
|
|
})
|
|
|
|
describe('Responsive', () => {
|
|
beforeAll(() => {
|
|
// Mocking the window.matchMedia function
|
|
window.matchMedia = jest.fn().mockImplementation((query) => {
|
|
return {
|
|
matches: false, // Set this to true to simulate mobile view
|
|
addListener: jest.fn(),
|
|
removeListener: jest.fn(),
|
|
}
|
|
})
|
|
})
|
|
|
|
it('renders children correctly', () => {
|
|
const { getByText } = render(
|
|
<Responsive>
|
|
<div>Child Content</div>
|
|
</Responsive>
|
|
)
|
|
|
|
// Check if the child content is rendered
|
|
expect(getByText('Child Content')).toBeInTheDocument()
|
|
})
|
|
|
|
it('hides left and right panels on small screens', () => {
|
|
// Simulate mobile view
|
|
window.matchMedia = jest.fn().mockImplementation((query) => ({
|
|
matches: true, // Change to true to simulate mobile
|
|
addListener: jest.fn(),
|
|
removeListener: jest.fn(),
|
|
}))
|
|
|
|
render(
|
|
<Responsive>
|
|
<div>Child Content</div>
|
|
</Responsive>
|
|
)
|
|
|
|
// Check that the left and right panel states were updated to false
|
|
expect(mockSetShowLeftPanel).toHaveBeenCalledWith(false)
|
|
expect(mockSetShowRightPanel).toHaveBeenCalledWith(false)
|
|
})
|
|
|
|
it('restores the last known panel states on larger screens', () => {
|
|
// Simulate mobile view first
|
|
window.matchMedia = jest.fn().mockImplementation((query) => ({
|
|
matches: true, // Change to true to simulate mobile
|
|
addListener: jest.fn(),
|
|
removeListener: jest.fn(),
|
|
}))
|
|
|
|
render(
|
|
<Responsive>
|
|
<div>Child Content</div>
|
|
</Responsive>
|
|
)
|
|
|
|
// Change back to desktop view
|
|
window.matchMedia = jest.fn().mockImplementation((query) => ({
|
|
matches: false, // Change to false to simulate desktop
|
|
addListener: jest.fn(),
|
|
removeListener: jest.fn(),
|
|
}))
|
|
|
|
// Call the effect manually to simulate the component re-rendering
|
|
const rerender = render(
|
|
<Responsive>
|
|
<div>Child Content</div>
|
|
</Responsive>
|
|
)
|
|
|
|
// Check that the last known states were restored (which were true initially)
|
|
expect(mockSetShowLeftPanel).toHaveBeenCalledWith(true)
|
|
expect(mockSetShowRightPanel).toHaveBeenCalledWith(true)
|
|
})
|
|
})
|