@webitel/ui-sdk 26.8.75 → 26.8.77

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.
Files changed (174) hide show
  1. package/dist/{clients-BmeOR90W.js → clients-B8-WDK4d.js} +66 -79
  2. package/dist/{components-C-ri6OSQ.js → components-fKLMXHe_.js} +11 -11
  3. package/dist/{enums-BvonmHq2.js → enums-B_9ZBu01.js} +2 -2
  4. package/dist/ui-sdk.css +1 -1
  5. package/dist/ui-sdk.js +3 -3
  6. package/dist/ui-sdk.umd.cjs +610 -612
  7. package/dist/{useValidation-0JwQGpLM.js → useValidation-CEed9cxY.js} +1 -1
  8. package/dist/{utils-CzBdLnFt.js → utils-BZHq8qMH.js} +1 -1
  9. package/dist/wt-action-bar-D74sgDCk.js +94 -0
  10. package/dist/{wt-button-D-nFhi1f.js → wt-button-BwPz__rU.js} +2 -2
  11. package/dist/{wt-chat-emoji-CLhgb02d.js → wt-chat-emoji-DcVCe4jW.js} +4 -4
  12. package/dist/{wt-datepicker-DCa23hYx.js → wt-datepicker-BgjjbOMX.js} +2 -2
  13. package/dist/{wt-display-chip-items-B7QLz9QM.js → wt-display-chip-items-D-v25BUi.js} +2 -2
  14. package/dist/{wt-dual-panel-D-LChluY.js → wt-dual-panel-Cs_Yzfxt.js} +1 -1
  15. package/dist/{wt-expansion-card-CToBA1fy.js → wt-expansion-card-BT586Mul.js} +1 -1
  16. package/dist/{wt-expansion-panel-af2t3VrM.js → wt-expansion-panel-kZmHSvPU.js} +1 -1
  17. package/dist/{wt-icon-action-DYBTs3Mf.js → wt-icon-action-DJzm0kEk.js} +1 -1
  18. package/dist/{wt-icon-btn-BfhuUt8-.js → wt-icon-btn-BzraLc-w.js} +1 -1
  19. package/dist/{wt-icon-WyFAGc4t.js → wt-icon-iRDqWkjp.js} +19 -19
  20. package/dist/{wt-notifications-bar-CvKwuTEg.js → wt-notifications-bar-ZIMKBDqL.js} +2 -2
  21. package/dist/{wt-player-B2etfN5v.js → wt-player-CFrKSilF.js} +3 -3
  22. package/dist/{wt-screen-recordings-action-CepB2pqh.js → wt-screen-recordings-action-CVHZAWjl.js} +1 -1
  23. package/dist/{wt-search-bar-B4YkhgIB.js → wt-search-bar-DosqJLXT.js} +1 -1
  24. package/dist/{wt-send-message-popup-BhZ7K_Vs.js → wt-send-message-popup-BpgjqxvU.js} +2 -2
  25. package/dist/{wt-status-select-ELI7j73g.js → wt-status-select-Dnv9tj7o.js} +1 -1
  26. package/dist/{wt-timepicker-C3v9Cp2e.js → wt-timepicker-B4MOaSEZ.js} +2 -2
  27. package/dist/{wt-toast-DxQBRGm2.js → wt-toast-BcgNZFCD.js} +2 -2
  28. package/dist/{wt-tree-table-C5sxm-Eb.js → wt-tree-table-xXbBeLUc.js} +1 -1
  29. package/dist/{wt-type-extension-value-input-gQGgxMcJ.js → wt-type-extension-value-input-D86gV8RI.js} +3 -3
  30. package/dist/{wt-vidstack-player-B37Mdf0u.js → wt-vidstack-player-BzyyVEji.js} +4 -4
  31. package/package.json +1 -1
  32. package/src/assets/icons/sprite/call--filled.svg +1 -1
  33. package/src/assets/icons/sprite/call-add-to--filled.svg +2 -2
  34. package/src/assets/icons/sprite/call-add-to.svg +2 -3
  35. package/src/assets/icons/sprite/call-disconnect--filled.svg +2 -2
  36. package/src/assets/icons/sprite/call-disconnect.svg +2 -2
  37. package/src/assets/icons/sprite/call-end--filled.svg +2 -1
  38. package/src/assets/icons/sprite/call-end.svg +2 -2
  39. package/src/assets/icons/sprite/call-inbound--filled.svg +2 -3
  40. package/src/assets/icons/sprite/call-inbound.svg +2 -2
  41. package/src/assets/icons/sprite/call-missed--filled.svg +2 -2
  42. package/src/assets/icons/sprite/call-missed.svg +2 -2
  43. package/src/assets/icons/sprite/call-outbound--filled.svg +2 -2
  44. package/src/assets/icons/sprite/call-outbound.svg +2 -2
  45. package/src/assets/icons/sprite/call-ringing--filled.svg +3 -4
  46. package/src/assets/icons/sprite/call-ringing.svg +3 -2
  47. package/src/assets/icons/sprite/call-transfer--filled.svg +2 -2
  48. package/src/assets/icons/sprite/call-transfer.svg +2 -2
  49. package/src/assets/icons/sprite/call.svg +1 -2
  50. package/src/components/transitions/__tests__/ExpandTransition.spec.js +15 -0
  51. package/src/components/transitions/__tests__/WtReplaceTransition.spec.js +66 -0
  52. package/src/components/transitions/__tests__/WtTransition.spec.js +35 -0
  53. package/src/components/wt-action-bar/WtActionBarActionsOrder.js +1 -1
  54. package/src/components/wt-action-bar/__tests__/WtActionBar.spec.js +121 -0
  55. package/src/components/wt-action-bar/wt-action-bar.vue +57 -33
  56. package/src/components/wt-app-header/__tests__/WtAppNavigator.spec.js +65 -4
  57. package/src/components/wt-app-header/__tests__/WtHeaderActions.spec.js +81 -2
  58. package/src/components/wt-avatar/__tests__/WtAvatar.spec.js +111 -0
  59. package/src/components/wt-badge/__tests__/WtBadge.spec.js +80 -0
  60. package/src/components/wt-badge-new/__tests__/WtBadge.spec.js +61 -0
  61. package/src/components/wt-breadcrumb/__tests__/WtBreadcrumb.spec.js +117 -0
  62. package/src/components/wt-button-select/__tests__/WtButtonSelect.spec.js +37 -5
  63. package/src/components/wt-call-media-metric/__tests__/WtCallMediaMetric.spec.js +84 -0
  64. package/src/components/wt-card/__tests__/WtCard.spec.js +20 -0
  65. package/src/components/wt-checkbox/__tests__/WtCheckbox.spec.js +63 -0
  66. package/src/components/wt-chip/__tests__/WtChip.spec.js +32 -0
  67. package/src/components/wt-confirm-dialog/__tests__/WtConfirmDialog.spec.js +92 -0
  68. package/src/components/wt-context-menu/__tests__/WtContextMenu.spec.js +146 -1
  69. package/src/components/wt-copy-action/__tests__/WtCopyAction.spec.js +57 -0
  70. package/src/components/wt-datepicker/__tests__/WtDatepicker.spec.js +53 -0
  71. package/src/components/wt-datetime-text/__tests__/WtDatetimeText.spec.js +49 -0
  72. package/src/components/wt-divider/__tests__/WtDivider.spec.js +30 -0
  73. package/src/components/wt-dual-panel/__tests__/WtDualPanel.spec.js +120 -0
  74. package/src/components/wt-dummy/__tests__/WtDummy.spec.js +63 -1
  75. package/src/components/wt-empty/__tests__/WtEmpty.spec.js +84 -0
  76. package/src/components/wt-error-page/__tests__/WtErrorPage.spec.js +60 -0
  77. package/src/components/wt-expansion-card/__tests__/WtExpansionCard.spec.js +63 -0
  78. package/src/components/wt-expansion-panel/__tests__/WtExpansionPanel.spec.js +48 -9
  79. package/src/components/wt-filters-panel-wrapper/__tests__/WtFiltersPanelWrapper.spec.js +81 -10
  80. package/src/components/wt-hint/__tests__/WtHint.spec.js +44 -1
  81. package/src/components/wt-icon/__tests__/WtIcon.spec.js +29 -0
  82. package/src/components/wt-icon-action/__tests__/WtIconAction.spec.js +79 -0
  83. package/src/components/wt-icon-action/wt-icon-action.vue +1 -1
  84. package/src/components/wt-icon-btn/__tests__/WtIconBtn.spec.js +46 -0
  85. package/src/components/wt-image/__tests__/WtImage.spec.js +83 -0
  86. package/src/components/wt-indicator/__tests__/WtIndicator.spec.js +23 -0
  87. package/src/components/wt-input-number/__tests__/WtInputNumber.spec.js +77 -0
  88. package/src/components/wt-input-text/__tests__/WtInputText.spec.js +85 -0
  89. package/src/components/wt-intersection-observer/__tests__/WtIntersectionObserver.spec.js +24 -3
  90. package/src/components/wt-item-link/__tests__/WtItemLink.spec.js +93 -1
  91. package/src/components/wt-label/__tests__/WtLabel.spec.js +49 -1
  92. package/src/components/wt-load-bar/__tests__/WtLoadBar.spec.js +49 -0
  93. package/src/components/wt-loader/__tests__/WtLoader.spec.js +26 -1
  94. package/src/components/wt-logo/__tests__/WtLogo.spec.js +55 -0
  95. package/src/components/wt-menubar/__tests__/WtMenubar.spec.js +30 -0
  96. package/src/components/wt-message/__tests__/WtMessage.spec.js +46 -0
  97. package/src/components/wt-multi-select/__tests__/WtMultiSelect.spec.js +106 -0
  98. package/src/components/wt-page-header/__tests__/WtPageHeader.spec.js +111 -0
  99. package/src/components/wt-password/__tests__/WtPassword.spec.js +107 -0
  100. package/src/components/wt-popover/__tests__/WtPopover.spec.js +73 -0
  101. package/src/components/wt-progress-bar/__tests__/WtProgressBar.spec.js +34 -0
  102. package/src/components/wt-radio/__tests__/WtRadio.spec.js +45 -0
  103. package/src/components/wt-rounded-action/__tests__/WtRoundedAction.spec.js +48 -0
  104. package/src/components/wt-search-bar/__tests__/WtSearchBar.spec.js +74 -13
  105. package/src/components/wt-single-select/__tests__/WtSingleSelect.spec.js +117 -0
  106. package/src/components/wt-slider/__tests__/WtSlider.spec.js +100 -0
  107. package/src/components/wt-stepper/__tests__/WtStepper.spec.js +105 -0
  108. package/src/components/wt-switcher/__tests__/WtSwitcher.spec.js +47 -0
  109. package/src/components/wt-table/__tests__/WtTable.spec.js +237 -0
  110. package/src/components/wt-table-actions/__tests__/WtTableActions.spec.js +153 -1
  111. package/src/components/wt-table-column-select/__tests__/WtTableColumnSelect.spec.js +147 -0
  112. package/src/components/wt-tabs/__tests__/WtTabs.spec.js +55 -0
  113. package/src/components/wt-textarea/__tests__/WtTextarea.spec.js +49 -0
  114. package/src/components/wt-time-input/__tests__/WtTimeInput.spec.js +29 -0
  115. package/src/components/wt-tree/__tests__/WtTree.spec.js +126 -2
  116. package/src/components/wt-tree-line/__tests__/WtTreeLine.spec.js +205 -0
  117. package/src/components/wt-tree-table/__tests__/WtTreeTable.spec.js +155 -0
  118. package/src/components/wt-tree-table-row/__tests__/WtTreeTableRow.spec.js +176 -0
  119. package/src/components/wt-vidstack-player/__tests__/WtVidstackPlayer.spec.js +82 -0
  120. package/src/enums/IconAction/{IconAction.enum.js → IconAction.ts} +4 -2
  121. package/src/enums/index.ts +1 -1
  122. package/src/modules/ObjectPermissions/components/_internal/permissions-tab-content.vue +1 -1
  123. package/types/.tsbuildinfo +1 -1
  124. package/types/components/wt-action-bar/wt-action-bar.vue.d.ts +349 -105
  125. package/types/components/wt-datetime-text/__tests__/WtDatetimeText.spec.d.ts +1 -0
  126. package/types/components/wt-divider/__tests__/WtDivider.spec.d.ts +1 -0
  127. package/types/components/wt-dual-panel/__tests__/WtDualPanel.spec.d.ts +1 -0
  128. package/types/components/wt-empty/__tests__/WtEmpty.spec.d.ts +1 -0
  129. package/types/components/wt-error-page/__tests__/WtErrorPage.spec.d.ts +1 -0
  130. package/types/components/wt-expansion-card/__tests__/WtExpansionCard.spec.d.ts +1 -0
  131. package/types/components/wt-image/__tests__/WtImage.spec.d.ts +1 -0
  132. package/types/components/wt-input-number/__tests__/WtInputNumber.spec.d.ts +1 -0
  133. package/types/components/wt-input-text/__tests__/WtInputText.spec.d.ts +1 -0
  134. package/types/components/wt-logo/__tests__/WtLogo.spec.d.ts +1 -0
  135. package/types/components/wt-menubar/__tests__/WtMenubar.spec.d.ts +1 -0
  136. package/types/components/wt-message/__tests__/WtMessage.spec.d.ts +1 -0
  137. package/types/components/wt-multi-select/__tests__/WtMultiSelect.spec.d.ts +1 -0
  138. package/types/components/wt-page-header/__tests__/WtPageHeader.spec.d.ts +1 -0
  139. package/types/components/wt-password/__tests__/WtPassword.spec.d.ts +1 -0
  140. package/types/components/wt-popover/__tests__/WtPopover.spec.d.ts +1 -0
  141. package/types/components/wt-single-select/__tests__/WtSingleSelect.spec.d.ts +1 -0
  142. package/types/components/wt-slider/__tests__/WtSlider.spec.d.ts +1 -0
  143. package/types/components/wt-stepper/__tests__/WtStepper.spec.d.ts +1 -0
  144. package/types/components/wt-table/__tests__/WtTable.spec.d.ts +1 -0
  145. package/types/components/wt-tree-line/__tests__/WtTreeLine.spec.d.ts +1 -0
  146. package/types/components/wt-tree-table/__tests__/WtTreeTable.spec.d.ts +1 -0
  147. package/types/components/wt-tree-table-row/__tests__/WtTreeTableRow.spec.d.ts +1 -0
  148. package/types/components/wt-vidstack-player/__tests__/WtVidstackPlayer.spec.d.ts +1 -0
  149. package/types/enums/IconAction/IconAction.d.ts +31 -0
  150. package/types/enums/index.d.ts +1 -1
  151. package/dist/wt-action-bar-D4wDtBqb.js +0 -87
  152. package/src/components/wt-action-bar/__tests__/wt-action-bar.spec.js +0 -10
  153. package/src/components/wt-avatar/__tests__/wt-avatar.spec.js +0 -10
  154. package/src/components/wt-badge/__tests__/wt-badge.spec.js +0 -10
  155. package/src/components/wt-breadcrumb/__tests__/wt-breadcrumb.spec.js +0 -14
  156. package/src/components/wt-dual-panel/__tests__/WtDualPanel.js +0 -62
  157. package/src/components/wt-empty/__tests__/wt-empty.spec.js +0 -10
  158. package/src/components/wt-error-page/__tests__/wt-error-page.spec.js +0 -30
  159. package/src/components/wt-image/__tests__/wt-image.spec.js +0 -10
  160. package/src/components/wt-logo/__tests__/wt-logo.spec.js +0 -10
  161. package/src/components/wt-page-header/__tests__/wt-page-header.spec.js +0 -10
  162. package/src/components/wt-stepper/__tests__/WtStepper.spec.vue.js +0 -19
  163. package/types/enums/IconAction/IconAction.enum.d.ts +0 -30
  164. /package/types/components/{wt-action-bar/__tests__/wt-action-bar.spec.d.ts → transitions/__tests__/WtReplaceTransition.spec.d.ts} +0 -0
  165. /package/types/components/{wt-avatar/__tests__/wt-avatar.spec.d.ts → transitions/__tests__/WtTransition.spec.d.ts} +0 -0
  166. /package/types/components/{wt-badge/__tests__/wt-badge.spec.d.ts → wt-action-bar/__tests__/WtActionBar.spec.d.ts} +0 -0
  167. /package/types/components/{wt-breadcrumb/__tests__/wt-breadcrumb.spec.d.ts → wt-avatar/__tests__/WtAvatar.spec.d.ts} +0 -0
  168. /package/types/components/{wt-empty/__tests__/wt-empty.spec.d.ts → wt-badge/__tests__/WtBadge.spec.d.ts} +0 -0
  169. /package/types/components/{wt-dual-panel/__tests__/WtDualPanel.d.ts → wt-badge-new/__tests__/WtBadge.spec.d.ts} +0 -0
  170. /package/types/components/{wt-error-page/__tests__/wt-error-page.spec.d.ts → wt-breadcrumb/__tests__/WtBreadcrumb.spec.d.ts} +0 -0
  171. /package/types/components/{wt-image/__tests__/wt-image.spec.d.ts → wt-call-media-metric/__tests__/WtCallMediaMetric.spec.d.ts} +0 -0
  172. /package/types/components/{wt-logo/__tests__/wt-logo.spec.d.ts → wt-card/__tests__/WtCard.spec.d.ts} +0 -0
  173. /package/types/components/{wt-page-header/__tests__/wt-page-header.spec.d.ts → wt-confirm-dialog/__tests__/WtConfirmDialog.spec.d.ts} +0 -0
  174. /package/types/components/{wt-stepper/__tests__/WtStepper.spec.vue.d.ts → wt-copy-action/__tests__/WtCopyAction.spec.d.ts} +0 -0
