@dxc-technology/halstack-react 0.0.0-a9c6846 → 0.0.0-acb1a24

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/README.md +1 -1
  2. package/dist/ThemeContext.js +44 -42
  3. package/dist/V3Select/V3Select.js +549 -0
  4. package/dist/V3Select/index.d.ts +27 -0
  5. package/dist/V3Textarea/V3Textarea.js +264 -0
  6. package/dist/V3Textarea/index.d.ts +27 -0
  7. package/dist/accordion/index.d.ts +28 -0
  8. package/dist/accordion-group/index.d.ts +16 -0
  9. package/dist/alert/Alert.js +5 -5
  10. package/dist/box/index.d.ts +25 -0
  11. package/dist/button/Button.js +3 -3
  12. package/dist/button/index.d.ts +24 -0
  13. package/dist/card/index.d.ts +22 -0
  14. package/dist/checkbox/Checkbox.js +4 -5
  15. package/dist/checkbox/index.d.ts +24 -0
  16. package/dist/chip/index.d.ts +22 -0
  17. package/dist/common/variables.js +223 -90
  18. package/dist/date/index.d.ts +27 -0
  19. package/dist/{new-date/NewDate.js → date-input/DateInput.js} +36 -36
  20. package/dist/{new-date → date-input}/index.d.ts +3 -3
  21. package/dist/dialog/index.d.ts +18 -0
  22. package/dist/dropdown/index.d.ts +26 -0
  23. package/dist/file-input/FileInput.js +6 -3
  24. package/dist/file-input/FileItem.js +8 -1
  25. package/dist/file-input/index.d.ts +1 -1
  26. package/dist/footer/Footer.js +44 -18
  27. package/dist/footer/Icons.js +77 -0
  28. package/dist/footer/index.d.ts +25 -0
  29. package/dist/header/Header.js +122 -55
  30. package/dist/header/Icons.js +59 -0
  31. package/dist/header/index.d.ts +25 -0
  32. package/dist/heading/Heading.js +12 -0
  33. package/dist/heading/index.d.ts +17 -0
  34. package/dist/input-text/Icons.js +22 -0
  35. package/dist/input-text/InputText.js +4 -6
  36. package/dist/input-text/index.d.ts +36 -0
  37. package/dist/layout/ApplicationLayout.js +4 -8
  38. package/dist/layout/Icons.js +55 -0
  39. package/dist/link/index.d.ts +23 -0
  40. package/dist/main.d.ts +38 -5
  41. package/dist/main.js +30 -30
  42. package/dist/{number/Number.js → number-input/NumberInput.js} +9 -11
  43. package/dist/{number/NumberContext.js → number-input/NumberInputContext.js} +2 -2
  44. package/dist/{number → number-input}/index.d.ts +3 -3
  45. package/dist/paginator/Icons.js +66 -0
  46. package/dist/paginator/Paginator.js +53 -37
  47. package/dist/paginator/index.d.ts +20 -0
  48. package/dist/{password/Password.js → password-input/PasswordInput.js} +14 -11
  49. package/dist/{password → password-input}/index.d.ts +5 -5
  50. package/dist/progress-bar/index.d.ts +18 -0
  51. package/dist/radio/index.d.ts +23 -0
  52. package/dist/resultsetTable/index.d.ts +19 -0
  53. package/dist/select/Select.js +848 -301
  54. package/dist/select/index.d.ts +53 -0
  55. package/dist/sidenav/index.d.ts +13 -0
  56. package/dist/slider/Slider.js +104 -19
  57. package/dist/slider/index.d.ts +29 -0
  58. package/dist/spinner/index.d.ts +17 -0
  59. package/dist/switch/index.d.ts +24 -0
  60. package/dist/table/index.d.ts +13 -0
  61. package/dist/tabs/index.d.ts +19 -0
  62. package/dist/tag/index.d.ts +24 -0
  63. package/dist/{new-input-text/NewInputText.js → text-input/TextInput.js} +49 -57
  64. package/dist/{new-input-text → text-input}/index.d.ts +1 -1
  65. package/dist/textarea/Textarea.js +227 -122
  66. package/dist/{new-textarea → textarea}/index.d.ts +1 -1
  67. package/dist/toggle/index.d.ts +21 -0
  68. package/dist/toggle-group/ToggleGroup.js +132 -28
  69. package/dist/toggle-group/index.d.ts +21 -0
  70. package/dist/upload/buttons-upload/ButtonsUpload.js +7 -11
  71. package/dist/upload/buttons-upload/Icons.js +40 -0
  72. package/dist/upload/dragAndDropArea/DragAndDropArea.js +14 -14
  73. package/dist/upload/dragAndDropArea/Icons.js +39 -0
  74. package/dist/upload/file-upload/FileToUpload.js +26 -21
  75. package/dist/upload/file-upload/Icons.js +66 -0
  76. package/dist/upload/index.d.ts +15 -0
  77. package/dist/upload/transaction/Icons.js +160 -0
  78. package/dist/upload/transaction/Transaction.js +11 -38
  79. package/dist/wizard/Icons.js +65 -0
  80. package/dist/wizard/Wizard.js +3 -9
  81. package/dist/wizard/index.d.ts +18 -0
  82. package/package.json +6 -10
  83. package/test/Date.test.js +13 -11
  84. package/test/{NewDate.test.js → DateInput.test.js} +33 -23
  85. package/test/Footer.test.js +2 -7
  86. package/test/Header.test.js +5 -10
  87. package/test/Heading.test.js +60 -12
  88. package/test/{Number.test.js → NumberInput.test.js} +47 -45
  89. package/test/Paginator.test.js +5 -1
  90. package/test/PasswordInput.test.js +83 -0
  91. package/test/ResultsetTable.test.js +5 -4
  92. package/test/Select.test.js +374 -171
  93. package/test/Slider.test.js +9 -17
  94. package/test/{NewInputText.test.js → TextInput.test.js} +51 -53
  95. package/test/{NewTextarea.test.js → Textarea.test.js} +16 -18
  96. package/test/ToggleGroup.test.js +5 -1
  97. package/test/Upload.test.js +1 -1
  98. package/test/V3Select.test.js +212 -0
  99. package/test/{TextArea.test.js → V3TextArea.test.js} +6 -7
  100. package/dist/checkbox/Checkbox.stories.js +0 -144
  101. package/dist/checkbox/readme.md +0 -116
  102. package/dist/date/Date.stories.js +0 -205
  103. package/dist/date/readme.md +0 -73
  104. package/dist/footer/Footer.stories.js +0 -94
  105. package/dist/footer/dxc_logo.svg +0 -15
  106. package/dist/footer/readme.md +0 -41
  107. package/dist/header/Header.stories.js +0 -176
  108. package/dist/header/close_icon.svg +0 -1
  109. package/dist/header/dxc_logo_black.svg +0 -8
  110. package/dist/header/hamb_menu_black.svg +0 -1
  111. package/dist/header/hamb_menu_white.svg +0 -1
  112. package/dist/header/readme.md +0 -33
  113. package/dist/input-text/InputText.stories.js +0 -209
  114. package/dist/input-text/error.svg +0 -1
  115. package/dist/input-text/readme.md +0 -91
  116. package/dist/layout/facebook.svg +0 -45
  117. package/dist/layout/linkedin.svg +0 -50
  118. package/dist/layout/twitter.svg +0 -53
  119. package/dist/link/readme.md +0 -51
  120. package/dist/new-textarea/NewTextarea.js +0 -362
  121. package/dist/paginator/images/next.svg +0 -3
  122. package/dist/paginator/images/nextPage.svg +0 -3
  123. package/dist/paginator/images/previous.svg +0 -3
  124. package/dist/paginator/images/previousPage.svg +0 -3
  125. package/dist/paginator/readme.md +0 -50
  126. package/dist/password/styles.css +0 -3
  127. package/dist/progress-bar/ProgressBar.stories.js +0 -280
  128. package/dist/progress-bar/readme.md +0 -63
  129. package/dist/radio/Radio.stories.js +0 -166
  130. package/dist/radio/readme.md +0 -70
  131. package/dist/resultsetTable/arrow_downward-24px_wht.svg +0 -1
  132. package/dist/resultsetTable/arrow_upward-24px_wht.svg +0 -1
  133. package/dist/resultsetTable/unfold_more-24px_wht.svg +0 -1
  134. package/dist/slider/Slider.stories.js +0 -241
  135. package/dist/slider/readme.md +0 -64
  136. package/dist/spinner/Spinner.stories.js +0 -183
  137. package/dist/spinner/readme.md +0 -65
  138. package/dist/switch/Switch.stories.js +0 -134
  139. package/dist/switch/readme.md +0 -133
  140. package/dist/tabs/Tabs.stories.js +0 -130
  141. package/dist/tabs/readme.md +0 -78
  142. package/dist/tabs-for-sections/TabsForSections.js +0 -92
  143. package/dist/tabs-for-sections/readme.md +0 -78
  144. package/dist/toggle/Toggle.stories.js +0 -297
  145. package/dist/toggle/readme.md +0 -80
  146. package/dist/upload/Upload.stories.js +0 -72
  147. package/dist/upload/buttons-upload/drag-drop-icon.svg +0 -4
  148. package/dist/upload/buttons-upload/upload-button.svg +0 -1
  149. package/dist/upload/dragAndDropArea/upload_drop.svg +0 -4
  150. package/dist/upload/dragAndDropArea/upload_file.svg +0 -4
  151. package/dist/upload/file-upload/audio-icon.svg +0 -4
  152. package/dist/upload/file-upload/close.svg +0 -4
  153. package/dist/upload/file-upload/file-icon.svg +0 -4
  154. package/dist/upload/file-upload/video-icon.svg +0 -4
  155. package/dist/upload/readme.md +0 -37
  156. package/dist/upload/transaction/audio-icon-err.svg +0 -4
  157. package/dist/upload/transaction/audio-icon.svg +0 -4
  158. package/dist/upload/transaction/error-icon.svg +0 -4
  159. package/dist/upload/transaction/file-icon-err.svg +0 -4
  160. package/dist/upload/transaction/file-icon.svg +0 -4
  161. package/dist/upload/transaction/image-icon-err.svg +0 -4
  162. package/dist/upload/transaction/image-icon.svg +0 -4
  163. package/dist/upload/transaction/success-icon.svg +0 -4
  164. package/dist/upload/transaction/video-icon-err.svg +0 -4
  165. package/dist/upload/transaction/video-icon.svg +0 -4
  166. package/dist/wizard/invalid_icon.svg +0 -5
  167. package/dist/wizard/valid_icon.svg +0 -5
  168. package/dist/wizard/validation-wrong.svg +0 -6
  169. package/test/Password.test.js +0 -83
  170. package/test/TabsForSections.test.js +0 -34
