@dxc-technology/halstack-react 0.0.0-e792e0c → 0.0.0-e832ef8

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 (170) hide show
  1. package/babel.config.js +6 -2
  2. package/dist/BackgroundColorContext.js +46 -0
  3. package/dist/ThemeContext.js +235 -2
  4. package/dist/V3Textarea/V3Textarea.js +264 -0
  5. package/dist/accordion/Accordion.js +170 -81
  6. package/dist/accordion-group/AccordionGroup.js +186 -0
  7. package/dist/alert/Alert.js +184 -83
  8. package/dist/alert/index.d.ts +51 -0
  9. package/dist/badge/Badge.js +63 -0
  10. package/dist/box/Box.js +31 -23
  11. package/dist/button/Button.js +82 -27
  12. package/dist/card/Card.js +72 -35
  13. package/dist/checkbox/Checkbox.js +108 -32
  14. package/dist/chip/Chip.js +129 -35
  15. package/dist/common/RequiredComponent.js +2 -8
  16. package/dist/common/utils.js +2 -22
  17. package/dist/common/variables.js +1459 -197
  18. package/dist/date/Date.js +86 -64
  19. package/dist/date-input/DateInput.js +400 -0
  20. package/dist/date-input/index.d.ts +95 -0
  21. package/dist/dialog/Dialog.js +58 -37
  22. package/dist/dropdown/Dropdown.js +226 -94
  23. package/dist/file-input/FileInput.js +644 -0
  24. package/dist/file-input/FileItem.js +280 -0
  25. package/dist/file-input/index.d.ts +81 -0
  26. package/dist/footer/Footer.js +122 -47
  27. package/dist/footer/Icons.js +77 -0
  28. package/dist/header/Header.js +171 -91
  29. package/dist/header/Icons.js +59 -0
  30. package/dist/heading/Heading.js +81 -22
  31. package/dist/input-text/Icons.js +22 -0
  32. package/dist/input-text/InputText.js +293 -107
  33. package/dist/layout/ApplicationLayout.js +327 -0
  34. package/dist/layout/Icons.js +55 -0
  35. package/dist/link/Link.js +136 -35
  36. package/dist/main.d.ts +8 -0
  37. package/dist/main.js +111 -7
  38. package/dist/new-select/NewSelect.js +836 -0
  39. package/dist/new-select/index.d.ts +53 -0
  40. package/dist/number-input/NumberInput.js +136 -0
  41. package/dist/number-input/NumberInputContext.js +16 -0
  42. package/dist/number-input/index.d.ts +113 -0
  43. package/dist/paginator/Icons.js +66 -0
  44. package/dist/paginator/Paginator.js +162 -57
  45. package/dist/password-input/PasswordInput.js +198 -0
  46. package/dist/password-input/index.d.ts +94 -0
  47. package/dist/progress-bar/ProgressBar.js +97 -44
  48. package/dist/radio/Radio.js +39 -21
  49. package/dist/resultsetTable/ResultsetTable.js +93 -69
  50. package/dist/select/Select.js +250 -143
  51. package/dist/sidenav/Sidenav.js +85 -143
  52. package/dist/slider/Slider.js +219 -73
  53. package/dist/spinner/Spinner.js +249 -64
  54. package/dist/switch/Switch.js +51 -26
  55. package/dist/table/Table.js +63 -15
  56. package/dist/tabs/Tabs.js +208 -35
  57. package/dist/tabs-for-sections/TabsForSections.js +1 -16
  58. package/dist/tag/Tag.js +100 -35
  59. package/dist/text-input/TextInput.js +971 -0
  60. package/dist/text-input/index.d.ts +135 -0
  61. package/dist/textarea/Textarea.js +250 -107
  62. package/dist/textarea/index.d.ts +117 -0
  63. package/dist/toggle/Toggle.js +16 -19
  64. package/dist/toggle-group/ToggleGroup.js +327 -0
  65. package/dist/upload/Upload.js +16 -11
  66. package/dist/upload/buttons-upload/ButtonsUpload.js +35 -25
  67. package/dist/upload/buttons-upload/Icons.js +40 -0
  68. package/dist/upload/dragAndDropArea/DragAndDropArea.js +78 -31
  69. package/dist/upload/file-upload/FileToUpload.js +64 -33
  70. package/dist/upload/file-upload/Icons.js +66 -0
  71. package/dist/upload/files-upload/FilesToUpload.js +16 -16
  72. package/dist/upload/readme.md +2 -2
  73. package/dist/upload/transaction/Icons.js +160 -0
  74. package/dist/upload/transaction/Transaction.js +42 -49
  75. package/dist/upload/transactions/Transactions.js +38 -20
  76. package/dist/useTheme.js +22 -0
  77. package/dist/wizard/Icons.js +65 -0
  78. package/dist/wizard/Wizard.js +141 -56
  79. package/package.json +14 -6
  80. package/test/AccordionGroup.test.js +125 -0
  81. package/test/Date.test.js +49 -45
  82. package/test/DateInput.test.js +242 -0
  83. package/test/Dropdown.test.js +19 -4
  84. package/test/FileInput.test.js +201 -0
  85. package/test/Footer.test.js +2 -7
  86. package/test/Header.test.js +5 -10
  87. package/test/InputText.test.js +53 -41
  88. package/test/Link.test.js +25 -7
  89. package/test/NumberInput.test.js +259 -0
  90. package/test/Paginator.test.js +72 -60
  91. package/test/PasswordInput.test.js +83 -0
  92. package/test/ResultsetTable.test.js +66 -19
  93. package/test/Select.test.js +55 -34
  94. package/test/Sidenav.test.js +22 -64
  95. package/test/Slider.test.js +24 -15
  96. package/test/Spinner.test.js +5 -0
  97. package/test/Tabs.test.js +21 -0
  98. package/test/TextInput.test.js +732 -0
  99. package/test/Textarea.test.js +193 -0
  100. package/test/ToggleGroup.test.js +85 -0
  101. package/test/Upload.test.js +5 -5
  102. package/test/{TextArea.test.js → V3TextArea.test.js} +6 -7
  103. package/dist/accordion/Accordion.stories.js +0 -207
  104. package/dist/accordion/readme.md +0 -96
  105. package/dist/alert/Alert.stories.js +0 -158
  106. package/dist/alert/close.svg +0 -4
  107. package/dist/alert/error.svg +0 -4
  108. package/dist/alert/info.svg +0 -4
  109. package/dist/alert/readme.md +0 -43
  110. package/dist/alert/success.svg +0 -4
  111. package/dist/alert/warning.svg +0 -4
  112. package/dist/button/Button.stories.js +0 -224
  113. package/dist/button/readme.md +0 -93
  114. package/dist/common/services/example-service.js +0 -10
  115. package/dist/common/services/example-service.test.js +0 -12
  116. package/dist/date/calendar.svg +0 -1
  117. package/dist/date/calendar_dark.svg +0 -1
  118. package/dist/dialog/Dialog.stories.js +0 -217
  119. package/dist/dialog/readme.md +0 -32
  120. package/dist/dropdown/Dropdown.stories.js +0 -249
  121. package/dist/dropdown/baseline-arrow_drop_down.svg +0 -1
  122. package/dist/dropdown/baseline-arrow_drop_down_wh.svg +0 -4
  123. package/dist/dropdown/baseline-arrow_drop_up.svg +0 -1
  124. package/dist/dropdown/baseline-arrow_drop_up_wh.svg +0 -4
  125. package/dist/dropdown/readme.md +0 -69
  126. package/dist/footer/Footer.stories.js +0 -94
  127. package/dist/footer/dxc_logo_wht.png +0 -0
  128. package/dist/footer/readme.md +0 -41
  129. package/dist/header/Header.stories.js +0 -176
  130. package/dist/header/close_icon.svg +0 -1
  131. package/dist/header/dxc_logo_black.png +0 -0
  132. package/dist/header/dxc_logo_white.png +0 -0
  133. package/dist/header/hamb_menu_black.svg +0 -1
  134. package/dist/header/hamb_menu_white.svg +0 -1
  135. package/dist/header/readme.md +0 -33
  136. package/dist/input-text/InputText.stories.js +0 -209
  137. package/dist/input-text/error.svg +0 -1
  138. package/dist/input-text/readme.md +0 -91
  139. package/dist/paginator/images/next.svg +0 -3
  140. package/dist/paginator/images/nextPage.svg +0 -3
  141. package/dist/paginator/images/previous.svg +0 -3
  142. package/dist/paginator/images/previousPage.svg +0 -3
  143. package/dist/paginator/readme.md +0 -50
  144. package/dist/resultsetTable/arrow_downward-24px_wht.svg +0 -1
  145. package/dist/resultsetTable/arrow_upward-24px_wht.svg +0 -1
  146. package/dist/resultsetTable/unfold_more-24px_wht.svg +0 -1
  147. package/dist/select/Select.stories.js +0 -235
  148. package/dist/select/readme.md +0 -72
  149. package/dist/sidenav/arrow_icon.svg +0 -3
  150. package/dist/slider/Slider.stories.js +0 -241
  151. package/dist/upload/buttons-upload/drag-drop-icon.svg +0 -4
  152. package/dist/upload/buttons-upload/upload-button.svg +0 -1
  153. package/dist/upload/file-upload/audio-icon.svg +0 -4
  154. package/dist/upload/file-upload/close.svg +0 -4
  155. package/dist/upload/file-upload/file-icon.svg +0 -4
  156. package/dist/upload/file-upload/video-icon.svg +0 -4
  157. package/dist/upload/transaction/audio-icon-err.svg +0 -4
  158. package/dist/upload/transaction/audio-icon.svg +0 -4
  159. package/dist/upload/transaction/error-icon.svg +0 -4
  160. package/dist/upload/transaction/file-icon-err.svg +0 -4
  161. package/dist/upload/transaction/file-icon.svg +0 -4
  162. package/dist/upload/transaction/image-icon-err.svg +0 -4
  163. package/dist/upload/transaction/image-icon.svg +0 -4
  164. package/dist/upload/transaction/success-icon.svg +0 -4
  165. package/dist/upload/transaction/video-icon-err.svg +0 -4
  166. package/dist/upload/transaction/video-icon.svg +0 -4
  167. package/dist/wizard/invalid_icon.svg +0 -6
  168. package/dist/wizard/valid_icon.svg +0 -6
  169. package/dist/wizard/validation-wrong.svg +0 -6
  170. package/test/Toggle.test.js +0 -43
