@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,111 @@
1
+ import { mount, shallowMount } from '@vue/test-utils';
2
+
3
+ import AbstractUserStatus from '../../../enums/AbstractUserStatus/AbstractUserStatus.enum.js';
4
+ import WtAvatar from '../wt-avatar.vue';
5
+
6
+ describe('WtAvatar', () => {
7
+ it('renders a component', () => {
8
+ const wrapper = shallowMount(WtAvatar);
9
+ expect(wrapper.isVisible()).toBe(true);
10
+ });
11
+
12
+ it('renders an image when src is provided', () => {
13
+ const wrapper = mount(WtAvatar, {
14
+ props: {
15
+ src: 'http://example.com/pic.png',
16
+ },
17
+ });
18
+ const img = wrapper.find('.wt-avatar__img');
19
+ expect(img.exists()).toBe(true);
20
+ expect(img.attributes('src')).toBe('http://example.com/pic.png');
21
+ });
22
+
23
+ it('renders "N/A" letters when no src or username is provided', () => {
24
+ const wrapper = mount(WtAvatar);
25
+ expect(wrapper.find('.wt-avatar__img').exists()).toBe(false);
26
+ expect(wrapper.find('.wt-avatar__letters-text').text()).toBe('N/A');
27
+ });
28
+
29
+ it('renders letters from username when src is not provided', () => {
30
+ const wrapper = mount(WtAvatar, {
31
+ props: {
32
+ username: 'John Doe',
33
+ },
34
+ });
35
+ expect(wrapper.find('.wt-avatar__img').exists()).toBe(false);
36
+ expect(wrapper.find('.wt-avatar__letters-text').text()).toBe('JD');
37
+ });
38
+
39
+ it('renders single letter for a single-word username', () => {
40
+ const wrapper = mount(WtAvatar, {
41
+ props: {
42
+ username: 'Cher',
43
+ },
44
+ });
45
+ expect(wrapper.find('.wt-avatar__letters-text').text()).toBe('C');
46
+ });
47
+
48
+ it('renders bot icon when bot prop is true, ignoring username/src', () => {
49
+ const wrapper = mount(WtAvatar, {
50
+ props: {
51
+ bot: true,
52
+ username: 'John Doe',
53
+ },
54
+ });
55
+ expect(wrapper.find('.wt-avatar__bot').exists()).toBe(true);
56
+ expect(wrapper.find('.wt-avatar__letters-text').exists()).toBe(false);
57
+ expect(wrapper.find('.wt-avatar__img').exists()).toBe(false);
58
+ });
59
+
60
+ it('does not render a badge by default', () => {
61
+ const wrapper = mount(WtAvatar, {
62
+ props: {
63
+ username: 'John Doe',
64
+ },
65
+ });
66
+ expect(
67
+ wrapper
68
+ .findComponent({
69
+ name: 'wt-badge',
70
+ })
71
+ .exists(),
72
+ ).toBe(false);
73
+ });
74
+
75
+ it('renders a badge for eligible statuses when badge is true', () => {
76
+ const wrapper = mount(WtAvatar, {
77
+ props: {
78
+ badge: true,
79
+ status: AbstractUserStatus.ONLINE,
80
+ },
81
+ });
82
+ const badge = wrapper.findComponent({
83
+ name: 'wt-badge',
84
+ });
85
+ expect(badge.exists()).toBe(true);
86
+ expect(badge.props('iconBadge')).toBe(AbstractUserStatus.ONLINE);
87
+ });
88
+
89
+ it('renders a badge without an icon for non-eligible statuses when badge is true', () => {
90
+ const wrapper = mount(WtAvatar, {
91
+ props: {
92
+ badge: true,
93
+ status: AbstractUserStatus.OFFLINE,
94
+ },
95
+ });
96
+ const badge = wrapper.findComponent({
97
+ name: 'wt-badge',
98
+ });
99
+ expect(badge.exists()).toBe(true);
100
+ expect(badge.props('iconBadge')).toBe(null);
101
+ });
102
+
103
+ it('applies the size class', () => {
104
+ const wrapper = shallowMount(WtAvatar, {
105
+ props: {
106
+ size: 'lg',
107
+ },
108
+ });
109
+ expect(wrapper.classes()).toContain('p-avatar-lg');
110
+ });
111
+ });
@@ -0,0 +1,80 @@
1
+ import { shallowMount } from '@vue/test-utils';
2
+
3
+ import AbstractUserStatus from '../../../enums/AbstractUserStatus/AbstractUserStatus.enum.js';
4
+ import WtBadge from '../wt-badge.vue';
5
+
6
+ describe('WtBadge', () => {
7
+ it('renders a component', () => {
8
+ const wrapper = shallowMount(WtBadge);
9
+ expect(wrapper.isVisible()).toBe(true);
10
+ });
11
+
12
+ it('applies compat-mode class when there is no default slot content', () => {
13
+ const wrapper = shallowMount(WtBadge);
14
+ expect(wrapper.classes()).toContain('wt-badge--compat-mode');
15
+ });
16
+
17
+ it('does not apply compat-mode class when default slot has content', () => {
18
+ const wrapper = shallowMount(WtBadge, {
19
+ slots: {
20
+ default: 'content',
21
+ },
22
+ });
23
+ expect(wrapper.classes()).not.toContain('wt-badge--compat-mode');
24
+ });
25
+
26
+ it('applies the outside class when outside prop is true', () => {
27
+ const wrapper = shallowMount(WtBadge, {
28
+ props: {
29
+ outside: true,
30
+ },
31
+ });
32
+ expect(wrapper.classes()).toContain('wt-badge--outside');
33
+ });
34
+
35
+ it('hides the indicator when hidden prop is true', () => {
36
+ const wrapper = shallowMount(WtBadge, {
37
+ props: {
38
+ hidden: true,
39
+ },
40
+ });
41
+ expect(wrapper.find('.wt-badge-indicator').attributes('style')).toContain(
42
+ 'display: none',
43
+ );
44
+ });
45
+
46
+ it('does not render an icon pic when iconBadge is not a known status', () => {
47
+ const wrapper = shallowMount(WtBadge, {
48
+ props: {
49
+ iconBadge: 'unknown',
50
+ },
51
+ });
52
+ expect(wrapper.find('.wt-badge-indicator__pic').exists()).toBe(false);
53
+ });
54
+
55
+ it.each([
56
+ AbstractUserStatus.DND,
57
+ AbstractUserStatus.ONLINE,
58
+ AbstractUserStatus.PAUSE,
59
+ ])('renders an icon pic for iconBadge=%s', (status) => {
60
+ const wrapper = shallowMount(WtBadge, {
61
+ props: {
62
+ iconBadge: status,
63
+ },
64
+ });
65
+ const pic = wrapper.find('.wt-badge-indicator__pic');
66
+ expect(pic.exists()).toBe(true);
67
+ expect(pic.attributes('alt')).toBe(status);
68
+ });
69
+
70
+ it('applies the colorVariable as background color', () => {
71
+ const wrapper = shallowMount(WtBadge, {
72
+ props: {
73
+ colorVariable: 'success-color',
74
+ },
75
+ });
76
+ expect(wrapper.find('.wt-badge-indicator').attributes('style')).toContain(
77
+ 'var(--success-color)',
78
+ );
79
+ });
80
+ });
@@ -0,0 +1,61 @@
1
+ import { mount } from '@vue/test-utils';
2
+
3
+ import { ComponentSize } from '../../../enums';
4
+ import WtBadge from '../wt-badge.vue';
5
+
6
+ describe('WtBadge (new)', () => {
7
+ it('renders a component', () => {
8
+ const wrapper = mount(WtBadge);
9
+ expect(wrapper.classes()).toContain('wt-badge');
10
+ });
11
+
12
+ it('renders the value prop', () => {
13
+ const wrapper = mount(WtBadge, {
14
+ props: {
15
+ value: '5',
16
+ },
17
+ });
18
+ expect(wrapper.text()).toContain('5');
19
+ });
20
+
21
+ it('renders slot content', () => {
22
+ const wrapper = mount(WtBadge, {
23
+ slots: {
24
+ default: 'slot content',
25
+ },
26
+ });
27
+ expect(wrapper.text()).toContain('slot content');
28
+ });
29
+
30
+ it('applies the default md size class', () => {
31
+ const wrapper = mount(WtBadge);
32
+ expect(wrapper.classes()).toContain(`p-badge--${ComponentSize.MD}`);
33
+ });
34
+
35
+ it('applies a custom size class', () => {
36
+ const wrapper = mount(WtBadge, {
37
+ props: {
38
+ size: ComponentSize.SM,
39
+ },
40
+ });
41
+ expect(wrapper.classes()).toContain(`p-badge--${ComponentSize.SM}`);
42
+ });
43
+
44
+ it('applies a severity class when provided', () => {
45
+ const wrapper = mount(WtBadge, {
46
+ props: {
47
+ severity: 'success',
48
+ },
49
+ });
50
+ expect(wrapper.classes()).toContain('p-badge--success');
51
+ });
52
+
53
+ it('does not apply a severity class when severity is null', () => {
54
+ const wrapper = mount(WtBadge);
55
+ expect(
56
+ wrapper
57
+ .classes()
58
+ .some((c) => c.startsWith('p-badge--') && c !== 'p-badge--md'),
59
+ ).toBe(false);
60
+ });
61
+ });
@@ -0,0 +1,117 @@
1
+ import { mount, shallowMount } from '@vue/test-utils';
2
+
3
+ import WtBreadcrumb from '../wt-breadcrumb.vue';
4
+
5
+ describe('WtBreadcrumb', () => {
6
+ it('renders a component', () => {
7
+ const wrapper = shallowMount(WtBreadcrumb, {
8
+ props: {
9
+ path: [],
10
+ },
11
+ });
12
+ expect(wrapper.isVisible()).toBe(true);
13
+ });
14
+
15
+ it('renders an item for each path entry', () => {
16
+ const path = [
17
+ {
18
+ name: 'directory',
19
+ },
20
+ {
21
+ name: 'users',
22
+ route: '/directory/users',
23
+ },
24
+ ];
25
+ const wrapper = mount(WtBreadcrumb, {
26
+ props: {
27
+ path,
28
+ },
29
+ global: {
30
+ stubs: {
31
+ RouterLink: {
32
+ template: '<a><slot /></a>',
33
+ },
34
+ },
35
+ },
36
+ });
37
+ const items = wrapper.findAll('.wt-breadcrumb__text');
38
+ expect(items.length).toBe(path.length);
39
+ expect(items[0].text()).toBe('directory');
40
+ expect(items[1].text()).toBe('users');
41
+ });
42
+
43
+ it('renders a router-link for items with a route', () => {
44
+ const path = [
45
+ {
46
+ name: 'directory',
47
+ },
48
+ {
49
+ name: 'users',
50
+ route: '/directory/users',
51
+ },
52
+ ];
53
+ const wrapper = mount(WtBreadcrumb, {
54
+ props: {
55
+ path,
56
+ },
57
+ global: {
58
+ stubs: {
59
+ RouterLink: {
60
+ template: '<a><slot /></a>',
61
+ },
62
+ },
63
+ },
64
+ });
65
+ const links = wrapper.findAll('a');
66
+ expect(links.length).toBe(1);
67
+ expect(links[0].text()).toBe('users');
68
+ });
69
+
70
+ it('renders a plain span for items without a route', () => {
71
+ const path = [
72
+ {
73
+ name: 'directory',
74
+ },
75
+ ];
76
+ const wrapper = mount(WtBreadcrumb, {
77
+ props: {
78
+ path,
79
+ },
80
+ global: {
81
+ stubs: {
82
+ RouterLink: {
83
+ template: '<a><slot /></a>',
84
+ },
85
+ },
86
+ },
87
+ });
88
+ expect(wrapper.find('span.wt-breadcrumb__text').exists()).toBe(true);
89
+ expect(wrapper.find('a').exists()).toBe(false);
90
+ });
91
+
92
+ it('marks the last item with the last modifier class', () => {
93
+ const path = [
94
+ {
95
+ name: 'directory',
96
+ },
97
+ {
98
+ name: 'users',
99
+ },
100
+ ];
101
+ const wrapper = mount(WtBreadcrumb, {
102
+ props: {
103
+ path,
104
+ },
105
+ global: {
106
+ stubs: {
107
+ RouterLink: {
108
+ template: '<a><slot /></a>',
109
+ },
110
+ },
111
+ },
112
+ });
113
+ const items = wrapper.findAll('.wt-breadcrumb__text');
114
+ expect(items.at(-1).classes()).toContain('wt-breadcrumb__text--last');
115
+ expect(items[0].classes()).not.toContain('wt-breadcrumb__text--last');
116
+ });
117
+ });
@@ -1,6 +1,6 @@
1
1
  import { mount, shallowMount } from '@vue/test-utils';
