@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,261 +1,261 @@
|
|
|
1
|
-
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { mount } from '@vue/test-utils'
|
|
3
|
-
import DatametriaSlider from '../DatametriaSlider.vue'
|
|
4
|
-
|
|
5
|
-
describe('DatametriaSlider', () => {
|
|
6
|
-
describe('Renderização', () => {
|
|
7
|
-
it('renderiza corretamente', () => {
|
|
8
|
-
const wrapper = mount(DatametriaSlider, {
|
|
9
|
-
props: { modelValue: 50 }
|
|
10
|
-
})
|
|
11
|
-
expect(wrapper.find('.dm-slider').exists()).toBe(true)
|
|
12
|
-
})
|
|
13
|
-
|
|
14
|
-
it('renderiza label', () => {
|
|
15
|
-
const wrapper = mount(DatametriaSlider, {
|
|
16
|
-
props: { modelValue: 50, label: 'Volume' }
|
|
17
|
-
})
|
|
18
|
-
expect(wrapper.text()).toContain('Volume')
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
it('renderiza valor quando showValue=true', () => {
|
|
22
|
-
const wrapper = mount(DatametriaSlider, {
|
|
23
|
-
props: { modelValue: 75, showValue: true }
|
|
24
|
-
})
|
|
25
|
-
expect(wrapper.find('.dm-slider__value').text()).toBe('75')
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
it('não renderiza valor quando showValue=false', () => {
|
|
29
|
-
const wrapper = mount(DatametriaSlider, {
|
|
30
|
-
props: { modelValue: 75, showValue: false }
|
|
31
|
-
})
|
|
32
|
-
expect(wrapper.find('.dm-slider__value').exists()).toBe(false)
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
it('renderiza min/max quando showMinMax=true', () => {
|
|
36
|
-
const wrapper = mount(DatametriaSlider, {
|
|
37
|
-
props: { modelValue: 50, min: 0, max: 100, showMinMax: true }
|
|
38
|
-
})
|
|
39
|
-
expect(wrapper.find('.dm-slider__min').text()).toBe('0')
|
|
40
|
-
expect(wrapper.find('.dm-slider__max').text()).toBe('100')
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('renderiza required indicator', () => {
|
|
44
|
-
const wrapper = mount(DatametriaSlider, {
|
|
45
|
-
props: { modelValue: 50, label: 'Volume', required: true }
|
|
46
|
-
})
|
|
47
|
-
expect(wrapper.find('.dm-slider__required').exists()).toBe(true)
|
|
48
|
-
})
|
|
49
|
-
})
|
|
50
|
-
|
|
51
|
-
describe('Props', () => {
|
|
52
|
-
it('aceita modelValue', () => {
|
|
53
|
-
const wrapper = mount(DatametriaSlider, {
|
|
54
|
-
props: { modelValue: 60 }
|
|
55
|
-
})
|
|
56
|
-
expect(wrapper.props('modelValue')).toBe(60)
|
|
57
|
-
})
|
|
58
|
-
|
|
59
|
-
it('aceita min e max', () => {
|
|
60
|
-
const wrapper = mount(DatametriaSlider, {
|
|
61
|
-
props: { modelValue: 50, min: 10, max: 90 }
|
|
62
|
-
})
|
|
63
|
-
const input = wrapper.find('input')
|
|
64
|
-
expect(input.attributes('min')).toBe('10')
|
|
65
|
-
expect(input.attributes('max')).toBe('90')
|
|
66
|
-
})
|
|
67
|
-
|
|
68
|
-
it('aceita step', () => {
|
|
69
|
-
const wrapper = mount(DatametriaSlider, {
|
|
70
|
-
props: { modelValue: 50, step: 5 }
|
|
71
|
-
})
|
|
72
|
-
expect(wrapper.find('input').attributes('step')).toBe('5')
|
|
73
|
-
})
|
|
74
|
-
|
|
75
|
-
it('aceita disabled', () => {
|
|
76
|
-
const wrapper = mount(DatametriaSlider, {
|
|
77
|
-
props: { modelValue: 50, disabled: true }
|
|
78
|
-
})
|
|
79
|
-
expect(wrapper.find('.dm-slider').classes()).toContain('dm-slider--disabled')
|
|
80
|
-
expect(wrapper.find('input').element.disabled).toBe(true)
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
it('aceita errorMessage', () => {
|
|
84
|
-
const wrapper = mount(DatametriaSlider, {
|
|
85
|
-
props: { modelValue: 50, errorMessage: 'Valor inválido' }
|
|
86
|
-
})
|
|
87
|
-
expect(wrapper.find('.dm-slider__error').text()).toBe('Valor inválido')
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
it('aceita helperText', () => {
|
|
91
|
-
const wrapper = mount(DatametriaSlider, {
|
|
92
|
-
props: { modelValue: 50, helperText: 'Ajuste o volume' }
|
|
93
|
-
})
|
|
94
|
-
expect(wrapper.find('.dm-slider__helper').text()).toBe('Ajuste o volume')
|
|
95
|
-
})
|
|
96
|
-
|
|
97
|
-
it('aceita formatter customizado', () => {
|
|
98
|
-
const wrapper = mount(DatametriaSlider, {
|
|
99
|
-
props: {
|
|
100
|
-
modelValue: 50,
|
|
101
|
-
showValue: true,
|
|
102
|
-
formatter: (v: number) => `${v}%`
|
|
103
|
-
}
|
|
104
|
-
})
|
|
105
|
-
expect(wrapper.find('.dm-slider__value').text()).toBe('50%')
|
|
106
|
-
})
|
|
107
|
-
})
|
|
108
|
-
|
|
109
|
-
describe('Interação', () => {
|
|
110
|
-
it('emite update:modelValue ao mudar input', async () => {
|
|
111
|
-
const wrapper = mount(DatametriaSlider, {
|
|
112
|
-
props: { modelValue: 50 }
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
const input = wrapper.find('input')
|
|
116
|
-
await input.setValue(75)
|
|
117
|
-
|
|
118
|
-
expect(wrapper.emitted('update:modelValue')).toBeTruthy()
|
|
119
|
-
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([75])
|
|
120
|
-
})
|
|
121
|
-
|
|
122
|
-
it('emite change ao mudar valor', async () => {
|
|
123
|
-
const wrapper = mount(DatametriaSlider, {
|
|
124
|
-
props: { modelValue: 50 }
|
|
125
|
-
})
|
|
126
|
-
|
|
127
|
-
const input = wrapper.find('input')
|
|
128
|
-
await input.trigger('change')
|
|
129
|
-
|
|
130
|
-
expect(wrapper.emitted('change')).toBeTruthy()
|
|
131
|
-
})
|
|
132
|
-
|
|
133
|
-
it('emite focus ao focar', async () => {
|
|
134
|
-
const wrapper = mount(DatametriaSlider, {
|
|
135
|
-
props: { modelValue: 50 }
|
|
136
|
-
})
|
|
137
|
-
|
|
138
|
-
await wrapper.find('input').trigger('focus')
|
|
139
|
-
expect(wrapper.emitted('focus')).toBeTruthy()
|
|
140
|
-
})
|
|
141
|
-
|
|
142
|
-
it('emite blur ao desfocar', async () => {
|
|
143
|
-
const wrapper = mount(DatametriaSlider, {
|
|
144
|
-
props: { modelValue: 50 }
|
|
145
|
-
})
|
|
146
|
-
|
|
147
|
-
await wrapper.find('input').trigger('blur')
|
|
148
|
-
expect(wrapper.emitted('blur')).toBeTruthy()
|
|
149
|
-
})
|
|
150
|
-
})
|
|
151
|
-
|
|
152
|
-
describe('Progress', () => {
|
|
153
|
-
it('calcula progressPercentage corretamente', () => {
|
|
154
|
-
const wrapper = mount(DatametriaSlider, {
|
|
155
|
-
props: { modelValue: 50, min: 0, max: 100 }
|
|
156
|
-
})
|
|
157
|
-
|
|
158
|
-
const progress = wrapper.find('.dm-slider__progress')
|
|
159
|
-
expect(progress.attributes('style')).toContain('width: 50%')
|
|
160
|
-
})
|
|
161
|
-
|
|
162
|
-
it('calcula progressPercentage com min diferente de 0', () => {
|
|
163
|
-
const wrapper = mount(DatametriaSlider, {
|
|
164
|
-
props: { modelValue: 50, min: 25, max: 75 }
|
|
165
|
-
})
|
|
166
|
-
|
|
167
|
-
const progress = wrapper.find('.dm-slider__progress')
|
|
168
|
-
expect(progress.attributes('style')).toContain('width: 50%')
|
|
169
|
-
})
|
|
170
|
-
})
|
|
171
|
-
|
|
172
|
-
describe('Acessibilidade', () => {
|
|
173
|
-
it('input tem type range', () => {
|
|
174
|
-
const wrapper = mount(DatametriaSlider, {
|
|
175
|
-
props: { modelValue: 50 }
|
|
176
|
-
})
|
|
177
|
-
expect(wrapper.find('input').attributes('type')).toBe('range')
|
|
178
|
-
})
|
|
179
|
-
|
|
180
|
-
it('input tem aria-valuemin', () => {
|
|
181
|
-
const wrapper = mount(DatametriaSlider, {
|
|
182
|
-
props: { modelValue: 50, min: 10 }
|
|
183
|
-
})
|
|
184
|
-
expect(wrapper.find('input').attributes('aria-valuemin')).toBe('10')
|
|
185
|
-
})
|
|
186
|
-
|
|
187
|
-
it('input tem aria-valuemax', () => {
|
|
188
|
-
const wrapper = mount(DatametriaSlider, {
|
|
189
|
-
props: { modelValue: 50, max: 90 }
|
|
190
|
-
})
|
|
191
|
-
expect(wrapper.find('input').attributes('aria-valuemax')).toBe('90')
|
|
192
|
-
})
|
|
193
|
-
|
|
194
|
-
it('input tem aria-valuenow', () => {
|
|
195
|
-
const wrapper = mount(DatametriaSlider, {
|
|
196
|
-
props: { modelValue: 60 }
|
|
197
|
-
})
|
|
198
|
-
expect(wrapper.find('input').attributes('aria-valuenow')).toBe('60')
|
|
199
|
-
})
|
|
200
|
-
|
|
201
|
-
it('input tem aria-valuetext com formatter', () => {
|
|
202
|
-
const wrapper = mount(DatametriaSlider, {
|
|
203
|
-
props: {
|
|
204
|
-
modelValue: 50,
|
|
205
|
-
formatter: (v: number) => `${v}%`
|
|
206
|
-
}
|
|
207
|
-
})
|
|
208
|
-
expect(wrapper.find('input').attributes('aria-valuetext')).toBe('50%')
|
|
209
|
-
})
|
|
210
|
-
|
|
211
|
-
it('error tem role alert', () => {
|
|
212
|
-
const wrapper = mount(DatametriaSlider, {
|
|
213
|
-
props: { modelValue: 50, errorMessage: 'Erro' }
|
|
214
|
-
})
|
|
215
|
-
expect(wrapper.find('.dm-slider__error').attributes('role')).toBe('alert')
|
|
216
|
-
})
|
|
217
|
-
|
|
218
|
-
it('input tem aria-describedby quando há error', () => {
|
|
219
|
-
const wrapper = mount(DatametriaSlider, {
|
|
220
|
-
props: { modelValue: 50, errorMessage: 'Erro' }
|
|
221
|
-
})
|
|
222
|
-
const input = wrapper.find('input')
|
|
223
|
-
expect(input.attributes('aria-describedby')).toBeDefined()
|
|
224
|
-
})
|
|
225
|
-
})
|
|
226
|
-
|
|
227
|
-
describe('Métodos Expostos', () => {
|
|
228
|
-
it('expõe método focus', () => {
|
|
229
|
-
const wrapper = mount(DatametriaSlider, {
|
|
230
|
-
props: { modelValue: 50 }
|
|
231
|
-
})
|
|
232
|
-
const exposed = wrapper.vm as any
|
|
233
|
-
expect(typeof exposed.focus).toBe('function')
|
|
234
|
-
})
|
|
235
|
-
|
|
236
|
-
it('expõe método blur', () => {
|
|
237
|
-
const wrapper = mount(DatametriaSlider, {
|
|
238
|
-
props: { modelValue: 50 }
|
|
239
|
-
})
|
|
240
|
-
const exposed = wrapper.vm as any
|
|
241
|
-
expect(typeof exposed.blur).toBe('function')
|
|
242
|
-
})
|
|
243
|
-
|
|
244
|
-
it('expõe inputRef', () => {
|
|
245
|
-
const wrapper = mount(DatametriaSlider, {
|
|
246
|
-
props: { modelValue: 50 }
|
|
247
|
-
})
|
|
248
|
-
const exposed = wrapper.vm as any
|
|
249
|
-
expect(exposed.inputRef).toBeDefined()
|
|
250
|
-
})
|
|
251
|
-
})
|
|
252
|
-
|
|
253
|
-
describe('CSS Variables', () => {
|
|
254
|
-
it('usa CSS Variables padronizadas', () => {
|
|
255
|
-
const wrapper = mount(DatametriaSlider, {
|
|
256
|
-
props: { modelValue: 50 }
|
|
257
|
-
})
|
|
258
|
-
expect(wrapper.find('.dm-slider').exists()).toBe(true)
|
|
259
|
-
})
|
|
260
|
-
})
|
|
261
|
-
})
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { mount } from '@vue/test-utils'
|
|
3
|
+
import DatametriaSlider from '../DatametriaSlider.vue'
|
|
4
|
+
|
|
5
|
+
describe('DatametriaSlider', () => {
|
|
6
|
+
describe('Renderização', () => {
|
|
7
|
+
it('renderiza corretamente', () => {
|
|
8
|
+
const wrapper = mount(DatametriaSlider, {
|
|
9
|
+
props: { modelValue: 50 }
|
|
10
|
+
})
|
|
11
|
+
expect(wrapper.find('.dm-slider').exists()).toBe(true)
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
it('renderiza label', () => {
|
|
15
|
+
const wrapper = mount(DatametriaSlider, {
|
|
16
|
+
props: { modelValue: 50, label: 'Volume' }
|
|
17
|
+
})
|
|
18
|
+
expect(wrapper.text()).toContain('Volume')
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
it('renderiza valor quando showValue=true', () => {
|
|
22
|
+
const wrapper = mount(DatametriaSlider, {
|
|
23
|
+
props: { modelValue: 75, showValue: true }
|
|
24
|
+
})
|
|
25
|
+
expect(wrapper.find('.dm-slider__value').text()).toBe('75')
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
it('não renderiza valor quando showValue=false', () => {
|
|
29
|
+
const wrapper = mount(DatametriaSlider, {
|
|
30
|
+
props: { modelValue: 75, showValue: false }
|
|
31
|
+
})
|
|
32
|
+
expect(wrapper.find('.dm-slider__value').exists()).toBe(false)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('renderiza min/max quando showMinMax=true', () => {
|
|
36
|
+
const wrapper = mount(DatametriaSlider, {
|
|
37
|
+
props: { modelValue: 50, min: 0, max: 100, showMinMax: true }
|
|
38
|
+
})
|
|
39
|
+
expect(wrapper.find('.dm-slider__min').text()).toBe('0')
|
|
40
|
+
expect(wrapper.find('.dm-slider__max').text()).toBe('100')
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
it('renderiza required indicator', () => {
|
|
44
|
+
const wrapper = mount(DatametriaSlider, {
|
|
45
|
+
props: { modelValue: 50, label: 'Volume', required: true }
|
|
46
|
+
})
|
|
47
|
+
expect(wrapper.find('.dm-slider__required').exists()).toBe(true)
|
|
48
|
+
})
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
describe('Props', () => {
|
|
52
|
+
it('aceita modelValue', () => {
|
|
53
|
+
const wrapper = mount(DatametriaSlider, {
|
|
54
|
+
props: { modelValue: 60 }
|
|
55
|
+
})
|
|
56
|
+
expect(wrapper.props('modelValue')).toBe(60)
|
|
57
|
+
})
|
|
58
|
+
|
|
59
|
+
it('aceita min e max', () => {
|
|
60
|
+
const wrapper = mount(DatametriaSlider, {
|
|
61
|
+
props: { modelValue: 50, min: 10, max: 90 }
|
|
62
|
+
})
|
|
63
|
+
const input = wrapper.find('input')
|
|
64
|
+
expect(input.attributes('min')).toBe('10')
|
|
65
|
+
expect(input.attributes('max')).toBe('90')
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
it('aceita step', () => {
|
|
69
|
+
const wrapper = mount(DatametriaSlider, {
|
|
70
|
+
props: { modelValue: 50, step: 5 }
|
|
71
|
+
})
|
|
72
|
+
expect(wrapper.find('input').attributes('step')).toBe('5')
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('aceita disabled', () => {
|
|
76
|
+
const wrapper = mount(DatametriaSlider, {
|
|
77
|
+
props: { modelValue: 50, disabled: true }
|
|
78
|
+
})
|
|
79
|
+
expect(wrapper.find('.dm-slider').classes()).toContain('dm-slider--disabled')
|
|
80
|
+
expect(wrapper.find('input').element.disabled).toBe(true)
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
it('aceita errorMessage', () => {
|
|
84
|
+
const wrapper = mount(DatametriaSlider, {
|
|
85
|
+
props: { modelValue: 50, errorMessage: 'Valor inválido' }
|
|
86
|
+
})
|
|
87
|
+
expect(wrapper.find('.dm-slider__error').text()).toBe('Valor inválido')
|
|
88
|
+
})
|
|
89
|
+
|
|
90
|
+
it('aceita helperText', () => {
|
|
91
|
+
const wrapper = mount(DatametriaSlider, {
|
|
92
|
+
props: { modelValue: 50, helperText: 'Ajuste o volume' }
|
|
93
|
+
})
|
|
94
|
+
expect(wrapper.find('.dm-slider__helper').text()).toBe('Ajuste o volume')
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('aceita formatter customizado', () => {
|
|
98
|
+
const wrapper = mount(DatametriaSlider, {
|
|
99
|
+
props: {
|
|
100
|
+
modelValue: 50,
|
|
101
|
+
showValue: true,
|
|
102
|
+
formatter: (v: number) => `${v}%`
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
expect(wrapper.find('.dm-slider__value').text()).toBe('50%')
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
describe('Interação', () => {
|
|
110
|
+
it('emite update:modelValue ao mudar input', async () => {
|
|
111
|
+
const wrapper = mount(DatametriaSlider, {
|
|
112
|
+
props: { modelValue: 50 }
|
|
113
|
+
})
|
|
114
|
+
|
|
115
|
+
const input = wrapper.find('input')
|
|
116
|
+
await input.setValue(75)
|
|
117
|
+
|
|
118
|
+
expect(wrapper.emitted('update:modelValue')).toBeTruthy()
|
|
119
|
+
expect(wrapper.emitted('update:modelValue')?.[0]).toEqual([75])
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('emite change ao mudar valor', async () => {
|
|
123
|
+
const wrapper = mount(DatametriaSlider, {
|
|
124
|
+
props: { modelValue: 50 }
|
|
125
|
+
})
|
|
126
|
+
|
|
127
|
+
const input = wrapper.find('input')
|
|
128
|
+
await input.trigger('change')
|
|
129
|
+
|
|
130
|
+
expect(wrapper.emitted('change')).toBeTruthy()
|
|
131
|
+
})
|
|
132
|
+
|
|
133
|
+
it('emite focus ao focar', async () => {
|
|
134
|
+
const wrapper = mount(DatametriaSlider, {
|
|
135
|
+
props: { modelValue: 50 }
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
await wrapper.find('input').trigger('focus')
|
|
139
|
+
expect(wrapper.emitted('focus')).toBeTruthy()
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
it('emite blur ao desfocar', async () => {
|
|
143
|
+
const wrapper = mount(DatametriaSlider, {
|
|
144
|
+
props: { modelValue: 50 }
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
await wrapper.find('input').trigger('blur')
|
|
148
|
+
expect(wrapper.emitted('blur')).toBeTruthy()
|
|
149
|
+
})
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
describe('Progress', () => {
|
|
153
|
+
it('calcula progressPercentage corretamente', () => {
|
|
154
|
+
const wrapper = mount(DatametriaSlider, {
|
|
155
|
+
props: { modelValue: 50, min: 0, max: 100 }
|
|
156
|
+
})
|
|
157
|
+
|
|
158
|
+
const progress = wrapper.find('.dm-slider__progress')
|
|
159
|
+
expect(progress.attributes('style')).toContain('width: 50%')
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
it('calcula progressPercentage com min diferente de 0', () => {
|
|
163
|
+
const wrapper = mount(DatametriaSlider, {
|
|
164
|
+
props: { modelValue: 50, min: 25, max: 75 }
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
const progress = wrapper.find('.dm-slider__progress')
|
|
168
|
+
expect(progress.attributes('style')).toContain('width: 50%')
|
|
169
|
+
})
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
describe('Acessibilidade', () => {
|
|
173
|
+
it('input tem type range', () => {
|
|
174
|
+
const wrapper = mount(DatametriaSlider, {
|
|
175
|
+
props: { modelValue: 50 }
|
|
176
|
+
})
|
|
177
|
+
expect(wrapper.find('input').attributes('type')).toBe('range')
|
|
178
|
+
})
|
|
179
|
+
|
|
180
|
+
it('input tem aria-valuemin', () => {
|
|
181
|
+
const wrapper = mount(DatametriaSlider, {
|
|
182
|
+
props: { modelValue: 50, min: 10 }
|
|
183
|
+
})
|
|
184
|
+
expect(wrapper.find('input').attributes('aria-valuemin')).toBe('10')
|
|
185
|
+
})
|
|
186
|
+
|
|
187
|
+
it('input tem aria-valuemax', () => {
|
|
188
|
+
const wrapper = mount(DatametriaSlider, {
|
|
189
|
+
props: { modelValue: 50, max: 90 }
|
|
190
|
+
})
|
|
191
|
+
expect(wrapper.find('input').attributes('aria-valuemax')).toBe('90')
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
it('input tem aria-valuenow', () => {
|
|
195
|
+
const wrapper = mount(DatametriaSlider, {
|
|
196
|
+
props: { modelValue: 60 }
|
|
197
|
+
})
|
|
198
|
+
expect(wrapper.find('input').attributes('aria-valuenow')).toBe('60')
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
it('input tem aria-valuetext com formatter', () => {
|
|
202
|
+
const wrapper = mount(DatametriaSlider, {
|
|
203
|
+
props: {
|
|
204
|
+
modelValue: 50,
|
|
205
|
+
formatter: (v: number) => `${v}%`
|
|
206
|
+
}
|
|
207
|
+
})
|
|
208
|
+
expect(wrapper.find('input').attributes('aria-valuetext')).toBe('50%')
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
it('error tem role alert', () => {
|
|
212
|
+
const wrapper = mount(DatametriaSlider, {
|
|
213
|
+
props: { modelValue: 50, errorMessage: 'Erro' }
|
|
214
|
+
})
|
|
215
|
+
expect(wrapper.find('.dm-slider__error').attributes('role')).toBe('alert')
|
|
216
|
+
})
|
|
217
|
+
|
|
218
|
+
it('input tem aria-describedby quando há error', () => {
|
|
219
|
+
const wrapper = mount(DatametriaSlider, {
|
|
220
|
+
props: { modelValue: 50, errorMessage: 'Erro' }
|
|
221
|
+
})
|
|
222
|
+
const input = wrapper.find('input')
|
|
223
|
+
expect(input.attributes('aria-describedby')).toBeDefined()
|
|
224
|
+
})
|
|
225
|
+
})
|
|
226
|
+
|
|
227
|
+
describe('Métodos Expostos', () => {
|
|
228
|
+
it('expõe método focus', () => {
|
|
229
|
+
const wrapper = mount(DatametriaSlider, {
|
|
230
|
+
props: { modelValue: 50 }
|
|
231
|
+
})
|
|
232
|
+
const exposed = wrapper.vm as any
|
|
233
|
+
expect(typeof exposed.focus).toBe('function')
|
|
234
|
+
})
|
|
235
|
+
|
|
236
|
+
it('expõe método blur', () => {
|
|
237
|
+
const wrapper = mount(DatametriaSlider, {
|
|
238
|
+
props: { modelValue: 50 }
|
|
239
|
+
})
|
|
240
|
+
const exposed = wrapper.vm as any
|
|
241
|
+
expect(typeof exposed.blur).toBe('function')
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
it('expõe inputRef', () => {
|
|
245
|
+
const wrapper = mount(DatametriaSlider, {
|
|
246
|
+
props: { modelValue: 50 }
|
|
247
|
+
})
|
|
248
|
+
const exposed = wrapper.vm as any
|
|
249
|
+
expect(exposed.inputRef).toBeDefined()
|
|
250
|
+
})
|
|
251
|
+
})
|
|
252
|
+
|
|
253
|
+
describe('CSS Variables', () => {
|
|
254
|
+
it('usa CSS Variables padronizadas', () => {
|
|
255
|
+
const wrapper = mount(DatametriaSlider, {
|
|
256
|
+
props: { modelValue: 50 }
|
|
257
|
+
})
|
|
258
|
+
expect(wrapper.find('.dm-slider').exists()).toBe(true)
|
|
259
|
+
})
|
|
260
|
+
})
|
|
261
|
+
})
|