import { act, fireEvent } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import * as React from 'react'
import renderWithTheme from '../../tests/helpers/renderWithTheme'
import Tooltip from './Tooltip'
const hiddenStyles = { transform: 'scale(0)', opacity: '0' }
describe('component: Tooltip', () => {
test('should always render label in invisible div', () => {
const { getByTestId } = renderWithTheme(
)
const label = getByTestId('elbisivni')
expect(label).toHaveAttribute('id', 'invisible')
expect(label).toHaveTextContent("I'm invisible, can you see me?")
})
test('should render tooltip on hover', async () => {
jest.useFakeTimers()
renderWithTheme()
const popup = document.querySelector('div[role=tooltip]')
expect(popup).toHaveStyle(hiddenStyles)
act(() => {
fireEvent.mouseEnter(document.querySelector('span') as Element)
jest.runAllTimers()
})
expect(popup).not.toHaveStyle(hiddenStyles)
})
test('should continue to render tooltip when content is hovered', async () => {
jest.useFakeTimers()
renderWithTheme()
const popup = document.querySelector('div[role=tooltip]') as Element
act(() => {
fireEvent.mouseEnter(document.querySelector('span') as Element)
setTimeout(jest.fn(), 2000)
jest.runOnlyPendingTimers()
})
act(() => {
fireEvent.mouseEnter(popup)
setTimeout(jest.fn(), 2000)
jest.runOnlyPendingTimers()
})
expect(popup).not.toHaveStyle(hiddenStyles)
})
test('should stay open when tooltip icon is clicked', async () => {
jest.useFakeTimers()
renderWithTheme(
<>
>
)
const tooltipTrigger = document.querySelector('span') as Element
const btn = document.querySelector('button') as Element
const popup = document.querySelector('div[role=tooltip]') as Element
act(() => {
userEvent.click(tooltipTrigger)
fireEvent.mouseEnter(btn)
setTimeout(jest.fn(), 2000)
jest.runAllTimers()
})
expect(popup).not.toHaveStyle(hiddenStyles)
fireEvent.click(btn)
expect(popup).toHaveStyle(hiddenStyles)
})
test('should support custom position function', async () => {
jest.useFakeTimers()
renderWithTheme(
({ top: 25, left: '150px', borderRadius: 0 })}
/>
)
act(() => {
fireEvent.mouseEnter(document.querySelector('span') as Element)
jest.runAllTimers()
})
const popup = document.querySelector('div[role=tooltip]') as Element
expect(popup).toHaveStyle({ top: '25px', left: '150px', borderRadius: '0px' })
})
})