@@ -0,0 +1,117 @@
1
+ import { mount, shallowMount } from '@vue/test-utils';
2
+
3
+ import WtSingleSelect from '../wt-single-select.vue';
4
+
5
+ global.ResizeObserver = vi.fn().mockImplementation(() => ({
6
+ observe: vi.fn(),
7
+ unobserve: vi.fn(),
8
+ disconnect: vi.fn(),
9
+ }));
10
+
11
+ describe('WtSingleSelect', () => {
12
+ it('renders a component', () => {
13
+ const wrapper = shallowMount(WtSingleSelect);
14
+ expect(wrapper.classes()).toContain('wt-single-select');
15
+ });
16
+
17
+ it('does not render a label when no label prop or slot is passed', () => {
18
+ const wrapper = shallowMount(WtSingleSelect);
19
+ expect(
20
+ wrapper
21
+ .findComponent({
22
+ name: 'wt-label',
23
+ })
24
+ .exists(),
25
+ ).toBe(false);
26
+ });
27
+
28
+ it('renders the label text when passed', () => {
29
+ const wrapper = mount(WtSingleSelect, {
30
+ props: {
31
+ label: 'Choose one',
32
+ },
33
+ });
34
+ expect(wrapper.find('.wt-select__label').text()).toBe('Choose one');
35
+ });
36
+
37
+ it('appends an asterisk to the label when required', () => {
38
+ const wrapper = mount(WtSingleSelect, {
39
+ props: {
40
+ label: 'Choose one',
41
+ required: true,
42
+ },
43
+ });
44
+ expect(wrapper.find('.wt-select__label').text()).toBe('Choose one*');
45
+ });
46
+
47
+ it('applies the has-value modifier class once a value is selected', () => {
48
+ const wrapper = shallowMount(WtSingleSelect, {
49
+ props: {
50
+ modelValue: 'a',
51
+ },
52
+ });
53
+ expect(wrapper.classes()).toContain('wt-single-select--has-value');
54
+ });
55
+
56
+ it('does not apply the has-value modifier class without a value', () => {
57
+ const wrapper = shallowMount(WtSingleSelect);
58
+ expect(wrapper.classes()).not.toContain('wt-single-select--has-value');
59
+ });
60
+
61
+ it('normalizes an empty object model to an empty string', () => {
62
+ const wrapper = mount(WtSingleSelect, {
63
+ props: {
64
+ modelValue: {},
65
+ },
66
+ });
67
+ expect(wrapper.classes()).not.toContain('wt-single-select--has-value');
68
+ });
69
+
70
+ it('passes disabled and options down to the underlying select', () => {
71
+ const options = [
72
+ {
73
+ label: 'One',
74
+ value: 1,
75
+ },
76
+ {
77
+ label: 'Two',
78
+ value: 2,
79
+ },
80
+ ];
81
+ const wrapper = shallowMount(WtSingleSelect, {
82
+ props: {
83
+ disabled: true,
84
+ options,
85
+ },
86
+ });
87
+ const select = wrapper.findComponent({
88
+ name: 'Select',
89
+ });
90
+ expect(select.attributes('disabled')).toBe('true');
91
+ });
92
+
93
+ it('maps size prop to the PrimeVue size scale', () => {
94
+ const wrapper = shallowMount(WtSingleSelect, {
95
+ props: {
96
+ size: 'sm',
97
+ },
98
+ });
99
+ expect(
100
+ wrapper
101
+ .findComponent({
102
+ name: 'Select',
103
+ })
104
+ .attributes('size'),
105
+ ).toBe('small');
106
+ });
107
+
108
+ it('emits hide when the dropdown hides', async () => {
109
+ const wrapper = shallowMount(WtSingleSelect);
110
+ await wrapper
111
+ .findComponent({
112
+ name: 'Select',
113
+ })
114
+ .vm.$emit('hide');
115
+ expect(wrapper.emitted().hide).toBeTruthy();
116
+ });
117
+ });
@@ -0,0 +1,100 @@
1
+ import { shallowMount } from '@vue/test-utils';
2
+
3
+ import WtSlider from '../wt-slider.vue';
4
+
5
+ describe('WtSlider', () => {
6
+ it('renders a component', () => {
7
+ const wrapper = shallowMount(WtSlider);
8
+ expect(
9
+ wrapper
10
+ .findComponent({
11
+ name: 'Slider',
12
+ })
13
+ .exists(),
14
+ ).toBe(true);
15
+ });
16
+
17
+ it('applies default min/max/step to the underlying slider', () => {
18
+ const wrapper = shallowMount(WtSlider);
19
+ const slider = wrapper.findComponent({
20
+ name: 'Slider',
21
+ });
22
+ expect(slider.attributes('min')).toBe('0');
23
+ expect(slider.attributes('max')).toBe('100');
24
+ expect(slider.attributes('step')).toBe('1');
25
+ });
26
+
27
+ it('passes custom min/max/step/disabled down', () => {
28
+ const wrapper = shallowMount(WtSlider, {
29
+ props: {
30
+ min: 10,
31
+ max: 20,
32
+ step: 5,
33
+ disabled: true,
34
+ },
35
+ });
36
+ const slider = wrapper.findComponent({
37
+ name: 'Slider',
38
+ });
39
+ expect(slider.attributes('min')).toBe('10');
40
+ expect(slider.attributes('max')).toBe('20');
41
+ expect(slider.attributes('step')).toBe('5');
42
+ expect(slider.attributes('disabled')).toBe('true');
43
+ });
44
+
45
+ it('defaults to horizontal orientation', () => {
46
+ const wrapper = shallowMount(WtSlider);
47
+ expect(
48
+ wrapper
49
+ .findComponent({
50
+ name: 'Slider',
51
+ })
52
+ .attributes('orientation'),
53
+ ).toBe('horizontal');
54
+ });
55
+
56
+ it('uses vertical orientation and applies height style when vertical is true', () => {
57
+ const wrapper = shallowMount(WtSlider, {
58
+ props: {
59
+ vertical: true,
60
+ height: 200,
61
+ },
62
+ });
63
+ const slider = wrapper.findComponent({
64
+ name: 'Slider',
65
+ });
66
+ expect(slider.attributes('orientation')).toBe('vertical');
67
+ expect(slider.attributes('style')).toContain('height: 200px');
68
+ });
69
+
70
+ it('applies width style when horizontal and width is provided', () => {
71
+ const wrapper = shallowMount(WtSlider, {
72
+ props: {
73
+ width: 300,
74
+ },
75
+ });
76
+ expect(
77
+ wrapper
78
+ .findComponent({
79
+ name: 'Slider',
80
+ })
81
+ .attributes('style'),
82
+ ).toContain('width: 300px');
83
+ });
84
+
85
+ it('emits update:modelValue when the slider value changes', async () => {
86
+ const wrapper = shallowMount(WtSlider, {
87
+ props: {
88
+ modelValue: 5,
89
+ },
90
+ });
91
+ await wrapper
92
+ .findComponent({
93
+ name: 'Slider',
94
+ })
95
+ .vm.$emit('update:modelValue', 42);
96
+ expect(wrapper.emitted()['update:modelValue'][0]).toEqual([
97
+ 42,
98
+ ]);
99
+ });
100
+ });
@@ -0,0 +1,105 @@
1
+ import { mount, shallowMount } from '@vue/test-utils';
2
+
3
+ import WtStepper from '../wt-stepper.vue';
4
+
5
+ const steps = [
6
+ {
7
+ name: 'step 1',
8
+ description: 'description 1',
9
+ },
10
+ {
11
+ name: 'step 2',
12
+ description: 'description 2',
13
+ },
14
+ {
15
+ name: 'step 3',
16
+ description: 'description 3',
17
+ },
18
+ ];
19
+
20
+ describe('WtStepper', () => {
21
+ it('renders a component', () => {
22
+ const wrapper = shallowMount(WtStepper, {
23
+ props: {
24
+ steps,
25
+ },
26
+ });
27
+ expect(wrapper.isVisible()).toBe(true);
28
+ });
29
+
30
+ it('renders a chip for each step', () => {
31
+ const wrapper = mount(WtStepper, {
32
+ props: {
33
+ steps,
34
+ },
35
+ });
36
+ const chips = wrapper.findAllComponents({
37
+ name: 'wt-chip',
38
+ });
39
+ expect(chips.length).toBe(steps.length);
40
+ expect(chips[0].text()).toBe('step 1');
41
+ });
42
+
43
+ it('marks steps before the active step as completed', () => {
44
+ const wrapper = shallowMount(WtStepper, {
45
+ props: {
46
+ steps,
47
+ activeStep: 2,
48
+ },
49
+ });
50
+ const chips = wrapper.findAllComponents({
51
+ name: 'wt-chip',
52
+ });
53
+ expect(chips[0].attributes('color')).toBe('primary');
54
+ expect(chips[1].attributes('color')).toBe('primary');
55
+ expect(chips[2].attributes('color')).toBe('secondary');
56
+ });
57
+
58
+ it('renders a divider between steps but not before the first one', () => {
59
+ const wrapper = shallowMount(WtStepper, {
60
+ props: {
61
+ steps,
62
+ },
63
+ });
64
+ expect(wrapper.findAll('.wt-stepper-steps__divider').length).toBe(
65
+ steps.length - 1,
66
+ );
67
+ });
68
+
69
+ it('renders the description of the active step by default', () => {
70
+ const wrapper = mount(WtStepper, {
71
+ props: {
72
+ steps,
73
+ activeStep: 2,
74
+ },
75
+ });
76
+ expect(wrapper.find('.wt-stepper-description').text()).toBe(
77
+ 'description 2',
78
+ );
79
+ });
80
+
81
+ it('renders custom content via the description slot', () => {
82
+ const wrapper = shallowMount(WtStepper, {
83
+ props: {
84
+ steps,
85
+ },
86
+ slots: {
87
+ description: 'Custom description',
88
+ },
89
+ });
90
+ expect(wrapper.text()).toContain('Custom description');
91
+ expect(wrapper.find('.wt-stepper-description').exists()).toBe(false);
92
+ });
93
+
94
+ it('renders content via the main slot', () => {
95
+ const wrapper = shallowMount(WtStepper, {
96
+ props: {
97
+ steps,
98
+ },
99
+ slots: {
100
+ main: 'Main content',
101
+ },
102
+ });
103
+ expect(wrapper.text()).toContain('Main content');
104
+ });
105
+ });
@@ -39,4 +39,51 @@ describe('WtSwitcher', () => {
39
39
  });
