@datametria/vue-components
Version:
DATAMETRIA Vue.js 3 Component Library with Multi-Brand Theming - 51 components + 10 composables with theming support, WCAG 2.2 AA, dark mode, responsive system
138 lines (120 loc) • 5.02 kB
text/typescript
import { describe, it, expect } from 'vitest'
import { mount } from '@vue/test-utils'
import DatametriaFloatingBar from '../DatametriaFloatingBar.vue'
describe('DatametriaFloatingBar', () => {
it('renders correctly', () => {
const wrapper = mount(DatametriaFloatingBar)
expect(wrapper.find('.dm-floating-bar').exists()).toBe(true)
})
it('applies position classes', () => {
const positions = ['top', 'bottom', 'left', 'right'] as const
positions.forEach(position => {
const wrapper = mount(DatametriaFloatingBar, { props: { position } })
expect(wrapper.find(`.dm-floating-bar--${position}`).exists()).toBe(true)
})
})
it('applies variant classes', () => {
const variants = ['light', 'dark', 'primary'] as const
variants.forEach(variant => {
const wrapper = mount(DatametriaFloatingBar, { props: { variant } })
expect(wrapper.find(`.dm-floating-bar--${variant}`).exists()).toBe(true)
})
})
it('applies shadow class when shadow is true', () => {
const wrapper = mount(DatametriaFloatingBar, { props: { shadow: true } })
expect(wrapper.find('.dm-floating-bar--shadow').exists()).toBe(true)
})
it('does not apply shadow class when shadow is false', () => {
const wrapper = mount(DatametriaFloatingBar, { props: { shadow: false } })
expect(wrapper.find('.dm-floating-bar--shadow').exists()).toBe(false)
})
it('applies rounded class when rounded is true', () => {
const wrapper = mount(DatametriaFloatingBar, { props: { rounded: true } })
expect(wrapper.find('.dm-floating-bar--rounded').exists()).toBe(true)
})
it('does not apply rounded class when rounded is false', () => {
const wrapper = mount(DatametriaFloatingBar, { props: { rounded: false } })
expect(wrapper.find('.dm-floating-bar--rounded').exists()).toBe(false)
})
it('renders slot content', () => {
const wrapper = mount(DatametriaFloatingBar, {
slots: { default: '<button class="test-button">Action</button>' }
})
expect(wrapper.find('.test-button').exists()).toBe(true)
expect(wrapper.text()).toContain('Action')
})
it('applies correct position style for top', () => {
const wrapper = mount(DatametriaFloatingBar, {
props: { position: 'top', offset: '20px' }
})
const style = wrapper.find('.dm-floating-bar').attributes('style')
expect(style).toContain('top: 20px')
})
it('applies correct position style for bottom', () => {
const wrapper = mount(DatametriaFloatingBar, {
props: { position: 'bottom', offset: '24px' }
})
const style = wrapper.find('.dm-floating-bar').attributes('style')
expect(style).toContain('bottom: 24px')
})
it('applies correct position style for left', () => {
const wrapper = mount(DatametriaFloatingBar, {
props: { position: 'left', offset: '32px' }
})
const style = wrapper.find('.dm-floating-bar').attributes('style')
expect(style).toContain('left: 32px')
})
it('applies correct position style for right', () => {
const wrapper = mount(DatametriaFloatingBar, {
props: { position: 'right', offset: '40px' }
})
const style = wrapper.find('.dm-floating-bar').attributes('style')
expect(style).toContain('right: 40px')
})
it('uses default offset when not provided', () => {
const wrapper = mount(DatametriaFloatingBar, { props: { position: 'bottom' } })
const style = wrapper.find('.dm-floating-bar').attributes('style')
expect(style).toContain('bottom: 16px')
})
it('has correct aria attributes', () => {
const wrapper = mount(DatametriaFloatingBar, {
props: { ariaLabel: 'Floating toolbar' }
})
const bar = wrapper.find('.dm-floating-bar')
expect(bar.attributes('role')).toBe('toolbar')
expect(bar.attributes('aria-label')).toBe('Floating toolbar')
})
it('renders content wrapper', () => {
const wrapper = mount(DatametriaFloatingBar)
expect(wrapper.find('.dm-floating-bar__content').exists()).toBe(true)
})
it('applies all classes correctly', () => {
const wrapper = mount(DatametriaFloatingBar, {
props: {
position: 'top',
variant: 'primary',
shadow: true,
rounded: true
}
})
const bar = wrapper.find('.dm-floating-bar')
expect(bar.classes()).toContain('dm-floating-bar--top')
expect(bar.classes()).toContain('dm-floating-bar--primary')
expect(bar.classes()).toContain('dm-floating-bar--shadow')
expect(bar.classes()).toContain('dm-floating-bar--rounded')
})
it('renders multiple action buttons', () => {
const wrapper = mount(DatametriaFloatingBar, {
slots: {
default: `
<button class="btn-1">Action 1</button>
<button class="btn-2">Action 2</button>
<button class="btn-3">Action 3</button>
`
}
})
expect(wrapper.find('.btn-1').exists()).toBe(true)
expect(wrapper.find('.btn-2').exists()).toBe(true)
expect(wrapper.find('.btn-3').exists()).toBe(true)
})
})