koel/resources/assets/js/components/ui/SearchForm.spec.ts

47 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-01-18 11:13:05 +00:00
import Router from '@/router'
import { expect, it } from 'vitest'
2022-05-13 17:58:38 +00:00
import UnitTestCase from '@/__tests__/UnitTestCase'
import { screen } from '@testing-library/vue'
import { eventBus } from '@/utils'
2022-07-21 10:45:23 +00:00
import SearchForm from './SearchForm.vue'
2022-05-13 17:58:38 +00:00
new class extends UnitTestCase {
protected test () {
2022-07-21 10:45:23 +00:00
it('sets focus into search box when requested', async () => {
this.render(SearchForm)
eventBus.emit('FOCUS_SEARCH_FIELD')
expect(screen.getByRole('searchbox')).toBe(document.activeElement)
})
it('goes to search screen when search box is focused', async () => {
2024-01-18 11:13:05 +00:00
const mock = this.mock(Router, 'go')
this.render(SearchForm)
await this.user.click(screen.getByRole('searchbox'))
expect(mock).toHaveBeenCalledWith('search')
})
it('emits an event when search query is changed', async () => {
const mock = this.mock(eventBus, 'emit')
this.render(SearchForm)
await this.type(screen.getByRole('searchbox'), 'hey')
expect(mock).toHaveBeenCalledWith('SEARCH_KEYWORDS_CHANGED', 'hey')
})
it('goes to the search screen if the form is submitted', async () => {
2024-01-18 11:13:05 +00:00
const goMock = this.mock(Router, 'go')
this.render(SearchForm)
await this.type(screen.getByRole('searchbox'), 'hey')
await this.user.click(screen.getByRole('button', { name: 'Search' }))
expect(goMock).toHaveBeenCalledWith('search')
})
}
}