UNPKG

bootstrap-vue-3

Version:

Early (but lovely) implementation of Vue 3, Bootstrap 5 and Typescript

199 lines (174 loc) 6.3 kB
import {enableAutoUnmount, mount} from '@vue/test-utils' import {afterEach, describe, expect, it} from 'vitest' import BDropdownItem from './BDropdownItem.vue' import BLink from '../BLink/BLink.vue' describe('dropdown-item', () => { enableAutoUnmount(afterEach) it('is tag li', () => { const wrapper = mount(BDropdownItem) expect(wrapper.element.tagName).toBe('LI') }) it('has static attr role to be presentation', () => { const wrapper = mount(BDropdownItem) expect(wrapper.attributes('role')).toBe('presentation') }) it('has child with dynamic tag of button by default', () => { const wrapper = mount(BDropdownItem) const $button = wrapper.find('button') expect($button.exists()).toBe(true) }) it('child is tag a when prop href', () => { const wrapper = mount(BDropdownItem, { props: {href: '/abc'}, }) const $button = wrapper.find('button') const $a = wrapper.find('a') expect($button.exists()).toBe(false) expect($a.exists()).toBe(true) }) it('child is tag BLink when prop to', () => { const wrapper = mount(BDropdownItem, { props: {to: '/abc'}, }) const $button = wrapper.find('button') const $blink = wrapper.findComponent(BLink) expect($button.exists()).toBe(false) expect($blink.exists()).toBe(true) }) it('child is tag prefers a over blink', () => { const wrapper = mount(BDropdownItem, { props: {href: '/abc', to: '/abc'}, }) const $a = wrapper.find('a') const $blink = wrapper.findComponent(BLink) expect($blink.exists()).toBe(false) expect($a.exists()).toBe(true) }) it('child is tag prefers Blink over button', () => { const wrapper = mount(BDropdownItem, { props: {to: '/abc'}, }) const $button = wrapper.find('button') const $blink = wrapper.findComponent(BLink) expect($blink.exists()).toBe(true) expect($button.exists()).toBe(false) }) it('button child contains static class dropdown-item', () => { const wrapper = mount(BDropdownItem) const $button = wrapper.get('button') expect($button.classes()).toContain('dropdown-item') }) it('button renders default slot', () => { const wrapper = mount(BDropdownItem, { slots: {default: 'foobar'}, }) const $button = wrapper.get('button') expect($button.text()).toBe('foobar') }) it('button contains prop link class as class', () => { const wrapper = mount(BDropdownItem, { props: {linkClass: ['foo']}, }) const $button = wrapper.get('button') expect($button.classes()).toContain('foo') }) it('button has class active when prop active', async () => { const wrapper = mount(BDropdownItem, { props: {active: true}, }) const $button = wrapper.get('button') expect($button.classes()).toContain('active') await wrapper.setProps({active: false}) expect($button.classes()).not.toContain('active') }) it('button has class disabled when prop disabled', async () => { const wrapper = mount(BDropdownItem, { props: {disabled: true}, }) const $button = wrapper.get('button') expect($button.classes()).toContain('disabled') await wrapper.setProps({disabled: false}) expect($button.classes()).not.toContain('disabled') }) it('button has class text-{type} when prop variant', async () => { const wrapper = mount(BDropdownItem, { props: {variant: 'danger'}, }) const $button = wrapper.get('button') expect($button.classes()).toContain('text-danger') await wrapper.setProps({variant: undefined}) expect($button.classes()).not.toContain('text-danger') }) it('emits a click event when clicked', async () => { const wrapper = mount(BDropdownItem) const $button = wrapper.get('button') await $button.trigger('click') expect(wrapper.emitted()).toHaveProperty('click') }) it('click event passes value MouseEvent', async () => { const wrapper = mount(BDropdownItem) const $button = wrapper.get('button') await $button.trigger('click') const $emitted = wrapper.emitted('click') ?? [] expect($emitted[0][0] instanceof MouseEvent).toBe(true) }) it('does not emit click when disabled', async () => { const wrapper = mount(BDropdownItem, { props: {disabled: true}, }) const $button = wrapper.get('button') await $button.trigger('click') expect(wrapper.emitted()).not.toHaveProperty('click') }) it('button has disabled attr when prop disabled', async () => { const wrapper = mount(BDropdownItem, { props: {disabled: true}, }) const $button = wrapper.get('button') expect($button.attributes('disabled')).toBe('') await wrapper.setProps({disabled: false}) expect($button.attributes('disabled')).toBeUndefined() }) it('button has aria-current attr when prop active', async () => { const wrapper = mount(BDropdownItem, { props: {active: true}, }) const $button = wrapper.get('button') expect($button.attributes('aria-current')).toBe('true') await wrapper.setProps({active: false}) expect($button.attributes('aria-current')).toBeUndefined() }) it('button has href attr when prop href', () => { const wrapper = mount(BDropdownItem, { props: {href: '/abc'}, }) const $a = wrapper.get('a') expect($a.attributes('href')).toBe('/abc') }) it('button has rel attr when prop rel', () => { const wrapper = mount(BDropdownItem, { props: {rel: 'foobar'}, }) const $button = wrapper.get('button') expect($button.attributes('rel')).toBe('foobar') }) it('button has target attr when prop target', () => { const wrapper = mount(BDropdownItem, { props: {target: '_parent'}, }) const $button = wrapper.get('button') expect($button.attributes('target')).toBe('_parent') }) it('button has type button when tag is button', () => { const wrapper = mount(BDropdownItem) const $button = wrapper.get('button') expect($button.attributes('type')).toBe('button') }) it('does not have type button when tag is not button', () => { const wrapper = mount(BDropdownItem, { props: {href: '/abc'}, }) const $a = wrapper.get('a') expect($a.attributes('type')).toBeUndefined() }) })