40
40
  expect(wrapper.classes('wt-switcher--label-left')).toBe(true);
41
41
  });
42
+
43
+ it('does not render a label when no label prop or slot is passed', () => {
44
+ const wrapper = shallowMount(WtSwitcher, {
45
+ props: {
46
+ modelValue: false,
47
+ },
48
+ });
49
+ expect(
50
+ wrapper
51
+ .findComponent({
52
+ name: 'wt-label',
53
+ })
54
+ .exists(),
55
+ ).toBe(false);
56
+ });
57
+
58
+ it('emits update:modelValue with the inverted value when toggled', async () => {
59
+ const wrapper = shallowMount(WtSwitcher, {
60
+ props: {
61
+ modelValue: false,
62
+ },
63
+ });
64
+ await wrapper
65
+ .findComponent({
66
+ name: 'ToggleSwitch',
67
+ })
68
+ .vm.$emit('update:modelValue', true);
69
+ expect(wrapper.emitted()['update:modelValue'][0]).toEqual([
70
+ true,
71
+ ]);
72
+ });
73
+
74
+ it('passes disabled down to the underlying switch', () => {
75
+ const wrapper = shallowMount(WtSwitcher, {
76
+ props: {
77
+ modelValue: false,
78
+ disabled: true,
79
+ },
80
+ });
81
+ expect(
82
+ wrapper
83
+ .findComponent({
84
+ name: 'ToggleSwitch',
85
+ })
86
+ .attributes('disabled'),
87
+ ).toBe('true');
88
+ });
42
89
  });