2
2
 
3
- import WtSelectButton from '../wt-button-select.vue';
3
+ import WtButtonSelect from '../wt-button-select.vue';
4
4
 
5
5
  // helps to mock @floating-ui/vue autoUpdate method
6
6
  global.ResizeObserver = vi.fn().mockImplementation(() => ({
@@ -9,9 +9,9 @@ global.ResizeObserver = vi.fn().mockImplementation(() => ({
9
9
  disconnect: vi.fn(),
10
10
  }));
11
11
 
12
- describe('WtSelectButton', () => {
12
+ describe('WtButtonSelect', () => {
13
13
  it('renders a component', () => {
14
- const wrapper = shallowMount(WtSelectButton, {
14
+ const wrapper = shallowMount(WtButtonSelect, {
15
15
  props: {
16
16
  options: [],
17
17
  },
@@ -21,7 +21,7 @@ describe('WtSelectButton', () => {
21
21
 
22
22
  it('renders a button content via default slot', () => {
23
23
  const content = 'button content';
24
- const wrapper = mount(WtSelectButton, {
24
+ const wrapper = mount(WtButtonSelect, {
25
25
  props: {
26
26
  options: [],
27
27
  },
@@ -33,7 +33,7 @@ describe('WtSelectButton', () => {
33
33
  });
34
34
 
35
35
  it('emits click from main action button', async () => {
36
- const wrapper = shallowMount(WtSelectButton, {
36
+ const wrapper = shallowMount(WtButtonSelect, {
37
37
  props: {
38
38
  options: [],
39
39
  },
@@ -42,4 +42,36 @@ describe('WtSelectButton', () => {
42
42
  await wrapper.find('.wt-button-select__button').trigger('click');
43
43
  expect(wrapper.emitted().click).toBeTruthy();
44
44
  });
45
+
46
+ it('passes disabled prop down to the main action button', () => {
47
+ const wrapper = shallowMount(WtButtonSelect, {
48
+ props: {
49
+ options: [],
50
+ disabled: true,
51
+ },
52
+ });
53
+ expect(
54
+ wrapper
55
+ .findComponent({
56
+ name: 'wt-button',
57
+ })
58
+ .props('disabled'),
59
+ ).toBe(true);
60
+ });
61
+
62
+ it('passes color prop down to the main action button', () => {
63
+ const wrapper = shallowMount(WtButtonSelect, {
64
+ props: {
65
+ options: [],
66
+ color: 'secondary',
67
+ },
68
+ });
69
+ expect(
70
+ wrapper
71
+ .findComponent({
72
+ name: 'wt-button',
73
+ })
74
+ .props('color'),
75
+ ).toBe('secondary');
76
+ });
45
77
  });
@@ -0,0 +1,84 @@
1
+ import { mount } from '@vue/test-utils';
2
+
3
+ import { ConnectionQualityLevels } from '../../../enums';
4
+ import WtCallMediaMetric from '../wt-call-media-metric.vue';
5
+
6
+ describe('WtCallMediaMetric', () => {
7
+ it('renders nothing when neither quality nor mosAvg is provided', () => {
8
+ const wrapper = mount(WtCallMediaMetric);
9
+ expect(
10
+ wrapper
11
+ .findComponent({
12
+ name: 'wt-icon',
13
+ })
14
+ .exists(),
15
+ ).toBe(false);
16
+ });
17
+
18
+ it('renders an icon matching the quality prop when provided directly', () => {
19
+ const wrapper = mount(WtCallMediaMetric, {
20
+ props: {
21
+ quality: ConnectionQualityLevels.High,
22
+ },
23
+ });
24
+ expect(
25
+ wrapper
26
+ .findComponent({
27
+ name: 'wt-icon',
28
+ })
29
+ .props('icon'),
30
+ ).toBe(`ws-signal-${ConnectionQualityLevels.High}`);
31
+ });
32
+
33
+ it('derives quality from mosAvg when quality is not provided', () => {
34
+ const wrapper = mount(WtCallMediaMetric, {
35
+ props: {
36
+ mosAvg: 4.5,
37
+ },
38
+ });
39
+ expect(
40
+ wrapper
41
+ .findComponent({
42
+ name: 'wt-icon',
43
+ })
44
+ .props('icon'),
45
+ ).toBe(`ws-signal-${ConnectionQualityLevels.High}`);
46
+ });
47
+
48
+ it('quality prop takes precedence over mosAvg', () => {
49
+ const wrapper = mount(WtCallMediaMetric, {
50
+ props: {
51
+ quality: ConnectionQualityLevels.Low,
52
+ mosAvg: 4.5,
53
+ },
54
+ });
55
+ expect(
56
+ wrapper
57
+ .findComponent({
58
+ name: 'wt-icon',
59
+ })
60
+ .props('icon'),
61
+ ).toBe(`ws-signal-${ConnectionQualityLevels.Low}`);
62
+ });
63
+
64
+ it('renders nothing when mosAvg does not resolve to a quality', () => {
65
+ const wrapper = mount(WtCallMediaMetric);
66
+ expect(wrapper.html()).toBe('<!--v-if-->');
67
+ });
68
+
69
+ it('passes size prop down to the icon', () => {
70
+ const wrapper = mount(WtCallMediaMetric, {
71
+ props: {
72
+ quality: ConnectionQualityLevels.Medium,
73
+ size: 'lg',
74
+ },
75
+ });
76
+ expect(
77
+ wrapper
78
+ .findComponent({
79
+ name: 'wt-icon',
80
+ })
81
+ .props('size'),
82
+ ).toBe('lg');
83
+ });
84
+ });
@@ -0,0 +1,20 @@
1
+ import { shallowMount } from '@vue/test-utils';
2
+
3
+ import WtCard from '../wt-card.vue';
4
+
5
+ describe('WtCard', () => {
6
+ it('renders a component', () => {
7
+ const wrapper = shallowMount(WtCard);
8
+ expect(wrapper.classes('wt-card')).toBe(true);
9
+ });
10
+
11
+ it('renders content via default slot', () => {
12
+ const content = 'card content';
13
+ const wrapper = shallowMount(WtCard, {
14
+ slots: {
15
+ default: content,
16
+ },
17
+ });
18
+ expect(wrapper.text()).toContain(content);
19
+ });
20
+ });
@@ -49,4 +49,67 @@ describe('WtCheckbox', () => {
49
49
  !selected,
50
50
  ]);
51
51
  });
52
+
53
+ it('treats array model value as multi-select and checks by value membership', () => {
54
+ const wrapper = mount(WtCheckbox, {
55
+ stubs: {
56
+ WtLabel,
57
+ WtIcon,
58
+ },
59
+ props: {
60
+ value: 'b',
61
+ selected: [
62
+ 'a',
63
+ 'b',
64
+ ],
65
+ },
66
+ });
67
+ expect(wrapper.find('input[type="checkbox"]').element.checked).toBe(true);
68
+ });
69
+
70
+ it('is not checked when value is not present in array model', () => {
71
+ const wrapper = mount(WtCheckbox, {
72
+ stubs: {
73
+ WtLabel,
74
+ WtIcon,
75
+ },
76
+ props: {
77
+ value: 'c',
78
+ selected: [
79
+ 'a',
80
+ 'b',
81
+ ],
82
+ },
83
+ });
84
+ expect(wrapper.find('input[type="checkbox"]').element.checked).toBe(false);
85
+ });
86
+
87
+ it('does not render a label when no label prop or slot is passed', () => {
88
+ const wrapper = mount(WtCheckbox, {
89
+ stubs: {
90
+ WtLabel,
91
+ WtIcon,
92
+ },
93
+ props: {
94
+ selected: false,
95
+ },
96
+ });
97
+ expect(wrapper.findComponent(WtLabel).exists()).toBe(false);
98
+ });
99
+
100
+ it('disables the underlying checkbox when disabled prop is true', () => {
101
+ const wrapper = mount(WtCheckbox, {
102
+ stubs: {
103
+ WtLabel,
104
+ WtIcon,
105
+ },
106
+ props: {
107
+ selected: false,
108
+ disabled: true,
109
+ },
110
+ });
111
+ expect(
112
+ wrapper.find('input[type="checkbox"]').attributes('disabled'),
113
+ ).toBeDefined();
114
+ });
52
115
  });
@@ -17,4 +17,36 @@ describe('WtChip', () => {
17
17
  });
18
18
  expect(wrapper.text()).toContain(content);
19
19
  });
20
+
21
+ it('applies the default main color class', () => {
22
+ const wrapper = shallowMount(WtChip);
23
+ expect(wrapper.classes()).toContain('p-chip-main');
24
+ });
25
+
26
+ it('applies a custom color class', () => {
27
+ const wrapper = shallowMount(WtChip, {
28
+ props: {
29
+ color: 'danger',
30
+ },
31
+ });
32
+ expect(wrapper.classes()).toContain('p-chip-danger');
33
+ });
34
+
35
+ it('does not render a remove button by default', () => {
36
+ const wrapper = mount(WtChip);
37
+ expect(wrapper.find('.wt-chip__close-icon').exists()).toBe(false);
38
+ });
39
+
40
+ it('renders a remove button and emits remove when removable', async () => {
41
+ const wrapper = mount(WtChip, {
42
+ props: {
43
+ removable: true,
44
+ },
45
+ });
46
+ const closeIcon = wrapper.find('.wt-chip__close-icon');
47
+ expect(closeIcon.exists()).toBe(true);
48
+
49
+ await closeIcon.trigger('click');
50
+ expect(wrapper.emitted().remove).toBeTruthy();
51
+ });
20
52
  });