@@ -1,5 +1,7 @@
1
1
  import React from "react";
2
- import { render, fireEvent } from "@testing-library/react";
2
+ import { render, fireEvent, act } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
4
+
3
5
  import DxcResultsetTable from "../src/resultsetTable/ResultsetTable";
4
6
 
5
7
  const columns = [
@@ -14,7 +16,7 @@ const columns = [
14
16
  {
15
17
  displayValue: "City",
16
18
  isSortable: false,
17
- }
19
+ },
18
20
  ];
19
21
 
20
22
  const rows = [
@@ -30,7 +32,7 @@ const rows = [
30
32
  {
31
33
  displayValue: "Oviedo",
32
34
  sortValue: "Oviedo",
33
- }
35
+ },
34
36
  ],
35
37
  [
36
38
  {
@@ -61,7 +63,7 @@ const rows = [
61
63
  {
62
64
  displayValue: "Albacete",
63
65
  sortValue: "Albacete",
64
- }
66
+ },
65
67
  ],
66
68
  [
67
69
  {
@@ -75,7 +77,7 @@ const rows = [
75
77
  {
76
78
  displayValue: "Albacete",
77
79
  sortValue: "Albacete",
78
- }
80
+ },
79
81
  ],
80
82
  [
81
83
  {
@@ -89,7 +91,7 @@ const rows = [
89
91
  {
90
92
  displayValue: "Madrid",
91
93
  sortValue: "Madrid",
92
- }
94
+ },
93
95
  ],
94
96
  [
95
97
  {
@@ -120,7 +122,7 @@ const rows = [
120
122
  {
121
123
  displayValue: "Madrid",
122
124
  sortValue: "Madrid",
123
- }
125
+ },
124
126
  ],
125
127
  [
126
128
  {
@@ -134,7 +136,7 @@ const rows = [
134
136
  {
135
137
  displayValue: "Barcelona",
136
138
  sortValue: "Barcelona",
137
- }
139
+ },
138
140
  ],
139
141
  [
140
142
  {
@@ -185,7 +187,7 @@ const rows2 = [
185
187
  {
186
188
  displayValue: "OtherValue",
187
189
  sortValue: "OtherValue",
188
- }
190
+ },
189
191
  ],
190
192
  [
191
193
  {
@@ -216,21 +218,22 @@ const rows2 = [
216
218
  {
217
219
  displayValue: "OtherValue",
218
220
  sortValue: "OtherValue",
219
- }
221
+ },
220
222
  ],
221
223
  ];
222
224
 
223
225
  describe("ResultsetTable component tests", () => {
224
226
  test("ResultsetTable rendered correctly", () => {
225
- const { getByText } = render(<DxcResultsetTable columns={columns} rows={rows} itemsPerPage={3}></DxcResultsetTable>);
227
+ const { getByText } = render(
228
+ <DxcResultsetTable columns={columns} rows={rows} itemsPerPage={3}></DxcResultsetTable>
229
+ );
226
230
  expect(getByText("Peter")).toBeTruthy();
227
231
  });
228
232
  test("Resultsettable shows as many rows as itemsPerPage", () => {
229
- const { getByText, queryByText } = render(
233
+ const { getAllByRole } = render(
230
234
  <DxcResultsetTable columns={columns} rows={rows} itemsPerPage={3}></DxcResultsetTable>
231
235
  );
232
- expect(getByText("Peter")).toBeTruthy();
233
- expect(queryByText("Rick")).toBeFalsy();
236
+ expect(getAllByRole("row").length - 1).toEqual(3);
234
237
  });
235
238
 
236
239
  test("Resultsettable shows rows on second page", () => {
@@ -240,23 +243,49 @@ describe("ResultsetTable component tests", () => {
240
243
  expect(getByText("Peter")).toBeTruthy();
241
244
  expect(getByText("Louis")).toBeTruthy();
242
245
  expect(getByText("Lana")).toBeTruthy();
243
- const nextButton = getAllByRole("button")[2];
246
+ expect(getAllByRole("row").length - 1).toEqual(3);
247
+ const nextButton = getAllByRole("button")[3];
244
248
  fireEvent.click(nextButton);
245
249
  expect(getByText("4 to 6 of 10")).toBeTruthy();
246
- expect(getByText("Page: 2 of 4")).toBeTruthy();
250
+ // expect(getByText("Page: 2 of 4")).toBeTruthy();
251
+ expect(getByText("Rick")).toBeTruthy();
252
+ expect(getByText("Mark")).toBeTruthy();
253
+ expect(getByText("Cris")).toBeTruthy();
254
+ expect(getAllByRole("row").length - 1).toEqual(3);
255
+ });
256
+
257
+ test("Resultsettable goToPage works as expected", () => {
258
+ const { getByText, getAllByRole, getByRole } = render(
259
+ <DxcResultsetTable columns={columns} showGoToPage={true} rows={rows} itemsPerPage={3}></DxcResultsetTable>
260
+ );
261
+ expect(getByText("Peter")).toBeTruthy();
262
+ expect(getByText("Louis")).toBeTruthy();
263
+ expect(getByText("Lana")).toBeTruthy();
264
+ expect(getAllByRole("row").length - 1).toEqual(3);
265
+ const goToPageSelect = getAllByRole("button")[2];
266
+ act(() => {
267
+ userEvent.click(goToPageSelect);
268
+ });
269
+ const goToPageOption = getByText("2");
270
+ act(() => {
271
+ userEvent.click(goToPageOption);
272
+ });
273
+
274
+ expect(getByText("4 to 6 of 10")).toBeTruthy();
247
275
  expect(getByText("Rick")).toBeTruthy();
248
276
  expect(getByText("Mark")).toBeTruthy();
249
277
  expect(getByText("Cris")).toBeTruthy();
278
+ expect(getAllByRole("row").length - 1).toEqual(3);
250
279
  });
251
280
 
252
281
  test("Resultsettable going to the last page shows only one row", () => {
253
282
  const { getByText, getAllByRole } = render(
254
283
  <DxcResultsetTable columns={columns} rows={rows} itemsPerPage={3}></DxcResultsetTable>
255
284
  );
256
- const lastButton = getAllByRole("button")[3];
285
+ debugger;
286
+ const lastButton = getAllByRole("button")[4];
257
287
  fireEvent.click(lastButton);
258
288
  expect(getByText("10 to 10 of 10")).toBeTruthy();
259
- expect(getByText("Page: 4 of 4")).toBeTruthy();
260
289
  expect(getAllByRole("row")).toHaveLength(2);
261
290
  expect(getByText("Cosmin")).toBeTruthy();
262
291
  });
@@ -273,10 +302,28 @@ describe("ResultsetTable component tests", () => {
273
302
  expect(component.queryByText("Cosmin")).not.toBeTruthy();
274
303
  });
275
304
  test("Resultsettable change rows should go to first page", () => {
276
- const {queryByText, rerender} = render(<DxcResultsetTable columns={columns} rows={rows} itemsPerPage={3}></DxcResultsetTable>);
305
+ const { queryByText, rerender } = render(
306
+ <DxcResultsetTable columns={columns} rows={rows} itemsPerPage={3}></DxcResultsetTable>
307
+ );
277
308
  expect(queryByText("Peter")).toBeTruthy();
278
309
  rerender(<DxcResultsetTable columns={columns} rows={rows2} itemsPerPage={3}></DxcResultsetTable>);
279
310
  expect(queryByText("1 to 3 of 3")).toBeTruthy();
280
311
  });
281
312
 
313
+ test("Resultsettable change itemsPerPage should go to first page", () => {
314
+ const { getAllByRole, queryByText, rerender } = render(
315
+ <DxcResultsetTable
316
+ columns={columns}
317
+ rows={rows}
318
+ itemsPerPage={3}
319
+ itemsPerPageOptions={[2, 3]}
320
+ ></DxcResultsetTable>
321
+ );
322
+ const lastButton = getAllByRole("button")[5];
323
+ fireEvent.click(lastButton);
324
+ expect(getAllByRole("row").length - 1).toEqual(1);
325
+ rerender(<DxcResultsetTable columns={columns} rows={rows} itemsPerPage={6}></DxcResultsetTable>);
326
+ expect(getAllByRole("row").length - 1).toEqual(6);
327
+ expect(queryByText("Peter")).toBeTruthy();
328
+ });
282
329
  });
@@ -1,5 +1,6 @@
1
1
  import React from "react";
2
- import { render, fireEvent, act } from "@testing-library/react";
2
+ import { render, act } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
3
4
  import DxcSelect from "../src/select/Select";
4
5
 
5
6
  const optionsWithoutIcon = [
@@ -20,18 +21,43 @@ const optionsWithoutIcon = [
20
21
  const optionsWithIcons = [
21
22
  {
22
23
  value: 1,
23
- label: "Facebook",
24
- iconSrc: "/testIconFacebook",
24
+ label: "Image 1",
25
+ icon: (
26
+ <svg
27
+ data-testid="image-1"
28
+ xmlns="http://www.w3.org/2000/svg"
29
+ height="24px"
30
+ viewBox="0 0 24 24"
31
+ width="24px"
32
+ fill="currentColor"
33
+ >
34
+ <path d="M0 0h24v24H0V0z" fill="none" />
35
+ <path d="M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm3 4H8c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h11c1.1 0 2-.9 2-2V7c0-1.1-.9-2-2-2zm0 16H8V7h11v14z" />
36
+ </svg>
37
+ ),
25
38
  },
26
39
  {
27
40
  value: 2,
28
- label: "Twitter",
29
- iconSrc: "/testIconTwitter",
30
- },
31
- {
32
- value: 3,
33
- label: "Linkedin",
34
- iconSrc: "/testIconLinkedin",
41
+ label: "Image 2",
42
+ icon: (
43
+ <svg
44
+ data-testid="image-2"
45
+ version="1.1"
46
+ x="0px"
47
+ y="0px"
48
+ width="24px"
49
+ height="24px"
50
+ viewBox="0 0 24 24"
51
+ enable-background="new 0 0 24 24"
52
+ >
53
+ <g id="Bounding_Box">
54
+ <rect fill="none" width="24" height="24" />
55
+ </g>
56
+ <g id="Master">
57
+ <path d="M19,9.3V4h-3v2.6L12,3L2,12h3v8h5v-6h4v6h5v-8h3L19,9.3z M10,10c0-1.1,0.9-2,2-2s2,0.9,2,2H10z" />
58
+ </g>
59
+ </svg>
60
+ ),
35
61
  },
36
62
  ];
37
63
 
@@ -51,7 +77,7 @@ describe("Select component tests", () => {
51
77
  expect(queryByText("Apple")).toBeFalsy();
52
78
  const select = getByRole("button");
53
79
  act(() => {
54
- fireEvent.click(select);
80
+ userEvent.click(select);
55
81
  });
56
82
  expect(getByText("Amazon")).toBeTruthy();
57
83
  expect(getByText("Ebay")).toBeTruthy();
@@ -59,29 +85,27 @@ describe("Select component tests", () => {
59
85
  });
60
86
 
61
87
  test("Select renders options with icons before", () => {
62
- const { getByRole, getAllByRole } = render(
88
+ const { getByRole, getByTestId } = render(
63
89
  <DxcSelect label="test-select-name" options={optionsWithIcons}></DxcSelect>
64
90
  );
65
91
  const select = getByRole("button");
66
92
  act(() => {
67
- fireEvent.click(select);
93
+ userEvent.click(select);
68
94
  });
69
- expect(getAllByRole("img")[0].getAttribute("src")).toEqual("/testIconFacebook");
70
- expect(getAllByRole("img")[1].getAttribute("src")).toEqual("/testIconTwitter");
71
- expect(getAllByRole("img")[2].getAttribute("src")).toEqual("/testIconLinkedin");
95
+ expect(getByTestId("image-1")).toBeTruthy();
96
+ expect(getByTestId("image-2")).toBeTruthy();
72
97
  });
73
98
 
74
99
  test("Select renders options with icons after", () => {
75
- const { getByRole, getAllByRole } = render(
100
+ const { getByRole, getByTestId } = render(
76
101
  <DxcSelect label="test-select-name" options={optionsWithIcons} iconPosition="after"></DxcSelect>
77
102
  );
78
103
  const select = getByRole("button");
79
104
  act(() => {
80
- fireEvent.click(select);
105
+ userEvent.click(select);
81
106
  });
82
- expect(getAllByRole("img")[0].getAttribute("src")).toEqual("/testIconFacebook");
83
- expect(getAllByRole("img")[1].getAttribute("src")).toEqual("/testIconTwitter");
84
- expect(getAllByRole("img")[2].getAttribute("src")).toEqual("/testIconLinkedin");
107
+ expect(getByTestId("image-1")).toBeTruthy();
108
+ expect(getByTestId("image-2")).toBeTruthy();
85
109
  });
86
110
 
87
111
  test("Select renders with a default value", () => {
@@ -107,7 +131,7 @@ describe("Select component tests", () => {
107
131
  expect(queryByText("Apple")).toBeFalsy();
108
132
  const select = getByText("test-select-name");
109
133
  act(() => {
110
- fireEvent.click(select);
134
+ userEvent.click(select);
111
135
  });
112
136
  expect(queryByText("Amazon")).toBeFalsy();
113
137
  expect(queryByText("Ebay")).toBeFalsy();
@@ -121,11 +145,11 @@ describe("Select component tests", () => {
121
145
  );
122
146
  const select = getByText("Amazon");
123
147
  act(() => {
124
- fireEvent.click(select);
148
+ userEvent.click(select);
125
149
  });
126
150
  const option2 = getByText("Ebay");
127
151
  act(() => {
128
- fireEvent.click(option2);
152
+ userEvent.click(option2);
129
153
  });
130
154
  expect(onChange).toHaveBeenCalledWith(2);
131
155
  //The value is not changed
@@ -145,11 +169,11 @@ describe("Select component tests", () => {
145
169
  );
146
170
  const select = getByText("Amazon, Ebay");
147
171
  act(() => {
148
- fireEvent.click(select);
172
+ userEvent.click(select);
149
173
  });
150
174
  const option3 = getByText("Apple");
151
175
  act(() => {
152
- fireEvent.click(option3);
176
+ userEvent.click(option3);
153
177
  });
154
178
  expect(onChange).toHaveBeenCalledWith([1, 2, 3]);
155
179
  //The value is not changed
@@ -163,27 +187,24 @@ describe("Select component tests", () => {
163
187
  );
164
188
  const select = getByRole("button");
165
189
  act(() => {
166
- fireEvent.click(select);
190
+ userEvent.click(select);
167
191
  });
168
- const option1 = getByText("Amazon");
169
- const option2 = getByText("Ebay");
170
- const option3 = getByText("Apple");
171
192
  act(() => {
172
- fireEvent.click(option1);
193
+ userEvent.click(getByText("Amazon"));
173
194
  });
174
195
  expect(onChange).toHaveBeenCalledWith([1]);
175
196
  act(() => {
176
- fireEvent.click(option2);
197
+ userEvent.click(getByText("Ebay"));
177
198
  });
178
199
  expect(onChange).toHaveBeenCalledWith([1, 2]);
179
200
  expect(getByText("Amazon, Ebay")).toBeTruthy();
180
201
  act(() => {
181
- fireEvent.click(option3);
202
+ userEvent.click(getByText("Apple"));
182
203
  });
183
204
  expect(onChange).toHaveBeenCalledWith([1, 2, 3]);
184
205
  expect(getByText("Amazon, Ebay, Apple")).toBeTruthy();
185
206
  act(() => {
186
- fireEvent.click(option1);
207
+ userEvent.click(getByText("Amazon"));
187
208
  });
188
209
  expect(onChange).toHaveBeenCalledWith([2, 3]);
189
210
  expect(getByText("Ebay, Apple")).toBeTruthy();
@@ -3,85 +3,43 @@ import { render, fireEvent } from "@testing-library/react";
3
3
  import DxcSidenav from "../src/sidenav/Sidenav";
4
4
 
5
5
  const navContent = <p>nav-content-test</p>;
6
- const pageContent = <p>page-content-test</p>;
7
6
 
8
7
  describe("Sidenav component tests", () => {
9
- test("Sidenav in overlay mode renders nav and page content, and arrow", () => {
10
- const { getByText, queryByTestId } = render(
11
- <DxcSidenav navContent={navContent} pageContent={pageContent}></DxcSidenav>
12
- );
13
- expect(getByText("nav-content-test")).toBeTruthy();
14
- expect(getByText("page-content-test")).toBeTruthy();
15
- expect(queryByTestId("arrow-to-right")).toBeTruthy();
16
- });
17
-
18
- test("Sidenav in push mode renders nav and page content, and arrow", () => {
19
- const { getByText, queryByTestId } = render(
20
- <DxcSidenav navContent={navContent} pageContent={pageContent} mode="push"></DxcSidenav>
21
- );
8
+ test("Sidenav renders nav content", () => {
9
+ const { getByText } = render(<DxcSidenav>{navContent}</DxcSidenav>);
22
10
  expect(getByText("nav-content-test")).toBeTruthy();
23
- expect(getByText("page-content-test")).toBeTruthy();
24
- expect(queryByTestId("arrow-to-right")).toBeTruthy();
25
11
  });
26
12
 
27
- test("Sidenav in overlay mode renders nav and page content in mobile version", () => {
13
+ test("Sidenav renders nav and page content in mobile version", () => {
28
14
  //425 is mobile width
29
15
  Object.defineProperty(HTMLElement.prototype, "offsetWidth", { configurable: true, value: 425 });
30
- const { getByText } = render(<DxcSidenav navContent={navContent} pageContent={pageContent}></DxcSidenav>);
16
+ const { getByText } = render(<DxcSidenav>{navContent}</DxcSidenav>);
31
17
  expect(getByText("nav-content-test")).toBeTruthy();
32
- expect(getByText("page-content-test")).toBeTruthy();
33
18
  });
34
19
 
35
- test("Sidenav in push mode renders nav and page content in mobile version", () => {
36
- //425 is mobile width
37
- Object.defineProperty(HTMLElement.prototype, "offsetWidth", { configurable: true, value: 425 });
20
+ test("Sidenav renders compound components", () => {
38
21
  const { getByText } = render(
39
- <DxcSidenav navContent={navContent} pageContent={pageContent} mode="push"></DxcSidenav>
40
- );
41
- expect(getByText("nav-content-test")).toBeTruthy();
42
- expect(getByText("page-content-test")).toBeTruthy();
43
- });
44
-
45
- test("Sidenav in overlay mode not renders arrow", () => {
46
- //We need to force the offsetWidth value to detect that is not responsive
47
- Object.defineProperty(HTMLElement.prototype, "offsetWidth", { configurable: true, value: 1024 });
48
- const { queryByTestId } = render(
49
- <DxcSidenav navContent={navContent} pageContent={pageContent} displayArrow={false}></DxcSidenav>
50
- );
51
- expect(queryByTestId("arrow-to-right")).toBeNull();
52
- });
53
-
54
- test("Sidenav in push mode not renders arrow", () => {
55
- //We need to force the offsetWidth value to detect that is not responsive
56
- Object.defineProperty(HTMLElement.prototype, "offsetWidth", { configurable: true, value: 1024 });
57
- const { queryByTestId } = render(
58
- <DxcSidenav navContent={navContent} pageContent={pageContent} displayArrow={false} mode="push"></DxcSidenav>
59
- );
60
- expect(queryByTestId("arrow-to-right")).toBeNull();
61
- });
62
-
63
- test("Sidenav renders arrow with arrow distance", () => {
64
- const { queryByTestId } = render(
65
- <DxcSidenav navContent={navContent} pageContent={pageContent} arrowDistance="10px"></DxcSidenav>
22
+ <DxcSidenav>
23
+ <DxcSidenav.Title>test-title</DxcSidenav.Title>
24
+ <DxcSidenav.Subtitle>test-subtitle</DxcSidenav.Subtitle>
25
+ <DxcSidenav.Link href="#">test-link</DxcSidenav.Link>
26
+ </DxcSidenav>
66
27
  );
67
- expect(queryByTestId("arrow-to-right")).toBeTruthy();
28
+ expect(getByText("test-title")).toBeTruthy();
29
+ expect(getByText("test-subtitle")).toBeTruthy();
30
+ expect(getByText("test-link")).toBeTruthy();
68
31
  });
69
32
 
70
- test("Sidenav in overlay mode always renders arrow in mobile version", () => {
71
- //425 is mobile width
72
- Object.defineProperty(HTMLElement.prototype, "offsetWidth", { configurable: true, value: 425 });
73
- const { queryByTestId } = render(
74
- <DxcSidenav navContent={navContent} pageContent={pageContent} displayArrow={false}></DxcSidenav>
33
+ test("Sidenav link onClick", () => {
34
+ const onClick = jest.fn();
35
+ const { getByText } = render(
36
+ <DxcSidenav>
37
+ <DxcSidenav.Link onClick={onClick}>test-link</DxcSidenav.Link>
38
+ </DxcSidenav>
75
39
  );
76
- expect(queryByTestId("arrow-to-right")).toBeTruthy();
77
- });
78
40
 
79
- test("Sidenav in push mode always renders arrow in mobile version", () => {
80
- //425 is mobile width
81
- Object.defineProperty(HTMLElement.prototype, "offsetWidth", { configurable: true, value: 425 });
82
- const { queryByTestId } = render(
83
- <DxcSidenav navContent={navContent} pageContent={pageContent} displayArrow={false} mode="push"></DxcSidenav>
84
- );
85
- expect(queryByTestId("arrow-to-right")).toBeTruthy();
41
+ const link = getByText("test-link");
42
+ fireEvent.click(link);
43
+ expect(onClick).toHaveBeenCalled();
86
44
  });
87
45
  });
@@ -4,7 +4,7 @@ import DxcSlider from "../src/slider/Slider";
4
4
 
5
5
  describe("Slider component tests", () => {
6
6
  test("Slider renders with correct text", () => {
7
- const { getByText } = render(<DxcSlider minValue={0} maxValue={100} showLimitsValues></DxcSlider>);
7
+ const { getByText } = render(<DxcSlider minValue={0} maxValue={100} showLimitsValues />);
8
8
  expect(getByText("0")).toBeTruthy();
9
9
  expect(getByText("100")).toBeTruthy();
10
10
  });
@@ -12,37 +12,29 @@ describe("Slider component tests", () => {
12
12
  test("Calls correct function onChange in controlled slider", () => {
13
13
  const onChange = jest.fn();
14
14
  const { getByRole } = render(
15
- <DxcSlider minValue={0} maxValue={100} onChange={onChange} showLimitsValues value={13} showInput></DxcSlider>
15
+ <DxcSlider minValue={0} maxValue={100} onChange={onChange} showLimitsValues value={13} showInput />
16
16
  );
17
17
  act(() => {
18
18
  fireEvent.change(getByRole("textbox"), { target: { value: 25 } });
19
19
  });
20
- expect(onChange).toHaveBeenCalledWith("25");
20
+ expect(onChange).toHaveBeenCalledWith(25);
21
21
  });
22
22
 
23
23
  test("Calls correct function onChange in uncontrolled slider", () => {
24
24
  const onChange = jest.fn();
25
25
  const { getByRole } = render(
26
- <DxcSlider minValue={0} maxValue={100} onChange={onChange} showLimitsValues showInput></DxcSlider>
26
+ <DxcSlider minValue={0} maxValue={100} onChange={onChange} showLimitsValues showInput />
27
27
  );
28
28
  act(() => {
29
29
  fireEvent.change(getByRole("textbox"), { target: { value: 25 } });
30
30
  });
31
- expect(onChange).toHaveBeenCalledWith("25");
31
+ expect(onChange).toHaveBeenCalledWith(25);
32
32
  });
33
33
 
34
34
  test("Disabled slider have disabled input", () => {
35
35
  const onChange = jest.fn();
36
36
  const { getByRole } = render(
37
- <DxcSlider
38
- minValue={0}
39
- maxValue={100}
40
- onChange={onChange}
41
- showLimitsValues
42
- disabled
43
- showInput
44
- value={13}
45
- ></DxcSlider>
37
+ <DxcSlider minValue={0} maxValue={100} onChange={onChange} showLimitsValues disabled showInput value={13} />
46
38
  );
47
39
  act(() => {
48
40
  fireEvent.change(getByRole("textbox"), { target: { value: 25 } });
@@ -54,7 +46,7 @@ describe("Slider component tests", () => {
54
46
  test("Calls correct function onDragEnd", () => {
55
47
  const onDragEnd = jest.fn();
56
48
  const { getByRole } = render(
57
- <DxcSlider minValue={0} maxValue={100} showLimitsValues showInput onDragEnd={onDragEnd} value={25}></DxcSlider>
49
+ <DxcSlider minValue={0} maxValue={100} showLimitsValues showInput onDragEnd={onDragEnd} value={25} />
58
50
  );
59
51
  act(() => {
60
52
  fireEvent.mouseDown(getByRole("slider"));
@@ -62,4 +54,21 @@ describe("Slider component tests", () => {
62
54
  });
63
55
  expect(onDragEnd).toHaveBeenCalled();
64
56
  });
57
+
58
+ test("Calls correct function labelFormatCallback", () => {
59
+ const labelFormatCallback = jest.fn((x) => `${x}$`);
60
+ const { getByText } = render(
61
+ <DxcSlider
62
+ minValue={0}
63
+ maxValue={100}
64
+ showLimitsValues
65
+ showInput
66
+ value={25}
67
+ labelFormatCallback={labelFormatCallback}
68
+ />
69
+ );
70
+ expect(getByText("0$")).toBeTruthy();
71
+ expect(getByText("100$")).toBeTruthy();
72
+ expect(labelFormatCallback).toHaveBeenCalledTimes(2);
73
+ });
65
74
  });
@@ -24,4 +24,9 @@ describe("Spinner component tests", () => {
24
24
  expect(getByText("test-loading")).toBeTruthy();
25
25
  expect(getByText("75%")).toBeTruthy();
26
26
  });
27
+
28
+ test("Get spinner by role", () => {
29
+ const { getByRole } = render(<DxcSpinner label="test-loading" value={75} showValue></DxcSpinner>);
30
+ expect(getByRole("progressbar")).toBeTruthy();
31
+ });
27
32
  });
package/test/Tabs.test.js CHANGED
@@ -14,6 +14,21 @@ const sampleTabs = [
14
14
  },
15
15
  ];
16
16
 
17
+ const sampleTabsWithBadge = [
18
+ {
19
+ label: "Tab-1",
20
+ notificationNumber: "10",
21
+ },
22
+ {
23
+ label: "Tab-2",
24
+ notificationNumber: "20",
25
+ },
26
+ {
27
+ label: "Tab-3",
28
+ notificationNumber: "101",
29
+ },
30
+ ];
31
+
17
32
  describe("Tabs component tests", () => {
18
33
  test("Tabs render with correct labels", () => {
19
34
  const { getByText } = render(<DxcTabs tabs={sampleTabs}></DxcTabs>);
@@ -21,6 +36,12 @@ describe("Tabs component tests", () => {
21
36
  expect(getByText("Tab-2")).toBeTruthy();
22
37
  expect(getByText("Tab-3")).toBeTruthy();
23
38
  });
39
+ test("Tabs render with correct labels and badges", () => {
40
+ const { getByText } = render(<DxcTabs tabs={sampleTabsWithBadge}></DxcTabs>);
41
+ expect(getByText("10")).toBeTruthy();
42
+ expect(getByText("20")).toBeTruthy();
43
+ expect(getByText("+99")).toBeTruthy();
44
+ });
24
45
 
25
46
  test("Tabs render with correct icons", () => {
26
47
  const { getAllByRole } = render(