@@ -0,0 +1,237 @@
1
+ import { mount } from '@vue/test-utils';
2
+
3
+ import WtTable from '../wt-table.vue';
4
+
5
+ global.ResizeObserver = vi.fn().mockImplementation(() => ({
6
+ observe: vi.fn(),
7
+ unobserve: vi.fn(),
8
+ disconnect: vi.fn(),
9
+ }));
10
+
11
+ const headers = [
12
+ {
13
+ value: 'name',
14
+ text: 'Name',
15
+ },
16
+ {
17
+ value: 'age',
18
+ text: 'Age',
19
+ },
20
+ ];
21
+
22
+ const data = [
23
+ {
24
+ id: 1,
25
+ name: 'Alice',
26
+ age: 30,
27
+ },
28
+ {
29
+ id: 2,
30
+ name: 'Bob',
31
+ age: 25,
32
+ },
33
+ ];
34
+
35
+ describe('WtTable', () => {
36
+ it('renders a component', () => {
37
+ const wrapper = mount(WtTable);
38
+ expect(
39
+ wrapper
40
+ .findComponent({
41
+ name: 'DataTable',
42
+ })
43
+ .exists(),
44
+ ).toBe(true);
45
+ });
46
+
47
+ it('passes data and column headers down to the underlying table', () => {
48
+ const wrapper = mount(WtTable, {
49
+ props: {
50
+ headers,
51
+ data,
52
+ },
53
+ });
54
+ const table = wrapper.findComponent({
55
+ name: 'DataTable',
56
+ });
57
+ expect(table.props('value')).toEqual(data);
58
+
59
+ const columns = wrapper.findAllComponents({
60
+ name: 'Column',
61
+ });
62
+ const dataColumns = columns.filter((c) =>
63
+ headers.some((h) => h.value === c.props('columnKey')),
64
+ );
65
+ expect(dataColumns.length).toBe(headers.length);
66
+ });
67
+
68
+ it('renders row-select column by default and can be disabled', () => {
69
+ const withSelect = mount(WtTable, {
70
+ props: {
71
+ headers,
72
+ data,
73
+ },
74
+ });
75
+ expect(
76
+ withSelect
77
+ .findAllComponents({
78
+ name: 'Column',
79
+ })
80
+ .some((c) => c.props('columnKey') === 'row-select'),
81
+ ).toBe(true);
82
+
83
+ const withoutSelect = mount(WtTable, {
84
+ props: {
85
+ headers,
86
+ data,
87
+ selectable: false,
88
+ },
89
+ });
90
+ expect(
91
+ withoutSelect
92
+ .findAllComponents({
93
+ name: 'Column',
94
+ })
95
+ .some((c) => c.props('columnKey') === 'row-select'),
96
+ ).toBe(false);
97
+ });
98
+
99
+ it('renders the row-actions column when gridActions is true (default)', () => {
100
+ const wrapper = mount(WtTable, {
101
+ props: {
102
+ headers,
103
+ data,
104
+ },
105
+ });
106
+ expect(
107
+ wrapper
108
+ .findAllComponents({
109
+ name: 'Column',
110
+ })
111
+ .some((c) => c.props('columnKey') === 'row-actions'),
112
+ ).toBe(true);
113
+ });
114
+
115
+ it('does not render the row-actions column when gridActions is false', () => {
116
+ const wrapper = mount(WtTable, {
117
+ props: {
118
+ headers,
119
+ data,
120
+ gridActions: false,
121
+ },
122
+ });
123
+ expect(
124
+ wrapper
125
+ .findAllComponents({
126
+ name: 'Column',
127
+ })
128
+ .some((c) => c.props('columnKey') === 'row-actions'),
129
+ ).toBe(false);
130
+ });
131
+
132
+ it('emits sort with the next sort order for a sortable column', async () => {
133
+ const sortableHeaders = [
134
+ {
135
+ value: 'name',
136
+ text: 'Name',
137
+ field: 'name',
138
+ sort: null,
139
+ },
140
+ ];
141
+ const wrapper = mount(WtTable, {
142
+ props: {
143
+ headers: sortableHeaders,
144
+ data,
145
+ sortable: true,
146
+ },
147
+ });
148
+ const table = wrapper.findComponent({
149
+ name: 'DataTable',
150
+ });
151
+ await table.vm.$emit('sort', {
152
+ sortField: 'name',
153
+ });
154
+
155
+ expect(wrapper.emitted().sort).toBeTruthy();
156
+ expect(wrapper.emitted().sort[0][0]).toEqual(sortableHeaders[0]);
157
+ });
158
+
159
+ it('does not emit sort for a non-sortable table', async () => {
160
+ const wrapper = mount(WtTable, {
161
+ props: {
162
+ headers,
163
+ data,
164
+ sortable: false,
165
+ },
166
+ });
167
+ const table = wrapper.findComponent({
168
+ name: 'DataTable',
169
+ });
170
+ await table.vm.$emit('sort', {
171
+ sortField: 'name',
172
+ });
173
+
174
+ expect(wrapper.emitted().sort).toBeFalsy();
175
+ });
176
+
177
+ it('resolves locale-based header text', () => {
178
+ const wrapper = mount(WtTable, {
179
+ props: {
180
+ headers: [
181
+ {
182
+ value: 'name',
183
+ locale: 'reusable.add',
184
+ },
185
+ ],
186
+ data,
187
+ },
188
+ });
189
+ expect(wrapper.text()).toContain('Add');
190
+ });
191
+
192
+ it('hides columns with show: false', () => {
193
+ const wrapper = mount(WtTable, {
194
+ props: {
195
+ headers: [
196
+ {
197
+ value: 'name',
198
+ text: 'Name',
199
+ show: false,
200
+ },
201
+ ],
202
+ data,
203
+ },
204
+ });
205
+ const col = wrapper
206
+ .findAllComponents({
207
+ name: 'Column',
208
+ })
209
+ .find((c) => c.props('columnKey') === 'name');
210
+ expect(col.props('hidden')).toBe(true);
211
+ });
212
+
213
+ it('toggles all row selections via the header checkbox when no selected prop is given', async () => {
214
+ const rows = [
215
+ {
216
+ id: 1,
217
+ name: 'Alice',
218
+ },
219
+ {
220
+ id: 2,
221
+ name: 'Bob',
222
+ },
223
+ ];
224
+ const wrapper = mount(WtTable, {
225
+ props: {
226
+ headers,
227
+ data: rows,
228
+ },
229
+ });
230
+ const headerCheckbox = wrapper.findComponent({
231
+ name: 'wt-checkbox',
232
+ });
233
+ await headerCheckbox.vm.$emit('update:selected', true);
234
+
235
+ expect(rows.every((r) => r._isSelected)).toBe(true);
236
+ });
237
+ });