@@ -2,12 +2,12 @@ import React from "react";
2
2
  import { render, fireEvent } from "@testing-library/react";
3
3
  import userEvent from "@testing-library/user-event";
4
4
 
5
- import DxcNewDate from "../src/new-date/NewDate";
5
+ import DxcDateInput from "../src/date-input/DateInput";
6
6
 
7
- describe("NewDate component tests", () => {
7
+ describe("DateInput component tests", () => {
8
8
  test("Renders with correct label, helper text, optional, placeholder and clearable action", () => {
9
9
  const { getByText, getByRole, getAllByRole } = render(
10
- <DxcNewDate label="Example label" helperText="Example of helper text" placeholder optional clearable />
10
+ <DxcDateInput label="Example label" helperText="Example of helper text" placeholder optional clearable />
11
11
  );
12
12
  const input = getByRole("textbox");
13
13
  expect(getByText("Example label")).toBeTruthy();
@@ -21,7 +21,7 @@ describe("NewDate component tests", () => {
21
21
  });
22
22
 
23
23
  test("Renders with personalized error", () => {
24
- const { getByText } = render(<DxcNewDate error="Personalized error." />);
24
+ const { getByText } = render(<DxcDateInput error="Personalized error." />);
25
25
  expect(getByText("Personalized error.")).toBeTruthy();
26
26
  });
27
27
 
@@ -30,7 +30,7 @@ describe("NewDate component tests", () => {
30
30
  expect(value).toBe("10/90/2010");
31
31
  expect(error).toBe("Invalid date.");
32
32
  });
33
- const { getByRole } = render(<DxcNewDate label="With format MM/dd/yyyy" format="MM/dd/yyyy" onBlur={onBlur} />);
33
+ const { getByRole } = render(<DxcDateInput label="With format MM/dd/yyyy" format="MM/dd/yyyy" onBlur={onBlur} />);
34
34
  const input = getByRole("textbox");
35
35
 
36
36
  userEvent.type(input, "10/90/2010");
@@ -39,7 +39,9 @@ describe("NewDate component tests", () => {
39
39
 
40
40
  test("Renders with correct format: user typed date but it's invalid, onChange error", () => {
41
41
  const onChange = jest.fn();
42
- const { getByRole } = render(<DxcNewDate label="With format MM/dd/yyyy" format="MM/dd/yyyy" onChange={onChange} />);
42
+ const { getByRole } = render(
43
+ <DxcDateInput label="With format MM/dd/yyyy" format="MM/dd/yyyy" onChange={onChange} />
44
+ );
43
45
  const input = getByRole("textbox");
44
46
 
45
47
  userEvent.type(input, "10/90/2010");
@@ -48,7 +50,7 @@ describe("NewDate component tests", () => {
48
50
  });
49
51
 
50
52
  test("Calendar renders with correct date: today's date", () => {
51
- const { getByText, getByRole } = render(<DxcNewDate />);
53
+ const { getByText, getByRole } = render(<DxcDateInput />);
52
54
  const calendarAction = getByRole("button");
53
55
  const d = new Date();
54
56
  const options = { weekday: "short", month: "short", day: "numeric" };
@@ -58,7 +60,7 @@ describe("NewDate component tests", () => {
58
60
  });
59
61
 
60
62
  test("Calendar renders with correct date: value prop", () => {
61
- const { getByText, getByRole } = render(<DxcNewDate value="20-10-2019" />);
63
+ const { getByText, getByRole } = render(<DxcDateInput value="20-10-2019" />);
62
64
  const calendarAction = getByRole("button");
63
65
  const d = new Date(2019, 9, 20);
64
66
  const options = { weekday: "short", month: "short", day: "numeric" };
@@ -68,7 +70,7 @@ describe("NewDate component tests", () => {
68
70
  });
69
71
 
70
72
  test("Calendar renders with correct date: user typed value", () => {
71
- const { getByText, getByRole } = render(<DxcNewDate />);
73
+ const { getByText, getByRole } = render(<DxcDateInput />);
72
74
  const calendarAction = getByRole("button");
73
75
  const d = new Date(2010, 0, 1);
74
76
  const options = { weekday: "short", month: "short", day: "numeric" };
@@ -81,7 +83,7 @@ describe("NewDate component tests", () => {
81
83
 
82
84
  test("Calendar renders with correct date: invalid date, renders with today's date", () => {
83
85
  const onBlur = jest.fn();
84
- const { getByText, getByRole } = render(<DxcNewDate onBlur={onBlur} />);
86
+ const { getByText, getByRole } = render(<DxcDateInput onBlur={onBlur} />);
85
87
  const calendarAction = getByRole("button");
86
88
  const d = new Date();
87
89
  const options = { weekday: "short", month: "short", day: "numeric" };
@@ -96,11 +98,11 @@ describe("NewDate component tests", () => {
96
98
  });
97
99
 
98
100
  test("Selecting a date from the calendar with an specific format", () => {
99
- const { getByText, getByRole } = render(<DxcNewDate label="With format M-dd-yyyy" format="M-dd-yyyy" />);
101
+ const { getByText, getByRole } = render(<DxcDateInput label="With format M-dd-yyyy" format="M-dd-yyyy" />);
100
102
  const input = getByRole("textbox");
101
103
  const calendarAction = getByRole("button");
102
104
  userEvent.click(calendarAction);
103
- const dayButton = getByText("10").closest('button');
105
+ const dayButton = getByText("10").closest("button");
104
106
  fireEvent.click(dayButton);
105
107
  const d = new Date();
106
108
  d.setDate(10);
@@ -111,7 +113,7 @@ describe("NewDate component tests", () => {
111
113
  });
112
114
 
113
115
  test("Selecting a date from the calendar (using keyboard presses)", () => {
114
- const { getByRole } = render(<DxcNewDate />);
116
+ const { getByRole } = render(<DxcDateInput />);
115
117
  const calendarAction = getByRole("button");
116
118
  const input = getByRole("textbox");
117
119
 
@@ -128,7 +130,7 @@ describe("NewDate component tests", () => {
128
130
  test("onChange & onBlur functions are called correctly", () => {
129
131
  const onBlur = jest.fn();
130
132
  const onChange = jest.fn();
131
- const { getByRole } = render(<DxcNewDate onChange={onChange} onBlur={onBlur} />);
133
+ const { getByRole } = render(<DxcDateInput onChange={onChange} onBlur={onBlur} />);
132
134
  const input = getByRole("textbox");
133
135
  const d = new Date(2011, 9, 10);
134
136
 
@@ -144,7 +146,7 @@ describe("NewDate component tests", () => {
144
146
  test("onChange & onBlur functions are called correctly, also with errors", () => {
145
147
  const onBlur = jest.fn();
146
148
  const onChange = jest.fn();
147
- const { getByRole } = render(<DxcNewDate onChange={onChange} onBlur={onBlur} />);
149
+ const { getByRole } = render(<DxcDateInput onChange={onChange} onBlur={onBlur} />);
148
150
  const input = getByRole("textbox");
149
151
 
150
152
  userEvent.type(input, "10-10-");
@@ -158,7 +160,7 @@ describe("NewDate component tests", () => {
158
160
 
159
161
  test("onBlur function removes the error when it is fixed", () => {
160
162
  const onBlur = jest.fn();
161
- const { getByRole } = render(<DxcNewDate onBlur={onBlur} />);
163
+ const { getByRole } = render(<DxcDateInput onBlur={onBlur} />);
162
164
  const input = getByRole("textbox");
163
165
  const d = new Date(2002, 1, 20);
164
166
 
@@ -177,7 +179,7 @@ describe("NewDate component tests", () => {
177
179
 
178
180
  test("onBlur function removes the error when the input is empty", () => {
179
181
  const onBlur = jest.fn();
180
- const { getByRole } = render(<DxcNewDate onBlur={onBlur} optional />);
182
+ const { getByRole } = render(<DxcDateInput onBlur={onBlur} optional />);
181
183
  const input = getByRole("textbox");
182
184
 
183
185
  userEvent.type(input, "test");
@@ -194,7 +196,7 @@ describe("NewDate component tests", () => {
194
196
  test("onBlur & onChange functions error: required field (not optional)", () => {
195
197
  const onBlur = jest.fn();
196
198
  const onChange = jest.fn();
197
- const { getByRole } = render(<DxcNewDate onBlur={onBlur} onChange={onChange} />);
199
+ const { getByRole } = render(<DxcDateInput onBlur={onBlur} onChange={onChange} />);
198
200
  const date = getByRole("textbox");
199
201
 
200
202
  userEvent.type(date, "t");
@@ -202,13 +204,21 @@ describe("NewDate component tests", () => {
202
204
  userEvent.clear(date);
203
205
  fireEvent.blur(date);
204
206
  expect(onBlur).toHaveBeenCalled();
205
- expect(onBlur).toHaveBeenCalledWith({ value: "", error: "This field is required. Please, enter a value.", date: null });
207
+ expect(onBlur).toHaveBeenCalledWith({
208
+ value: "",
209
+ error: "This field is required. Please, enter a value.",
210
+ date: null,
211
+ });
206
212
  expect(onChange).toHaveBeenCalled();
207
- expect(onChange).toHaveBeenCalledWith({ value: "", error: "This field is required. Please, enter a value.", date: null });
213
+ expect(onChange).toHaveBeenCalledWith({
214
+ value: "",
215
+ error: "This field is required. Please, enter a value.",
216
+ date: null,
217
+ });
208
218
  });
209
219
 
210
- test("Disabled date (calendar action must be shown but not clickable)", () => {
211
- const { getByRole, queryByText } = render(<DxcNewDate disabled />);
220
+ test("Disabled date input (calendar action must be shown but not clickable)", () => {
221
+ const { getByRole, queryByText } = render(<DxcDateInput disabled />);
212
222
  const calendarAction = getByRole("button");
213
223
  const d = new Date();
214
224
  const options = { weekday: "short", month: "short", day: "numeric" };
@@ -219,7 +229,7 @@ describe("NewDate component tests", () => {
219
229
  });
220
230
 
221
231
  test("Input has correct accesibility attributes", () => {
222
- const { getByRole } = render(<DxcNewDate label="Date label" />);
232
+ const { getByRole } = render(<DxcDateInput label="Date input label" />);
223
233
  const input = getByRole("textbox");
224
234
  expect(input.getAttribute("aria-autocomplete")).toBeNull();
225
235
  expect(input.getAttribute("aria-controls")).toBeNull();
@@ -5,13 +5,8 @@ import icon from "../../app/src/images/linkedin.svg";
5
5
 
6
6
  describe("Footer component tests", () => {
7
7
  test("Footer renders with default logo", () => {
8
- const { getByRole } = render(<DxcFooter></DxcFooter>);
9
- expect(getByRole("img")).toBeTruthy();
10
- });
11
-
12
- test("Footer renders with logo", () => {
13
- const { getByRole } = render(<DxcFooter logoSrc={icon}></DxcFooter>);
14
- expect(getByRole("img")).toBeTruthy();
8
+ const { getByTitle } = render(<DxcFooter></DxcFooter>);
9
+ expect(getByTitle("DXC Logo")).toBeTruthy();
15
10
  });
16
11
 
17
12
  test("Footer renders with social links", () => {
@@ -5,25 +5,20 @@ import icon from "../../app/src/images/linkedin.svg";
5
5
 
6
6
  describe("Header component tests", () => {
7
7
  test("Header renders with default logo", () => {
8
- const { getByRole } = render(<DxcHeader></DxcHeader>);
9
- expect(getByRole("img")).toBeTruthy();
10
- });
11
-
12
- test("Header renders with logo", () => {
13
- const { getByRole } = render(<DxcHeader logoSrc={icon}></DxcHeader>);
14
- expect(getByRole("img")).toBeTruthy();
8
+ const { getByTitle } = render(<DxcHeader></DxcHeader>);
9
+ expect(getByTitle("DXC Logo")).toBeTruthy();
15
10
  });
16
11
 
17
12
  test("Call correct function on logo click", () => {
18
13
  const onClick = jest.fn();
19
- const { getByRole } = render(<DxcHeader onClick={onClick}></DxcHeader>);
20
- const logo = getByRole("img");
14
+ const { getByTitle } = render(<DxcHeader onClick={onClick}></DxcHeader>);
15
+ const logo = getByTitle("DXC Logo");
21
16
  fireEvent.click(logo);
22
17
  expect(onClick).toHaveBeenCalled();
23
18
  });
24
19
 
25
20
  test("Header renders with correct children", () => {
26
- //We need to force the offsetWidth value
21
+ // We need to force the offsetWidth value
27
22
  Object.defineProperty(HTMLElement.prototype, "offsetWidth", { configurable: true, value: 1024 });
28
23
 
29
24
  const { getByText } = render(<DxcHeader content={<p>header-child-text</p>}></DxcHeader>);
@@ -3,33 +3,81 @@ import { render } from "@testing-library/react";
3
3
  import DxcHeading from "../src/heading/Heading";
4
4
 
5
5
  describe("Heading component tests", () => {
6
- test("Footer renders with default level", () => {
7
- const { getByText } = render(<DxcHeading text="my-heading-test"></DxcHeading>);
6
+ test("Heading renders with default level", () => {
7
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test"></DxcHeading>);
8
8
  expect(getByText("my-heading-test")).toBeTruthy();
9
+ expect(getByRole("heading", { level: 1 })).toBeTruthy();
9
10
  });
10
11
 
11
- test("Footer renders with level 1", () => {
12
- const { getByText } = render(<DxcHeading text="my-heading-test" level={1}></DxcHeading>);
12
+ test("Heading renders with level 1", () => {
13
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={1}></DxcHeading>);
13
14
  expect(getByText("my-heading-test")).toBeTruthy();
15
+ expect(getByRole("heading", { level: 1 })).toBeTruthy();
14
16
  });
15
17
 
16
- test("Footer renders with level 2", () => {
17
- const { getByText } = render(<DxcHeading text="my-heading-test" level={2}></DxcHeading>);
18
+ test("Heading renders with level 2", () => {
19
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={2}></DxcHeading>);
18
20
  expect(getByText("my-heading-test")).toBeTruthy();
21
+ expect(getByRole("heading", { level: 2 })).toBeTruthy();
19
22
  });
20
23
 
21
- test("Footer renders with level 3", () => {
22
- const { getByText } = render(<DxcHeading text="my-heading-test" level={3}></DxcHeading>);
24
+ test("Heading renders with level 3", () => {
25
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={3}></DxcHeading>);
23
26
  expect(getByText("my-heading-test")).toBeTruthy();
27
+ expect(getByRole("heading", { level: 3 })).toBeTruthy();
24
28
  });
25
29
 
26
- test("Footer renders with level 4", () => {
27
- const { getByText } = render(<DxcHeading text="my-heading-test" level={4}></DxcHeading>);
30
+ test("Heading renders with level 4", () => {
31
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={4}></DxcHeading>);
28
32
  expect(getByText("my-heading-test")).toBeTruthy();
33
+ expect(getByRole("heading", { level: 4 })).toBeTruthy();
29
34
  });
30
35
 
31
- test("Footer renders with level 5", () => {
32
- const { getByText } = render(<DxcHeading text="my-heading-test" level={5}></DxcHeading>);
36
+ test("Heading renders with level 5", () => {
37
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={5}></DxcHeading>);
33
38
  expect(getByText("my-heading-test")).toBeTruthy();
39
+ expect(getByRole("heading", { level: 5 })).toBeTruthy();
40
+ });
41
+
42
+ test("Heading renders with default level and as h5", () => {
43
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" as="h5"></DxcHeading>);
44
+ expect(getByText("my-heading-test")).toBeTruthy();
45
+ expect(getByRole("heading", { level: 5 })).toBeTruthy();
46
+ });
47
+
48
+ test("Heading renders with level 1 and as h5", () => {
49
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={1} as="h5"></DxcHeading>);
50
+ expect(getByText("my-heading-test")).toBeTruthy();
51
+ expect(getByRole("heading", { level: 5 })).toBeTruthy();
52
+ });
53
+
54
+ test("Heading renders with level 2 and as h4", () => {
55
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={2} as="h4"></DxcHeading>);
56
+ expect(getByText("my-heading-test")).toBeTruthy();
57
+ expect(getByRole("heading", { level: 4 })).toBeTruthy();
58
+ });
59
+
60
+ test("Heading renders with level 3 and as h2", () => {
61
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={3} as="h2"></DxcHeading>);
62
+ expect(getByText("my-heading-test")).toBeTruthy();
63
+ expect(getByRole("heading", { level: 2 })).toBeTruthy();
64
+ });
65
+
66
+ test("Heading renders with level 4 and as h3", () => {
67
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={4} as="h3"></DxcHeading>);
68
+ expect(getByText("my-heading-test")).toBeTruthy();
69
+ expect(getByRole("heading", { level: 3 })).toBeTruthy();
70
+ });
71
+
72
+ test("Heading renders with level 5 as h4", () => {
73
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={5} as="h4"></DxcHeading>);
74
+ expect(getByText("my-heading-test")).toBeTruthy();
75
+ expect(getByRole("heading", { level: 4 })).toBeTruthy();
76
+ });
77
+
78
+ test("Heading renders with level 5 and invalid as", () => {
79
+ const { getByText, getByRole } = render(<DxcHeading text="my-heading-test" level={5} as="h4afdssf"></DxcHeading>);
80
+ expect(getByText("my-heading-test")).toBeTruthy();
81
+ expect(getByRole("heading", { level: 5 })).toBeTruthy();
34
82
  });
35
83
  });
@@ -1,45 +1,45 @@
1
1
  import React from "react";
2
2
  import { render, fireEvent } from "@testing-library/react";
3
3
  import userEvent from "@testing-library/user-event";
4
- import DxcNumber from "../src/number/Number";
4
+ import DxcNumberInput from "../src/number-input/NumberInput";
5
5
 
6
- describe("Number component tests", () => {
7
- test("Number renders with label", () => {
8
- const { getByText } = render(<DxcNumber label="Number label" />);
9
- expect(getByText("Number label")).toBeTruthy();
6
+ describe("Number input component tests", () => {
7
+ test("Number input renders with label", () => {
8
+ const { getByText } = render(<DxcNumberInput label="Number input label" />);
9
+ expect(getByText("Number input label")).toBeTruthy();
10
10
  });
11
11
 
12
- test("Number renders with helper text", () => {
13
- const { getByText } = render(<DxcNumber helperText="Helper text" />);
12
+ test("Number input renders with helper text", () => {
13
+ const { getByText } = render(<DxcNumberInput helperText="Helper text" />);
14
14
  expect(getByText("Helper text")).toBeTruthy();
15
15
  });
16
16
 
17
- test("Number renders with placeholder", () => {
18
- const { getByLabelText } = render(<DxcNumber label="Number label" placeholder="Placeholder" />);
17
+ test("Number input renders with placeholder", () => {
18
+ const { getByLabelText } = render(<DxcNumberInput label="Number label" placeholder="Placeholder" />);
19
19
  const number = getByLabelText("Number label");
20
20
  expect(number.getAttribute("placeholder")).toBe("Placeholder");
21
21
  });
22
22
 
23
- test("Number renders increment and decrement buttons", () => {
24
- const { queryAllByRole } = render(<DxcNumber label="Number label" />);
23
+ test("Number input renders increment and decrement buttons", () => {
24
+ const { queryAllByRole } = render(<DxcNumberInput label="Number label" />);
25
25
  expect(queryAllByRole("button").length).toBe(2);
26
26
  });
27
27
 
28
- test("Number is disabled", () => {
29
- const { getByLabelText } = render(<DxcNumber label="Number label" disabled />);
28
+ test("Number input is disabled", () => {
29
+ const { getByLabelText } = render(<DxcNumberInput label="Number label" disabled />);
30
30
  const number = getByLabelText("Number label");
31
31
  expect(number.disabled).toBeTruthy();
32
32
  });
33
33
 
34
- test("Number is optional", () => {
35
- const { getByText } = render(<DxcNumber label="Number label" optional />);
34
+ test("Number input is optional", () => {
35
+ const { getByText } = render(<DxcNumberInput label="Number label" optional />);
36
36
  expect(getByText("(Optional)")).toBeTruthy();
37
37
  });
38
38
 
39
- test("Number is not optional: required field, displays error if not filled in", () => {
39
+ test("Number input is not optional: required field, displays error if not filled in", () => {
40
40
  const onBlur = jest.fn();
41
41
  const onChange = jest.fn();
42
- const { getByRole } = render(<DxcNumber onBlur={onBlur} onChange={onChange} />);
42
+ const { getByRole } = render(<DxcNumberInput onBlur={onBlur} onChange={onChange} />);
43
43
  const input = getByRole("textbox");
44
44
 
45
45
  userEvent.type(input, "1");
@@ -52,20 +52,20 @@ describe("Number component tests", () => {
52
52
  });
53
53
 
54
54
  test("Suffix and prefix must be shown)", () => {
55
- const { getByText } = render(<DxcNumber label="Number label" prefix="+34" suffix="USD" />);
55
+ const { getByText } = render(<DxcNumberInput label="Number input label" prefix="+34" suffix="USD" />);
56
56
  expect(getByText("+34")).toBeTruthy();
57
57
  expect(getByText("USD")).toBeTruthy();
58
58
  });
59
59
 
60
- test("Invalid number renders error", () => {
61
- const { getByText } = render(<DxcNumber error="Error message." />);
60
+ test("Invalid number input renders error", () => {
61
+ const { getByText } = render(<DxcNumberInput error="Error message." />);
62
62
  expect(getByText("Error message.")).toBeTruthy();
63
63
  });
64
64
 
65
65
  test("onChange function is called correctly", () => {
66
66
  const onChange = jest.fn();
67
- const { getByLabelText } = render(<DxcNumber label="Number label" onChange={onChange} />);
68
- const number = getByLabelText("Number label");
67
+ const { getByLabelText } = render(<DxcNumberInput label="Number input label" onChange={onChange} />);
68
+ const number = getByLabelText("Number input label");
69
69
  userEvent.type(number, "t");
70
70
  expect(onChange).not.toHaveBeenCalledWith({ value: "t", error: null });
71
71
  expect(number.value).toBe("");
@@ -84,17 +84,17 @@ describe("Number component tests", () => {
84
84
  expect(error).toBe("Value must be greater than or equal to 5.");
85
85
  });
86
86
  const { getByLabelText } = render(
87
- <DxcNumber label="Number label" min={5} onBlur={onBlur} onChange={onChange} />
87
+ <DxcNumberInput label="Number input label" min={5} onBlur={onBlur} onChange={onChange} />
88
88
  );
89
- const number = getByLabelText("Number label");
89
+ const number = getByLabelText("Number input label");
90
90
 
91
91
  userEvent.type(number, "1");
92
92
  fireEvent.blur(number);
93
93
  });
94
94
 
95
95
  test("Cannot decrement the value if it is less than the min value", () => {
96
- const { getByLabelText, getAllByRole } = render(<DxcNumber label="Number label" min={5} />);
97
- const number = getByLabelText("Number label");
96
+ const { getByLabelText, getAllByRole } = render(<DxcNumberInput label="Number input label" min={5} />);
97
+ const number = getByLabelText("Number input label");
98
98
  userEvent.type(number, "1");
99
99
  fireEvent.blur(number);
100
100
  expect(number.value).toBe("1");
@@ -104,8 +104,8 @@ describe("Number component tests", () => {
104
104
  });
105
105
 
106
106
  test("Increment the value when it is less than the min value", () => {
107
- const { getByLabelText, getAllByRole } = render(<DxcNumber label="Number label" min={5} />);
108
- const number = getByLabelText("Number label");
107
+ const { getByLabelText, getAllByRole } = render(<DxcNumberInput label="Number input label" min={5} />);
108
+ const number = getByLabelText("Number input label");
109
109
  userEvent.type(number, "1");
110
110
  fireEvent.blur(number);
111
111
  expect(number.value).toBe("1");
@@ -117,10 +117,12 @@ describe("Number component tests", () => {
117
117
  test("Error message is shown if the value is greater than the max value", () => {
118
118
  const onChange = jest.fn();
119
119
  const onBlur = jest.fn();
120
- const { getByLabelText } = render(<DxcNumber label="Number label" max={10} onBlur={onBlur} onChange={onChange} />);
121
- const number = getByLabelText("Number label");
120
+ const { getByLabelText } = render(
121
+ <DxcNumberInput label="Number input label" max={10} onBlur={onBlur} onChange={onChange} />
122
+ );
123
+ const number = getByLabelText("Number input label");
122
124
 
123
- userEvent.type(number, "12");
125
+ userEvent.type(number, "12");
124
126
  expect(onChange).toHaveBeenCalledTimes(2);
125
127
  expect(onChange).toHaveBeenCalledWith({ value: "12", error: "Value must be less than or equal to 10." });
126
128
  fireEvent.blur(number);
@@ -129,8 +131,8 @@ describe("Number component tests", () => {
129
131
  });
130
132
 
131
133
  test("Cannot increment the value if it is greater than the max value", () => {
132
- const { getByLabelText, getAllByRole } = render(<DxcNumber label="Number label" max={10} />);
133
- const number = getByLabelText("Number label");
134
+ const { getByLabelText, getAllByRole } = render(<DxcNumberInput label="Number input label" max={10} />);
135
+ const number = getByLabelText("Number input label");
134
136
  userEvent.type(number, "12");
135
137
  fireEvent.blur(number);
136
138
  expect(number.value).toBe("12");
@@ -140,8 +142,8 @@ describe("Number component tests", () => {
140
142
  });
141
143
 
142
144
  test("Decrement the value when it is greater than the max value", () => {
143
- const { getByLabelText, getAllByRole } = render(<DxcNumber label="Number label" max={10} />);
144
- const number = getByLabelText("Number label");
145
+ const { getByLabelText, getAllByRole } = render(<DxcNumberInput label="Number input label" max={10} />);
146
+ const number = getByLabelText("Number input label");
145
147
  userEvent.type(number, "12");
146
148
  fireEvent.blur(number);
147
149
  expect(number.value).toBe("12");
@@ -151,8 +153,8 @@ describe("Number component tests", () => {
151
153
  });
152
154
 
153
155
  test("Increment and decrement the value with min and max values", () => {
154
- const { getByLabelText, getAllByRole } = render(<DxcNumber label="Number label" min={5} max={10} />);
155
- const number = getByLabelText("Number label");
156
+ const { getByLabelText, getAllByRole } = render(<DxcNumberInput label="Number input label" min={5} max={10} />);
157
+ const number = getByLabelText("Number input label");
156
158
  userEvent.type(number, "1");
157
159
  fireEvent.blur(number);
158
160
  expect(number.value).toBe("1");
@@ -173,8 +175,8 @@ describe("Number component tests", () => {
173
175
  });
174
176
 
175
177
  test("Increment and decrement the value with step", () => {
176
- const { getByLabelText, getAllByRole } = render(<DxcNumber label="Number label" step={5} />);
177
- const number = getByLabelText("Number label");
178
+ const { getByLabelText, getAllByRole } = render(<DxcNumberInput label="Number input label" step={5} />);
179
+ const number = getByLabelText("Number input label");
178
180
  userEvent.type(number, "10");
179
181
  fireEvent.blur(number);
180
182
  expect(number.value).toBe("10");
@@ -196,9 +198,9 @@ describe("Number component tests", () => {
196
198
  expect(error).toBe("Value must be greater than or equal to 5.");
197
199
  });
198
200
  const { getByLabelText, getAllByRole } = render(
199
- <DxcNumber label="Number label" min={5} max={20} step={8} onBlur={onBlur} />
201
+ <DxcNumberInput label="Number input label" min={5} max={20} step={8} onBlur={onBlur} />
200
202
  );
201
- const number = getByLabelText("Number label");
203
+ const number = getByLabelText("Number input label");
202
204
  userEvent.type(number, "1");
203
205
  fireEvent.blur(number);
204
206
  const increment = getAllByRole("button")[1];
@@ -220,8 +222,8 @@ describe("Number component tests", () => {
220
222
  });
221
223
 
222
224
  test("Increment and decrement the value with min, max and step using the arrows in keyboard", () => {
223
- const { getByLabelText } = render(<DxcNumber label="Number label" min={5} max={20} step={5} />);
224
- const number = getByLabelText("Number label");
225
+ const { getByLabelText } = render(<DxcNumberInput label="Number input label" min={5} max={20} step={5} />);
226
+ const number = getByLabelText("Number input label");
225
227
  userEvent.type(number, "1");
226
228
  fireEvent.keyDown(number, { keyCode: 38 });
227
229
  expect(number.value).toBe("5");
@@ -244,8 +246,8 @@ describe("Number component tests", () => {
244
246
  });
245
247
 
246
248
  test("Number has correct accesibility attributes", () => {
247
- const { getByLabelText, getAllByRole } = render(<DxcNumber label="Number label" />);
248
- const number = getByLabelText("Number label");
249
+ const { getByLabelText, getAllByRole } = render(<DxcNumberInput label="Number input label" />);
250
+ const number = getByLabelText("Number input label");
249
251
  expect(number.getAttribute("aria-autocomplete")).toBeNull();
250
252
  expect(number.getAttribute("aria-controls")).toBeNull();
251
253
  expect(number.getAttribute("aria-expanded")).toBeNull();
@@ -49,6 +49,8 @@ describe("Paginator component tests", () => {
49
49
 
50
50
  test("Paginator goToPage call correct function", () => {
51
51
  const onClick = jest.fn();
52
+ window.HTMLElement.prototype.scrollIntoView = () => {};
53
+ window.HTMLElement.prototype.scrollTo = () => {};
52
54
  const { getByText, getAllByRole, getByRole } = render(
53
55
  <DxcPaginator
54
56
  currentPage={1}
@@ -58,7 +60,7 @@ describe("Paginator component tests", () => {
58
60
  onPageChange={onClick}
59
61
  ></DxcPaginator>
60
62
  );
61
- const goToPageSelect = getAllByRole("button")[2];
63
+ const goToPageSelect = getAllByRole("combobox")[0];
62
64
  act(() => {
63
65
  userEvent.click(goToPageSelect);
64
66
  });
@@ -81,6 +83,8 @@ describe("Paginator component tests", () => {
81
83
 
82
84
  test("Call correct itemsPerPageFunction", () => {
83
85
  const onClick = jest.fn();
86
+ window.HTMLElement.prototype.scrollIntoView = () => {};
87
+ window.HTMLElement.prototype.scrollTo = () => {};
84
88
  const { getAllByText, getByText } = render(
85
89
  <DxcPaginator
86
90
  currentPage={1}
@@ -0,0 +1,83 @@
1
+ import React from "react";
2
+ import { render, fireEvent } from "@testing-library/react";
3
+ import userEvent from "@testing-library/user-event";
4
+ import DxcPasswordInput from "../src/password-input/PasswordInput";
5
+
6
+ describe("Password input component tests", () => {
7
+ test("Password input renders with label", () => {
8
+ const { getByText } = render(<DxcPasswordInput label="Password input label" />);
9
+ expect(getByText("Password input label")).toBeTruthy();
10
+ });
11
+
12
+ test("Password input renders with helper text", () => {
13
+ const { getByText } = render(<DxcPasswordInput helperText="Helper text" />);
14
+ expect(getByText("Helper text")).toBeTruthy();
15
+ });
16
+
17
+ test("Password input renders error", () => {
18
+ const { getByText } = render(<DxcPasswordInput error="Error message." />);
19
+ expect(getByText("Error message.")).toBeTruthy();
20
+ });
21
+
22
+ test("onChange function is called correctly", () => {
23
+ const onChange = jest.fn();
24
+ const { getByRole } = render(<DxcPasswordInput label="Password input" onChange={onChange} />);
25
+ const passwordInput = getByRole("textbox");
26
+ userEvent.type(passwordInput, "Pa$$w0rd");
27
+ expect(onChange).toHaveBeenCalledWith({ value: "P", error: null });
28
+ expect(passwordInput.value).toBe("Pa$$w0rd");
29
+ });
30
+
31
+ test("onBlur function is called correctly", () => {
32
+ const onBlur = jest.fn();
33
+ const { getByRole } = render(<DxcPasswordInput label="Password input" onBlur={onBlur} />);
34
+ const passwordInput = getByRole("textbox");
35
+ userEvent.type(passwordInput, "Pa$$w0rd");
36
+ fireEvent.blur(passwordInput);
37
+ expect(onBlur).toHaveBeenCalledWith({ value: "Pa$$w0rd", error: null });
38
+ expect(passwordInput.value).toBe("Pa$$w0rd");
39
+ });
40
+
41
+ test("Clear password input value", () => {
42
+ const { getAllByRole, getByRole } = render(<DxcPasswordInput label="Password input" clearable />);
43
+ const passwordInput = getByRole("textbox");
44
+ userEvent.type(passwordInput, "Pa$$w0rd");
45
+ expect(passwordInput.value).toBe("Pa$$w0rd");
46
+ const clearButton = getAllByRole("button")[0];
47
+ userEvent.click(clearButton);
48
+ expect(passwordInput.value).toBe("");
49
+ });
50
+
51
+ test("Non clearable password input has no clear icon", () => {
52
+ const { getAllByRole, getByRole } = render(<DxcPasswordInput label="Password input" />);
53
+ const passwordInput = getByRole("textbox");
54
+ userEvent.type(passwordInput, "Pa$$w0rd");
55
+ expect(passwordInput.value).toBe("Pa$$w0rd");
56
+ const buttons = getAllByRole("button");
57
+ expect(buttons.length).toBe(1);
58
+ });
59
+
60
+ test("Show/hide password input button works correctly", () => {
61
+ const { getAllByRole, getByRole } = render(<DxcPasswordInput label="Password input" clearable />);
62
+ const passwordInput = getByRole("textbox");
63
+ userEvent.type(passwordInput, "Pa$$w0rd");
64
+ expect(passwordInput.value).toBe("Pa$$w0rd");
65
+ expect(passwordInput.type).toBe("password");
66
+ const showButton = getAllByRole("button")[1];
67
+ userEvent.click(showButton);
68
+ expect(passwordInput.type).toBe("text");
69
+ });
70
+
71
+ test("Password input has correct accesibility attributes", () => {
72
+ const { getByRole } = render(<DxcPasswordInput label="Password input" />);
73
+ const passwordInput = getByRole("textbox");
74
+ expect(passwordInput.getAttribute("aria-autocomplete")).toBeNull();
75
+ expect(passwordInput.getAttribute("aria-controls")).toBeNull();
76
+ const showButton = getByRole("button");
77
+ expect(showButton.getAttribute("aria-expanded")).toBe("false");
78
+ expect(showButton.getAttribute("aria-label")).toBe("Show");
79
+ userEvent.click(showButton);
80
+ expect(showButton.getAttribute("aria-expanded")).toBe("true");
81
+ expect(showButton.getAttribute("aria-label")).toBe("Hide");
82
+ });
83
+ });