@datametria/vue-components 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +625 -594
- package/dist/index.es.js +1962 -1887
- package/dist/index.umd.js +6 -6
- package/dist/src/components/DatametriaForm.vue.d.ts +1 -1
- package/dist/src/components/DatametriaInput.vue.d.ts +9 -1
- package/dist/src/components/DatametriaSelect.vue.d.ts +10 -1
- package/dist/vue-components.css +1 -1
- package/package.json +103 -105
- package/src/components/DatametriaAlert.vue +151 -133
- package/src/components/DatametriaAutocomplete.vue +250 -229
- package/src/components/DatametriaAvatar.vue +256 -238
- package/src/components/DatametriaBadge.vue +101 -96
- package/src/components/DatametriaBreadcrumb.vue +132 -128
- package/src/components/DatametriaButton.vue +191 -173
- package/src/components/DatametriaCard.vue +84 -66
- package/src/components/DatametriaCheckbox.vue +197 -193
- package/src/components/DatametriaCheckboxGroup.vue +56 -38
- package/src/components/DatametriaChip.vue +159 -141
- package/src/components/DatametriaContainer.vue +70 -52
- package/src/components/DatametriaDataTable.vue +318 -300
- package/src/components/DatametriaDatePicker.vue +396 -378
- package/src/components/DatametriaDialog.vue +297 -293
- package/src/components/DatametriaDivider.vue +105 -98
- package/src/components/DatametriaDropdown.vue +356 -350
- package/src/components/DatametriaEmpty.vue +155 -151
- package/src/components/DatametriaFileUpload.vue +413 -395
- package/src/components/DatametriaFloatingBar.vue +144 -126
- package/src/components/DatametriaForm.vue +174 -156
- package/src/components/DatametriaFormItem.vue +183 -179
- package/src/components/DatametriaGrid.vue +55 -37
- package/src/components/DatametriaInput.vue +314 -263
- package/src/components/DatametriaMenu.vue +618 -600
- package/src/components/DatametriaModal.vue +147 -129
- package/src/components/DatametriaNavbar.vue +277 -223
- package/src/components/DatametriaPagination.vue +375 -371
- package/src/components/DatametriaPasswordInput.vue +444 -426
- package/src/components/DatametriaPopconfirm.vue +240 -234
- package/src/components/DatametriaProgress.vue +228 -224
- package/src/components/DatametriaRadio.vue +151 -147
- package/src/components/DatametriaRadioGroup.vue +55 -37
- package/src/components/DatametriaResult.vue +135 -131
- package/src/components/DatametriaSelect.vue +311 -211
- package/src/components/DatametriaSidebar.vue +294 -222
- package/src/components/DatametriaSkeleton.vue +257 -234
- package/src/components/DatametriaSlider.vue +409 -391
- package/src/components/DatametriaSortableTable.vue +820 -802
- package/src/components/DatametriaSpinner.vue +114 -110
- package/src/components/DatametriaSteps.vue +318 -312
- package/src/components/DatametriaSwitch.vue +146 -142
- package/src/components/DatametriaTabPane.vue +94 -76
- package/src/components/DatametriaTable.vue +118 -100
- package/src/components/DatametriaTabs.vue +315 -297
- package/src/components/DatametriaTextarea.vue +213 -195
- package/src/components/DatametriaTimePicker.vue +317 -299
- package/src/components/DatametriaToast.vue +176 -176
- package/src/components/DatametriaTooltip.vue +421 -400
- package/src/components/DatametriaTree.vue +126 -122
- package/src/components/DatametriaTreeNode.vue +176 -172
- package/src/components/DatametriaUpload.vue +379 -361
- package/src/components/__tests__/DatametriaAlert.test.js +35 -35
- package/src/components/__tests__/DatametriaAlert.test.ts +190 -190
- package/src/components/__tests__/DatametriaAvatar.test.ts +151 -151
- package/src/components/__tests__/DatametriaBadge.test.js +29 -29
- package/src/components/__tests__/DatametriaBadge.test.ts +167 -167
- package/src/components/__tests__/DatametriaBreadcrumb.test.ts +187 -0
- package/src/components/__tests__/DatametriaButton.test.js +30 -30
- package/src/components/__tests__/DatametriaButton.test.ts +283 -283
- package/src/components/__tests__/DatametriaCard.test.ts +201 -201
- package/src/components/__tests__/DatametriaCheckbox.test.ts +204 -0
- package/src/components/__tests__/DatametriaChip.test.js +38 -38
- package/src/components/__tests__/DatametriaContainer.test.ts +52 -52
- package/src/components/__tests__/DatametriaDialog.test.ts +338 -0
- package/src/components/__tests__/DatametriaDivider.test.ts +54 -54
- package/src/components/__tests__/DatametriaDropdown.test.ts +357 -0
- package/src/components/__tests__/DatametriaEmpty.test.ts +261 -0
- package/src/components/__tests__/DatametriaFileUpload.test.ts +290 -290
- package/src/components/__tests__/DatametriaFloatingBar.test.ts +137 -137
- package/src/components/__tests__/DatametriaForm.test.ts +96 -0
- package/src/components/__tests__/DatametriaFormItem.test.ts +58 -0
- package/src/components/__tests__/DatametriaGrid.test.ts +31 -31
- package/src/components/__tests__/DatametriaInput.test.ts +72 -72
- package/src/components/__tests__/DatametriaMenu.test.ts +366 -366
- package/src/components/__tests__/DatametriaModal.test.ts +86 -86
- package/src/components/__tests__/DatametriaNavbar.test.js +48 -48
- package/src/components/__tests__/DatametriaNavbar.test.ts +203 -203
- package/src/components/__tests__/DatametriaPasswordInput.test.js +305 -305
- package/src/components/__tests__/DatametriaRadio.test.ts +195 -0
- package/src/components/__tests__/DatametriaSelect.test.ts +77 -77
- package/src/components/__tests__/DatametriaSidebar.test.ts +169 -169
- package/src/components/__tests__/DatametriaSlider.test.ts +261 -261
- package/src/components/__tests__/DatametriaSortableTable.test.js +168 -168
- package/src/components/__tests__/DatametriaSpinner.test.ts +156 -156
- package/src/components/__tests__/DatametriaSteps.test.ts +211 -0
- package/src/components/__tests__/DatametriaSwitch.test.ts +129 -0
- package/src/components/__tests__/DatametriaTabPane.test.ts +205 -0
- package/src/components/__tests__/DatametriaTable.test.ts +97 -97
- package/src/components/__tests__/DatametriaTabs.test.ts +232 -232
- package/src/components/__tests__/DatametriaToast.test.js +48 -48
- package/src/components/__tests__/DatametriaToast.test.ts +99 -99
- package/src/components/__tests__/DatametriaTree.test.ts +376 -0
- package/src/components/__tests__/index.test.ts +48 -0
- package/src/composables/useAccessibilityScale.ts +94 -94
- package/src/composables/useBreakpoints.ts +82 -82
- package/src/composables/useHapticFeedback.ts +439 -439
- package/src/composables/useRipple.ts +218 -218
- package/src/composables/useTheme.ts +5 -1
- package/src/index.ts +84 -84
- package/src/stories/Variants.stories.js +95 -95
- package/src/styles/design-tokens.css +623 -623
- package/src/theme/ThemeProvider.vue +96 -96
- package/src/theme/__tests__/ThemeProvider.test.ts +208 -208
- package/src/theme/__tests__/constants.test.ts +31 -31
- package/src/theme/__tests__/presets.test.ts +166 -166
- package/src/theme/__tests__/tokens.test.ts +155 -155
- package/src/theme/__tests__/types.test.ts +153 -153
- package/src/theme/__tests__/useTheme.test.ts +146 -146
- package/src/theme/constants.ts +14 -14
- package/src/theme/index.ts +12 -12
- package/src/theme/presets/datametria.ts +94 -94
- package/src/theme/presets/default.ts +94 -94
- package/src/theme/presets/index.ts +8 -8
- package/src/theme/tokens/colors.ts +28 -28
- package/src/theme/tokens/index.ts +47 -47
- package/src/theme/tokens/spacing.ts +21 -21
- package/src/theme/tokens/typography.ts +35 -35
- package/src/theme/types.ts +111 -111
- package/src/theme/useTheme.ts +28 -28
- package/src/types/index.ts +55 -55
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import { describe, it, expect, vi } from 'vitest'
|
|
2
|
-
import { mount } from '@vue/test-utils'
|
|
3
|
-
import DatametriaAlert from '../DatametriaAlert.vue'
|
|
4
|
-
|
|
5
|
-
describe('DatametriaAlert', () => {
|
|
6
|
-
it('renders with primary variant', () => {
|
|
7
|
-
const wrapper = mount(DatametriaAlert, {
|
|
8
|
-
props: {
|
|
9
|
-
variant: 'primary',
|
|
10
|
-
message: 'Test message'
|
|
11
|
-
}
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
expect(wrapper.classes()).toContain('datametria-alert--primary')
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
it('validates invalid variant in development', () => {
|
|
18
|
-
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
19
|
-
const originalEnv = process.env.NODE_ENV
|
|
20
|
-
process.env.NODE_ENV = 'development'
|
|
21
|
-
|
|
22
|
-
mount(DatametriaAlert, {
|
|
23
|
-
props: {
|
|
24
|
-
variant: 'invalid',
|
|
25
|
-
message: 'Test'
|
|
26
|
-
}
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
expect(consoleSpy).toHaveBeenCalledWith(
|
|
30
|
-
expect.stringContaining('[DatametriaAlert] Invalid variant "invalid"')
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
process.env.NODE_ENV = originalEnv
|
|
34
|
-
consoleSpy.mockRestore()
|
|
35
|
-
})
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest'
|
|
2
|
+
import { mount } from '@vue/test-utils'
|
|
3
|
+
import DatametriaAlert from '../DatametriaAlert.vue'
|
|
4
|
+
|
|
5
|
+
describe('DatametriaAlert', () => {
|
|
6
|
+
it('renders with primary variant', () => {
|
|
7
|
+
const wrapper = mount(DatametriaAlert, {
|
|
8
|
+
props: {
|
|
9
|
+
variant: 'primary',
|
|
10
|
+
message: 'Test message'
|
|
11
|
+
}
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
expect(wrapper.classes()).toContain('datametria-alert--primary')
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it('validates invalid variant in development', () => {
|
|
18
|
+
const consoleSpy = vi.spyOn(console, 'warn').mockImplementation(() => {})
|
|
19
|
+
const originalEnv = process.env.NODE_ENV
|
|
20
|
+
process.env.NODE_ENV = 'development'
|
|
21
|
+
|
|
22
|
+
mount(DatametriaAlert, {
|
|
23
|
+
props: {
|
|
24
|
+
variant: 'invalid',
|
|
25
|
+
message: 'Test'
|
|
26
|
+
}
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
expect(consoleSpy).toHaveBeenCalledWith(
|
|
30
|
+
expect.stringContaining('[DatametriaAlert] Invalid variant "invalid"')
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
process.env.NODE_ENV = originalEnv
|
|
34
|
+
consoleSpy.mockRestore()
|
|
35
|
+
})
|
|
36
36
|
})
|
|
@@ -1,190 +1,190 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { mount } from '@vue/test-utils'
|
|
3
|
-
import DatametriaAlert from '../DatametriaAlert.vue'
|
|
4
|
-
|
|
5
|
-
describe('DatametriaAlert', () => {
|
|
6
|
-
// Rendering tests
|
|
7
|
-
it('renders with default props', () => {
|
|
8
|
-
const wrapper = mount(DatametriaAlert)
|
|
9
|
-
expect(wrapper.find('.datametria-alert').exists()).toBe(true)
|
|
10
|
-
expect(wrapper.find('.datametria-alert--info').exists()).toBe(true)
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
it('renders with custom message', () => {
|
|
14
|
-
const wrapper = mount(DatametriaAlert, {
|
|
15
|
-
props: { message: 'Test message' }
|
|
16
|
-
})
|
|
17
|
-
expect(wrapper.text()).toContain('Test message')
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
it('renders with title and message', () => {
|
|
21
|
-
const wrapper = mount(DatametriaAlert, {
|
|
22
|
-
props: {
|
|
23
|
-
title: 'Test Title',
|
|
24
|
-
message: 'Test message'
|
|
25
|
-
}
|
|
26
|
-
})
|
|
27
|
-
expect(wrapper.find('.datametria-alert__title').text()).toBe('Test Title')
|
|
28
|
-
expect(wrapper.find('.datametria-alert__message').text()).toBe('Test message')
|
|
29
|
-
})
|
|
30
|
-
|
|
31
|
-
it('renders slot content', () => {
|
|
32
|
-
const wrapper = mount(DatametriaAlert, {
|
|
33
|
-
slots: {
|
|
34
|
-
default: '<strong>Custom content</strong>'
|
|
35
|
-
}
|
|
36
|
-
})
|
|
37
|
-
expect(wrapper.html()).toContain('<strong>Custom content</strong>')
|
|
38
|
-
})
|
|
39
|
-
|
|
40
|
-
// Variant tests
|
|
41
|
-
it('renders success variant', () => {
|
|
42
|
-
const wrapper = mount(DatametriaAlert, {
|
|
43
|
-
props: { variant: 'success' }
|
|
44
|
-
})
|
|
45
|
-
expect(wrapper.find('.datametria-alert--success').exists()).toBe(true)
|
|
46
|
-
expect(wrapper.text()).toContain('✓')
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
it('renders error variant', () => {
|
|
50
|
-
const wrapper = mount(DatametriaAlert, {
|
|
51
|
-
props: { variant: 'error' }
|
|
52
|
-
})
|
|
53
|
-
expect(wrapper.find('.datametria-alert--error').exists()).toBe(true)
|
|
54
|
-
expect(wrapper.text()).toContain('✕')
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
it('renders warning variant', () => {
|
|
58
|
-
const wrapper = mount(DatametriaAlert, {
|
|
59
|
-
props: { variant: 'warning' }
|
|
60
|
-
})
|
|
61
|
-
expect(wrapper.find('.datametria-alert--warning').exists()).toBe(true)
|
|
62
|
-
expect(wrapper.text()).toContain('⚠')
|
|
63
|
-
})
|
|
64
|
-
|
|
65
|
-
it('renders info variant', () => {
|
|
66
|
-
const wrapper = mount(DatametriaAlert, {
|
|
67
|
-
props: { variant: 'info' }
|
|
68
|
-
})
|
|
69
|
-
expect(wrapper.find('.datametria-alert--info').exists()).toBe(true)
|
|
70
|
-
expect(wrapper.text()).toContain('ℹ')
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
it('renders primary variant', () => {
|
|
74
|
-
const wrapper = mount(DatametriaAlert, {
|
|
75
|
-
props: { variant: 'primary' }
|
|
76
|
-
})
|
|
77
|
-
expect(wrapper.find('.datametria-alert--primary').exists()).toBe(true)
|
|
78
|
-
expect(wrapper.text()).toContain('ℹ')
|
|
79
|
-
})
|
|
80
|
-
|
|
81
|
-
// Closable tests
|
|
82
|
-
it('renders close button when closable', () => {
|
|
83
|
-
const wrapper = mount(DatametriaAlert, {
|
|
84
|
-
props: { closable: true }
|
|
85
|
-
})
|
|
86
|
-
expect(wrapper.find('.datametria-alert__close').exists()).toBe(true)
|
|
87
|
-
})
|
|
88
|
-
|
|
89
|
-
it('does not render close button when not closable', () => {
|
|
90
|
-
const wrapper = mount(DatametriaAlert, {
|
|
91
|
-
props: { closable: false }
|
|
92
|
-
})
|
|
93
|
-
expect(wrapper.find('.datametria-alert__close').exists()).toBe(false)
|
|
94
|
-
})
|
|
95
|
-
|
|
96
|
-
it('emits update:modelValue when close button clicked', async () => {
|
|
97
|
-
const wrapper = mount(DatametriaAlert, {
|
|
98
|
-
props: { closable: true }
|
|
99
|
-
})
|
|
100
|
-
await wrapper.find('.datametria-alert__close').trigger('click')
|
|
101
|
-
expect(wrapper.emitted('update:modelValue')).toBeTruthy()
|
|
102
|
-
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([false])
|
|
103
|
-
})
|
|
104
|
-
|
|
105
|
-
// v-model tests
|
|
106
|
-
it('shows alert when modelValue is true', () => {
|
|
107
|
-
const wrapper = mount(DatametriaAlert, {
|
|
108
|
-
props: { modelValue: true }
|
|
109
|
-
})
|
|
110
|
-
expect(wrapper.find('.datametria-alert').exists()).toBe(true)
|
|
111
|
-
})
|
|
112
|
-
|
|
113
|
-
it('hides alert when modelValue is false', () => {
|
|
114
|
-
const wrapper = mount(DatametriaAlert, {
|
|
115
|
-
props: { modelValue: false }
|
|
116
|
-
})
|
|
117
|
-
expect(wrapper.find('.datametria-alert').exists()).toBe(false)
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
// CSS Variables tests
|
|
121
|
-
it('uses CSS variables for success variant', () => {
|
|
122
|
-
const wrapper = mount(DatametriaAlert, {
|
|
123
|
-
props: { variant: 'success' }
|
|
124
|
-
})
|
|
125
|
-
const alert = wrapper.find('.datametria-alert--success')
|
|
126
|
-
const style = getComputedStyle(alert.element)
|
|
127
|
-
|
|
128
|
-
// Verifica que as CSS variables estão sendo usadas
|
|
129
|
-
expect(alert.element.className).toContain('datametria-alert--success')
|
|
130
|
-
})
|
|
131
|
-
|
|
132
|
-
it('uses CSS variables for error variant', () => {
|
|
133
|
-
const wrapper = mount(DatametriaAlert, {
|
|
134
|
-
props: { variant: 'error' }
|
|
135
|
-
})
|
|
136
|
-
const alert = wrapper.find('.datametria-alert--error')
|
|
137
|
-
expect(alert.element.className).toContain('datametria-alert--error')
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
it('uses CSS variables for warning variant', () => {
|
|
141
|
-
const wrapper = mount(DatametriaAlert, {
|
|
142
|
-
props: { variant: 'warning' }
|
|
143
|
-
})
|
|
144
|
-
const alert = wrapper.find('.datametria-alert--warning')
|
|
145
|
-
expect(alert.element.className).toContain('datametria-alert--warning')
|
|
146
|
-
})
|
|
147
|
-
|
|
148
|
-
it('uses CSS variables for spacing and typography', () => {
|
|
149
|
-
const wrapper = mount(DatametriaAlert, {
|
|
150
|
-
props: {
|
|
151
|
-
title: 'Title',
|
|
152
|
-
message: 'Message'
|
|
153
|
-
}
|
|
154
|
-
})
|
|
155
|
-
|
|
156
|
-
// Verifica estrutura
|
|
157
|
-
expect(wrapper.find('.datametria-alert__icon').exists()).toBe(true)
|
|
158
|
-
expect(wrapper.find('.datametria-alert__content').exists()).toBe(true)
|
|
159
|
-
expect(wrapper.find('.datametria-alert__title').exists()).toBe(true)
|
|
160
|
-
expect(wrapper.find('.datametria-alert__message').exists()).toBe(true)
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
// Backward compatibility tests
|
|
164
|
-
it('works without ThemeProvider (fallback values)', () => {
|
|
165
|
-
const wrapper = mount(DatametriaAlert, {
|
|
166
|
-
props: {
|
|
167
|
-
variant: 'success',
|
|
168
|
-
title: 'Success',
|
|
169
|
-
message: 'Operation completed'
|
|
170
|
-
}
|
|
171
|
-
})
|
|
172
|
-
|
|
173
|
-
expect(wrapper.find('.datametria-alert--success').exists()).toBe(true)
|
|
174
|
-
expect(wrapper.text()).toContain('Success')
|
|
175
|
-
expect(wrapper.text()).toContain('Operation completed')
|
|
176
|
-
})
|
|
177
|
-
|
|
178
|
-
it('maintains visual consistency across variants', () => {
|
|
179
|
-
const variants: Array<'success' | 'error' | 'warning' | 'info' | 'primary'> = [
|
|
180
|
-
'success', 'error', 'warning', 'info', 'primary'
|
|
181
|
-
]
|
|
182
|
-
|
|
183
|
-
variants.forEach(variant => {
|
|
184
|
-
const wrapper = mount(DatametriaAlert, {
|
|
185
|
-
props: { variant }
|
|
186
|
-
})
|
|
187
|
-
expect(wrapper.find(`.datametria-alert--${variant}`).exists()).toBe(true)
|
|
188
|
-
})
|
|
189
|
-
})
|
|
190
|
-
})
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { mount } from '@vue/test-utils'
|
|
3
|
+
import DatametriaAlert from '../DatametriaAlert.vue'
|
|
4
|
+
|
|
5
|
+
describe('DatametriaAlert', () => {
|
|
6
|
+
// Rendering tests
|
|
7
|
+
it('renders with default props', () => {
|
|
8
|
+
const wrapper = mount(DatametriaAlert)
|
|
9
|
+
expect(wrapper.find('.datametria-alert').exists()).toBe(true)
|
|
10
|
+
expect(wrapper.find('.datametria-alert--info').exists()).toBe(true)
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
it('renders with custom message', () => {
|
|
14
|
+
const wrapper = mount(DatametriaAlert, {
|
|
15
|
+
props: { message: 'Test message' }
|
|
16
|
+
})
|
|
17
|
+
expect(wrapper.text()).toContain('Test message')
|
|
18
|
+
})
|
|
19
|
+
|
|
20
|
+
it('renders with title and message', () => {
|
|
21
|
+
const wrapper = mount(DatametriaAlert, {
|
|
22
|
+
props: {
|
|
23
|
+
title: 'Test Title',
|
|
24
|
+
message: 'Test message'
|
|
25
|
+
}
|
|
26
|
+
})
|
|
27
|
+
expect(wrapper.find('.datametria-alert__title').text()).toBe('Test Title')
|
|
28
|
+
expect(wrapper.find('.datametria-alert__message').text()).toBe('Test message')
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
it('renders slot content', () => {
|
|
32
|
+
const wrapper = mount(DatametriaAlert, {
|
|
33
|
+
slots: {
|
|
34
|
+
default: '<strong>Custom content</strong>'
|
|
35
|
+
}
|
|
36
|
+
})
|
|
37
|
+
expect(wrapper.html()).toContain('<strong>Custom content</strong>')
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
// Variant tests
|
|
41
|
+
it('renders success variant', () => {
|
|
42
|
+
const wrapper = mount(DatametriaAlert, {
|
|
43
|
+
props: { variant: 'success' }
|
|
44
|
+
})
|
|
45
|
+
expect(wrapper.find('.datametria-alert--success').exists()).toBe(true)
|
|
46
|
+
expect(wrapper.text()).toContain('✓')
|
|
47
|
+
})
|
|
48
|
+
|
|
49
|
+
it('renders error variant', () => {
|
|
50
|
+
const wrapper = mount(DatametriaAlert, {
|
|
51
|
+
props: { variant: 'error' }
|
|
52
|
+
})
|
|
53
|
+
expect(wrapper.find('.datametria-alert--error').exists()).toBe(true)
|
|
54
|
+
expect(wrapper.text()).toContain('✕')
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
it('renders warning variant', () => {
|
|
58
|
+
const wrapper = mount(DatametriaAlert, {
|
|
59
|
+
props: { variant: 'warning' }
|
|
60
|
+
})
|
|
61
|
+
expect(wrapper.find('.datametria-alert--warning').exists()).toBe(true)
|
|
62
|
+
expect(wrapper.text()).toContain('⚠')
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('renders info variant', () => {
|
|
66
|
+
const wrapper = mount(DatametriaAlert, {
|
|
67
|
+
props: { variant: 'info' }
|
|
68
|
+
})
|
|
69
|
+
expect(wrapper.find('.datametria-alert--info').exists()).toBe(true)
|
|
70
|
+
expect(wrapper.text()).toContain('ℹ')
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
it('renders primary variant', () => {
|
|
74
|
+
const wrapper = mount(DatametriaAlert, {
|
|
75
|
+
props: { variant: 'primary' }
|
|
76
|
+
})
|
|
77
|
+
expect(wrapper.find('.datametria-alert--primary').exists()).toBe(true)
|
|
78
|
+
expect(wrapper.text()).toContain('ℹ')
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
// Closable tests
|
|
82
|
+
it('renders close button when closable', () => {
|
|
83
|
+
const wrapper = mount(DatametriaAlert, {
|
|
84
|
+
props: { closable: true }
|
|
85
|
+
})
|
|
86
|
+
expect(wrapper.find('.datametria-alert__close').exists()).toBe(true)
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
it('does not render close button when not closable', () => {
|
|
90
|
+
const wrapper = mount(DatametriaAlert, {
|
|
91
|
+
props: { closable: false }
|
|
92
|
+
})
|
|
93
|
+
expect(wrapper.find('.datametria-alert__close').exists()).toBe(false)
|
|
94
|
+
})
|
|
95
|
+
|
|
96
|
+
it('emits update:modelValue when close button clicked', async () => {
|
|
97
|
+
const wrapper = mount(DatametriaAlert, {
|
|
98
|
+
props: { closable: true }
|
|
99
|
+
})
|
|
100
|
+
await wrapper.find('.datametria-alert__close').trigger('click')
|
|
101
|
+
expect(wrapper.emitted('update:modelValue')).toBeTruthy()
|
|
102
|
+
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([false])
|
|
103
|
+
})
|
|
104
|
+
|
|
105
|
+
// v-model tests
|
|
106
|
+
it('shows alert when modelValue is true', () => {
|
|
107
|
+
const wrapper = mount(DatametriaAlert, {
|
|
108
|
+
props: { modelValue: true }
|
|
109
|
+
})
|
|
110
|
+
expect(wrapper.find('.datametria-alert').exists()).toBe(true)
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
it('hides alert when modelValue is false', () => {
|
|
114
|
+
const wrapper = mount(DatametriaAlert, {
|
|
115
|
+
props: { modelValue: false }
|
|
116
|
+
})
|
|
117
|
+
expect(wrapper.find('.datametria-alert').exists()).toBe(false)
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
// CSS Variables tests
|
|
121
|
+
it('uses CSS variables for success variant', () => {
|
|
122
|
+
const wrapper = mount(DatametriaAlert, {
|
|
123
|
+
props: { variant: 'success' }
|
|
124
|
+
})
|
|
125
|
+
const alert = wrapper.find('.datametria-alert--success')
|
|
126
|
+
const style = getComputedStyle(alert.element)
|
|
127
|
+
|
|
128
|
+
// Verifica que as CSS variables estão sendo usadas
|
|
129
|
+
expect(alert.element.className).toContain('datametria-alert--success')
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
it('uses CSS variables for error variant', () => {
|
|
133
|
+
const wrapper = mount(DatametriaAlert, {
|
|
134
|
+
props: { variant: 'error' }
|
|
135
|
+
})
|
|
136
|
+
const alert = wrapper.find('.datametria-alert--error')
|
|
137
|
+
expect(alert.element.className).toContain('datametria-alert--error')
|
|
138
|
+
})
|
|
139
|
+
|
|
140
|
+
it('uses CSS variables for warning variant', () => {
|
|
141
|
+
const wrapper = mount(DatametriaAlert, {
|
|
142
|
+
props: { variant: 'warning' }
|
|
143
|
+
})
|
|
144
|
+
const alert = wrapper.find('.datametria-alert--warning')
|
|
145
|
+
expect(alert.element.className).toContain('datametria-alert--warning')
|
|
146
|
+
})
|
|
147
|
+
|
|
148
|
+
it('uses CSS variables for spacing and typography', () => {
|
|
149
|
+
const wrapper = mount(DatametriaAlert, {
|
|
150
|
+
props: {
|
|
151
|
+
title: 'Title',
|
|
152
|
+
message: 'Message'
|
|
153
|
+
}
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
// Verifica estrutura
|
|
157
|
+
expect(wrapper.find('.datametria-alert__icon').exists()).toBe(true)
|
|
158
|
+
expect(wrapper.find('.datametria-alert__content').exists()).toBe(true)
|
|
159
|
+
expect(wrapper.find('.datametria-alert__title').exists()).toBe(true)
|
|
160
|
+
expect(wrapper.find('.datametria-alert__message').exists()).toBe(true)
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
// Backward compatibility tests
|
|
164
|
+
it('works without ThemeProvider (fallback values)', () => {
|
|
165
|
+
const wrapper = mount(DatametriaAlert, {
|
|
166
|
+
props: {
|
|
167
|
+
variant: 'success',
|
|
168
|
+
title: 'Success',
|
|
169
|
+
message: 'Operation completed'
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
expect(wrapper.find('.datametria-alert--success').exists()).toBe(true)
|
|
174
|
+
expect(wrapper.text()).toContain('Success')
|
|
175
|
+
expect(wrapper.text()).toContain('Operation completed')
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
it('maintains visual consistency across variants', () => {
|
|
179
|
+
const variants: Array<'success' | 'error' | 'warning' | 'info' | 'primary'> = [
|
|
180
|
+
'success', 'error', 'warning', 'info', 'primary'
|
|
181
|
+
]
|
|
182
|
+
|
|
183
|
+
variants.forEach(variant => {
|
|
184
|
+
const wrapper = mount(DatametriaAlert, {
|
|
185
|
+
props: { variant }
|
|
186
|
+
})
|
|
187
|
+
expect(wrapper.find(`.datametria-alert--${variant}`).exists()).toBe(true)
|
|
188
|
+
})
|
|
189
|
+
})
|
|
190
|
+
})
|