import * as React from 'react'
import { act, cleanup, render, fireEvent, screen } from '@testing-library/react'
import '@testing-library/jest-dom'
import { CButton } from '../../button'
import { CPopover } from '../index'
let container: HTMLDivElement | null = null
beforeEach(() => {
container = document.createElement('div')
document.body.appendChild(container)
})
afterEach(() => {
cleanup()
})
test('loads and displays CPopover component', async () => {
const { container } = render(
Test
)
expect(container).toMatchSnapshot()
})
test('CPopover customize', async () => {
jest.useFakeTimers()
render(
Test
,
{ container: container! }
)
const btn = screen.getByRole('button', { name: /test/i })
act(() => {
fireEvent.click(btn)
jest.runAllTimers()
})
expect(document.querySelector('.popover')).toBeInTheDocument()
expect(document.querySelector('.bs-popover-auto')).toBeInTheDocument()
expect(document.querySelector('.popover-arrow')).toBeInTheDocument()
expect(document.querySelector('.popover-header')).toBeInTheDocument()
expect(document.querySelector('.popover-body')).toBeInTheDocument()
expect(document.querySelector('.popover-header')?.innerHTML).toBe('title')
expect(document.querySelector('.popover-body')?.innerHTML).toBe('content')
jest.useRealTimers()
})
test('CPopover onShow and onHide', async () => {
jest.useFakeTimers()
const onShow = jest.fn()
const onHide = jest.fn()
render(
Test
,
{ container: container! }
)
const btn = screen.getByRole('button', { name: /test/i })
expect(onShow).toHaveBeenCalledTimes(0)
expect(onHide).toHaveBeenCalledTimes(0)
act(() => {
fireEvent.click(btn)
})
act(() => {
jest.runAllTimers()
})
expect(onShow).toHaveBeenCalledTimes(1)
expect(onHide).toHaveBeenCalledTimes(0)
act(() => {
fireEvent.click(btn)
})
act(() => {
jest.runAllTimers()
})
expect(onShow).toHaveBeenCalledTimes(1)
expect(onHide).toHaveBeenCalledTimes(1)
jest.useRealTimers()
})