import * as React from 'react'
import { fireEvent, render, screen } from '@testing-library/react'
import '@testing-library/jest-dom'
import { CSearchButton } from '../index'
const originalPlatform = window.navigator.platform
beforeEach(() => {
Object.defineProperty(window.navigator, 'platform', {
configurable: true,
value: 'MacIntel',
})
})
afterEach(() => {
Object.defineProperty(window.navigator, 'platform', {
configurable: true,
value: originalPlatform,
})
})
test('loads and displays CSearchButton component', async () => {
const { container } = render()
expect(container).toMatchSnapshot()
})
test('CSearchButton customize', async () => {
const { container } = render(
,
)
expect(container).toMatchSnapshot()
expect(container.firstChild).toHaveClass('search-button')
expect(container.firstChild).toHaveClass('bazinga')
expect(screen.getByText('Command palette')).toBeInTheDocument()
expect(screen.getByText('⌘')).toBeInTheDocument()
expect(screen.getByText('K')).toBeInTheDocument()
})
test('CSearchButton triggers click on matching shortcut', async () => {
const onClick = jest.fn()
const onTrigger = jest.fn()
render()
fireEvent.keyDown(document, { key: 'k', metaKey: true })
expect(onClick).toHaveBeenCalledTimes(0)
expect(onTrigger).toHaveBeenCalledTimes(1)
})
test('CSearchButton ignores plain typing in editable fields', async () => {
const onClick = jest.fn()
render(
<>
>,
)
fireEvent.keyDown(screen.getByLabelText('Search input'), { key: 'k' })
expect(onClick).not.toHaveBeenCalled()
})
test('CSearchButton highlights active shortcut keys', async () => {
render()
fireEvent.keyDown(document, { key: 'Meta', metaKey: true })
expect(screen.getByText('⌘')).toHaveClass('active')
fireEvent.keyDown(document, { key: 'k', metaKey: true })
expect(screen.getByText('⌘')).toHaveClass('active')
expect(screen.getByText('K')).toHaveClass('active')
fireEvent.keyUp(document, { key: 'k' })
expect(screen.getByText('⌘')).not.toHaveClass('active')
expect(screen.getByText('K')).not.toHaveClass('active')
})
test('CSearchButton triggers onTrigger on click', async () => {
const onClick = jest.fn()
const onTrigger = jest.fn()
render()
fireEvent.click(screen.getByRole('button'))
expect(onClick).toHaveBeenCalledTimes(1)
expect(onTrigger).toHaveBeenCalledTimes(1)
})