UNPKG

bootstrap-vue-3

Version:

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

163 lines (145 loc) 6.13 kB
import {enableAutoUnmount, mount} from '@vue/test-utils' import {afterEach, describe, expect, it} from 'vitest' import BBreadcrumb from './BBreadcrumb.vue' import BBreadcrumbItem from './BBreadcrumbItem.vue' import type {BreadcrumbItem} from '../../types' import {BREADCRUMB_SYMBOL} from '../../composables/useBreadcrumb' describe('breadcrumb', () => { enableAutoUnmount(afterEach) it('contains aria-label breadcrumb', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, }) expect(wrapper.attributes('aria-label')).toBe('breadcrumb') }) it('tag is nav', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, }) expect(wrapper.element.tagName).toBe('NAV') }) it('child tag is ol', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, }) // It should be noted, this doesn't determine if it's a child, // Rather, only that it is deeply nested inside the component const $ol = wrapper.find('ol') expect($ol.exists()).toBe(true) }) it('ol child has static class breadcrumb', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, }) // It should be noted, this doesn't determine if it's a child, // Rather, only that it is deeply nested inside the component const $ol = wrapper.get('ol') expect($ol.classes()).toContain('breadcrumb') }) it('renders default slot', () => { const wrapper = mount(BBreadcrumb, { slots: {default: 'foobar'}, global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, }) expect(wrapper.text()).toBe('foobar') }) it('renders prepend slot', () => { const wrapper = mount(BBreadcrumb, { slots: {prepend: 'foobar'}, global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, }) expect(wrapper.text()).toBe('foobar') }) it('renders append slot', () => { const wrapper = mount(BBreadcrumb, { slots: {append: 'foobar'}, global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, }) expect(wrapper.text()).toBe('foobar') }) it('renders all slots in correct order', () => { const wrapper = mount(BBreadcrumb, { slots: {prepend: 'prepend', default: 'default', append: 'append'}, global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, }) expect(wrapper.text()).toBe('prependdefaultappend') }) it('has breadcrumbitem', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, props: {items: [{text: 'foo'}] as Array<BreadcrumbItem>}, }) const $bbreadcrumbitem = wrapper.findComponent(BBreadcrumbItem) expect($bbreadcrumbitem.exists()).toBe(true) }) it('renders bbreadcrumbitem before default slot and after prepend slot', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, props: {items: [{text: 'foo'}] as Array<BreadcrumbItem>}, slots: {default: 'default', prepend: 'prepend'}, }) expect(wrapper.text()).toBe('prependfoodefault') }) it('bbreadcrumbitem exists when items array item is object', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, props: { items: [ {text: 'foo', active: true, disabled: true, href: 'href', to: 'to'}, ] as Array<BreadcrumbItem>, }, slots: {default: 'default', prepend: 'prepend'}, }) const $bbreadcrumbitem = wrapper.findComponent(BBreadcrumbItem) expect($bbreadcrumbitem.exists()).toBe(true) }) it('bbreadcrumbitem contains items as props', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, props: { items: [ {text: 'foo', active: true, disabled: true, href: 'href', to: 'to'}, ] as Array<BreadcrumbItem>, }, slots: {default: 'default', prepend: 'prepend'}, }) const $bbreadcrumbitem = wrapper.getComponent(BBreadcrumbItem) expect($bbreadcrumbitem.props('text')).toBe('foo') expect($bbreadcrumbitem.props('active')).toBe(true) expect($bbreadcrumbitem.props('disabled')).toBe(true) expect($bbreadcrumbitem.props('href')).toBe('href') expect($bbreadcrumbitem.props('to')).toBe('to') }) it('breadcrumbitem exists when items array item is string', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, props: {items: ['foobar']}, }) const $bbreadcrumbitem = wrapper.findComponent(BBreadcrumbItem) expect($bbreadcrumbitem.exists()).toBe(true) }) it('breadcrumbitem has prop text to be string when prop items array item is string', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, props: {items: ['foobar']}, }) const $bbreadcrumbitem = wrapper.getComponent(BBreadcrumbItem) expect($bbreadcrumbitem.props('text')).toBe('foobar') }) it('breadcrumbitem components have prop href to be # when their index is less than items length', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, props: {items: ['foo', 'bar']}, }) const [$bbreadcrumbitem] = wrapper.findAllComponents(BBreadcrumbItem) expect($bbreadcrumbitem.props('href')).toBe('#') }) it('breadcrumbitem components dont have prop href to be # when their index is items length', () => { const wrapper = mount(BBreadcrumb, { global: {provide: {[BREADCRUMB_SYMBOL as unknown as symbol]: {}}}, props: {items: ['foo', 'bar']}, }) const [, $bbreadcrumbitem] = wrapper.findAllComponents(BBreadcrumbItem) expect($bbreadcrumbitem.props('href')).toBeUndefined() }) })