123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- // Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- import { getByIconName } from '#tests/support/components/iconQueries.ts'
- import { renderComponent } from '#tests/support/components/index.ts'
- import { getTestRouter } from '#tests/support/components/renderComponent.ts'
- import CommonButtonGroup from '../CommonButtonGroup.vue'
- import type { CommonButtonOption } from '../types.ts'
- describe('buttons group', () => {
- it('renders a list of buttons', async () => {
- const onAction = vi.fn()
- const options: CommonButtonOption[] = [
- {
- label: 'link %s',
- labelPlaceholder: ['text'],
- link: '/example',
- value: 'link',
- },
- { label: 'button', onAction, value: 'button' },
- {
- label: 'with-icon',
- onAction,
- icon: 'home',
- disabled: true,
- value: 'icon',
- },
- ]
- const view = renderComponent(CommonButtonGroup, {
- props: { options, modelValue: 'button' },
- router: true,
- store: true,
- })
- expect(view.getByRole('link', { name: 'link text' })).toHaveAttribute(
- 'href',
- '/mobile/example',
- )
- const button = view.getByRole('button', { name: 'button' })
- expect(button).toBeEnabled()
- expect(button, 'selected button has a class').toHaveClass('!bg-gray-200')
- await view.events.click(button)
- expect(onAction).toHaveBeenCalled()
- const iconButton = view.getByRole('button', { name: 'with-icon' })
- expect(iconButton).toBeDisabled()
- expect(getByIconName(iconButton, 'home')).toBeInTheDocument()
- })
- it("doesn't call action, if disabled", async () => {
- const onAction = vi.fn()
- const options: CommonButtonOption[] = [
- { label: 'link', link: '/example', disabled: true },
- { label: 'button', onAction, disabled: true },
- ]
- const view = renderComponent(CommonButtonGroup, {
- props: { options },
- })
- const button = view.getByRole('button', { name: 'button' })
- const link = view.getByRole('link', { name: 'link' })
- expect(button).toBeDisabled()
- const router = getTestRouter()
- const currentUrl = router.currentRoute.value.fullPath
- await view.events.click(button)
- await view.events.click(link)
- expect(onAction).not.toHaveBeenCalled()
- expect(router.currentRoute.value.fullPath).toBe(currentUrl)
- })
- })
|