import { describe, expect, it, vi } from 'vitest'
import { fireEvent, render, screen } from '@testing-library/react'
import Banner, { type BannerProps } from './Banner'
describe('Banner component', () => {
const types: BannerProps['type'][] = ['informational', 'issue']
types.forEach((type) => {
it(`renders ${type} banner correctly with class name ${type}`, () => {
const { container } = render(
,
)
expect(container.firstChild).toHaveClass(type)
expect(screen.getByText('Test primary text')).toBeInTheDocument()
expect(screen.getByText('Test secondary text')).toBeInTheDocument()
})
})
it('renders button when buttonProps are provided', () => {
const handleClick = vi.fn<() => void>()
render(
,
)
const button = screen.getByRole('button')
expect(button).toBeInTheDocument()
fireEvent.click(button)
expect(handleClick).toHaveBeenCalledTimes(1)
})
it('render close button when closeButtonCallout is provided', () => {
const closeButtonCallout = vi.fn<() => void>()
const handleClick = vi.fn<() => void>()
render(
,
)
const closeButton = screen.getAllByRole('button')[1]
expect(closeButton).toBeInTheDocument()
fireEvent.click(closeButton)
expect(closeButtonCallout).toHaveBeenCalledTimes(1)
})
it('renders info icon when hideInfoIcon is not provided', () => {
const { rerender } = render(
,
)
expect(screen.getByTestId('icon-info')).toBeInTheDocument()
rerender(
,
)
expect(screen.queryByTestId('icon-info')).toBeNull()
})
})