UNPKG

@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

191 lines (166 loc) 6.14 kB
import { describe, it, expect } from 'vitest' import { mount } from '@vue/test-utils' import DatametriaAlert from '../DatametriaAlert.vue' describe('DatametriaAlert', () => { // Rendering tests it('renders with default props', () => { const wrapper = mount(DatametriaAlert) expect(wrapper.find('.datametria-alert').exists()).toBe(true) expect(wrapper.find('.datametria-alert--info').exists()).toBe(true) }) it('renders with custom message', () => { const wrapper = mount(DatametriaAlert, { props: { message: 'Test message' } }) expect(wrapper.text()).toContain('Test message') }) it('renders with title and message', () => { const wrapper = mount(DatametriaAlert, { props: { title: 'Test Title', message: 'Test message' } }) expect(wrapper.find('.datametria-alert__title').text()).toBe('Test Title') expect(wrapper.find('.datametria-alert__message').text()).toBe('Test message') }) it('renders slot content', () => { const wrapper = mount(DatametriaAlert, { slots: { default: '<strong>Custom content</strong>' } }) expect(wrapper.html()).toContain('<strong>Custom content</strong>') }) // Variant tests it('renders success variant', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'success' } }) expect(wrapper.find('.datametria-alert--success').exists()).toBe(true) expect(wrapper.text()).toContain('✓') }) it('renders error variant', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'error' } }) expect(wrapper.find('.datametria-alert--error').exists()).toBe(true) expect(wrapper.text()).toContain('✕') }) it('renders warning variant', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'warning' } }) expect(wrapper.find('.datametria-alert--warning').exists()).toBe(true) expect(wrapper.text()).toContain('⚠') }) it('renders info variant', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'info' } }) expect(wrapper.find('.datametria-alert--info').exists()).toBe(true) expect(wrapper.text()).toContain('ℹ') }) it('renders primary variant', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'primary' } }) expect(wrapper.find('.datametria-alert--primary').exists()).toBe(true) expect(wrapper.text()).toContain('ℹ') }) // Closable tests it('renders close button when closable', () => { const wrapper = mount(DatametriaAlert, { props: { closable: true } }) expect(wrapper.find('.datametria-alert__close').exists()).toBe(true) }) it('does not render close button when not closable', () => { const wrapper = mount(DatametriaAlert, { props: { closable: false } }) expect(wrapper.find('.datametria-alert__close').exists()).toBe(false) }) it('emits update:modelValue when close button clicked', async () => { const wrapper = mount(DatametriaAlert, { props: { closable: true } }) await wrapper.find('.datametria-alert__close').trigger('click') expect(wrapper.emitted('update:modelValue')).toBeTruthy() expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([false]) }) // v-model tests it('shows alert when modelValue is true', () => { const wrapper = mount(DatametriaAlert, { props: { modelValue: true } }) expect(wrapper.find('.datametria-alert').exists()).toBe(true) }) it('hides alert when modelValue is false', () => { const wrapper = mount(DatametriaAlert, { props: { modelValue: false } }) expect(wrapper.find('.datametria-alert').exists()).toBe(false) }) // CSS Variables tests it('uses CSS variables for success variant', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'success' } }) const alert = wrapper.find('.datametria-alert--success') const style = getComputedStyle(alert.element) // Verifica que as CSS variables estão sendo usadas expect(alert.element.className).toContain('datametria-alert--success') }) it('uses CSS variables for error variant', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'error' } }) const alert = wrapper.find('.datametria-alert--error') expect(alert.element.className).toContain('datametria-alert--error') }) it('uses CSS variables for warning variant', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'warning' } }) const alert = wrapper.find('.datametria-alert--warning') expect(alert.element.className).toContain('datametria-alert--warning') }) it('uses CSS variables for spacing and typography', () => { const wrapper = mount(DatametriaAlert, { props: { title: 'Title', message: 'Message' } }) // Verifica estrutura expect(wrapper.find('.datametria-alert__icon').exists()).toBe(true) expect(wrapper.find('.datametria-alert__content').exists()).toBe(true) expect(wrapper.find('.datametria-alert__title').exists()).toBe(true) expect(wrapper.find('.datametria-alert__message').exists()).toBe(true) }) // Backward compatibility tests it('works without ThemeProvider (fallback values)', () => { const wrapper = mount(DatametriaAlert, { props: { variant: 'success', title: 'Success', message: 'Operation completed' } }) expect(wrapper.find('.datametria-alert--success').exists()).toBe(true) expect(wrapper.text()).toContain('Success') expect(wrapper.text()).toContain('Operation completed') }) it('maintains visual consistency across variants', () => { const variants: Array<'success' | 'error' | 'warning' | 'info' | 'primary'> = [ 'success', 'error', 'warning', 'info', 'primary' ] variants.forEach(variant => { const wrapper = mount(DatametriaAlert, { props: { variant } }) expect(wrapper.find(`.datametria-alert--${variant}`).exists()).toBe(true) }) }) })