@dxc-technology/halstack-react 0.0.0-8d633bd → 0.0.0-9196773
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ThemeContext.js +69 -61
- package/dist/alert/Alert.js +4 -4
- package/dist/alert/index.d.ts +30 -5
- package/dist/common/variables.js +199 -47
- package/dist/date/Date.js +4 -6
- package/dist/{new-date/NewDate.js → date-input/DateInput.js} +69 -72
- package/dist/date-input/index.d.ts +95 -0
- package/dist/file-input/FileInput.js +11 -8
- package/dist/file-input/FileItem.js +25 -8
- package/dist/file-input/index.d.ts +81 -0
- package/dist/input-text/InputText.js +3 -3
- package/dist/main.d.ts +7 -1
- package/dist/main.js +22 -14
- package/dist/new-select/NewSelect.js +836 -0
- package/dist/new-select/index.d.ts +53 -0
- package/dist/new-textarea/NewTextarea.js +52 -48
- package/dist/new-textarea/index.d.ts +117 -0
- package/dist/{number/Number.js → number-input/NumberInput.js} +9 -11
- package/dist/{number/NumberContext.js → number-input/NumberInputContext.js} +2 -2
- package/dist/number-input/index.d.ts +113 -0
- package/dist/{password/Password.js → password-input/PasswordInput.js} +11 -13
- package/dist/password-input/index.d.ts +94 -0
- package/dist/slider/Slider.js +89 -14
- package/dist/{new-input-text/NewInputText.js → text-input/TextInput.js} +129 -135
- package/dist/text-input/index.d.ts +135 -0
- package/dist/toggle-group/ToggleGroup.js +132 -28
- package/dist/upload/Upload.js +3 -3
- package/dist/upload/readme.md +2 -2
- package/package.json +1 -1
- package/test/{NewDate.test.js → DateInput.test.js} +66 -27
- package/test/FileInput.test.js +164 -2
- package/test/InputText.test.js +24 -16
- package/test/NewTextarea.test.js +71 -128
- package/test/{Number.test.js → NumberInput.test.js} +84 -66
- package/test/PasswordInput.test.js +83 -0
- package/test/{NewInputText.test.js → TextInput.test.js} +134 -268
- package/test/ToggleGroup.test.js +5 -1
- package/test/Upload.test.js +5 -5
- package/dist/footer/Footer.stories.js +0 -94
- package/dist/input-text/InputText.stories.js +0 -209
- package/dist/password/styles.css +0 -3
- package/dist/slider/Slider.stories.js +0 -241
- package/test/Password.test.js +0 -76
package/test/FileInput.test.js
CHANGED
|
@@ -1,11 +1,29 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { render } from "@testing-library/react";
|
|
2
|
+
import { render, fireEvent, waitFor } from "@testing-library/react";
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
|
|
5
5
|
import DxcFileInput from "../src/file-input/FileInput";
|
|
6
6
|
|
|
7
7
|
describe("FileInput component tests", () => {
|
|
8
|
-
|
|
8
|
+
const file1 = new File(["file1"], "file1.png", { type: "image/png" });
|
|
9
|
+
const file2 = new File(["file2"], "file2.txt", {
|
|
10
|
+
type: "text/plain",
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
const files = [
|
|
14
|
+
{
|
|
15
|
+
error: null,
|
|
16
|
+
preview: null,
|
|
17
|
+
file: file1,
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
error: "Error message",
|
|
21
|
+
preview: null,
|
|
22
|
+
file: file2,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
|
|
26
|
+
test("Renders with correct labels and helper text in file mode", () => {
|
|
9
27
|
const { getByText } = render(<DxcFileInput label="File input label" helperText="File input helper text" />);
|
|
10
28
|
expect(getByText("File input label")).toBeTruthy();
|
|
11
29
|
expect(getByText("File input helper text")).toBeTruthy();
|
|
@@ -36,4 +54,148 @@ describe("FileInput component tests", () => {
|
|
|
36
54
|
const button = getByRole("button");
|
|
37
55
|
expect(button.disabled).toBeTruthy();
|
|
38
56
|
});
|
|
57
|
+
test("Renders file items passed in value when multiple file input", () => {
|
|
58
|
+
const callbackFile = jest.fn();
|
|
59
|
+
const { getByText } = render(
|
|
60
|
+
<DxcFileInput
|
|
61
|
+
label="File input label"
|
|
62
|
+
helperText="File input helper text"
|
|
63
|
+
value={files}
|
|
64
|
+
callbackFile={callbackFile}
|
|
65
|
+
/>
|
|
66
|
+
);
|
|
67
|
+
expect(getByText("file1.png")).toBeTruthy();
|
|
68
|
+
expect(getByText("file2.txt")).toBeTruthy();
|
|
69
|
+
expect(getByText("Error message")).toBeTruthy();
|
|
70
|
+
});
|
|
71
|
+
test("Renders file items when single file input", () => {
|
|
72
|
+
const callbackFile = jest.fn();
|
|
73
|
+
const { getByText } = render(
|
|
74
|
+
<DxcFileInput
|
|
75
|
+
label="File input label"
|
|
76
|
+
helperText="File input helper text"
|
|
77
|
+
multiple={false}
|
|
78
|
+
value={files}
|
|
79
|
+
callbackFile={callbackFile}
|
|
80
|
+
/>
|
|
81
|
+
);
|
|
82
|
+
expect(getByText("file1.png")).toBeTruthy();
|
|
83
|
+
expect(getByText("file2.txt")).toBeTruthy();
|
|
84
|
+
expect(getByText("Error message")).toBeTruthy();
|
|
85
|
+
});
|
|
86
|
+
test("Add file item when single file input", async () => {
|
|
87
|
+
const newFile = new File(["newFile"], "newFile.pdf", { type: "pdf" });
|
|
88
|
+
const callbackFile = jest.fn();
|
|
89
|
+
const { getByText, getByLabelText } = render(
|
|
90
|
+
<DxcFileInput
|
|
91
|
+
label="File input label"
|
|
92
|
+
helperText="File input helper text"
|
|
93
|
+
value={files}
|
|
94
|
+
callbackFile={callbackFile}
|
|
95
|
+
multiple={false}
|
|
96
|
+
/>
|
|
97
|
+
);
|
|
98
|
+
expect(getByText("file1.png")).toBeTruthy();
|
|
99
|
+
expect(getByText("file2.txt")).toBeTruthy();
|
|
100
|
+
expect(getByText("Error message")).toBeTruthy();
|
|
101
|
+
const inputFile = getByLabelText("File input label", { hidden: true });
|
|
102
|
+
fireEvent.change(inputFile, { target: { files: [newFile] } });
|
|
103
|
+
await waitFor(() => {
|
|
104
|
+
expect(callbackFile).toHaveBeenCalledWith([
|
|
105
|
+
{
|
|
106
|
+
error: undefined,
|
|
107
|
+
file: newFile,
|
|
108
|
+
preview: (
|
|
109
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
|
|
110
|
+
<path fill="none" d="M0 0h24v24H0V0z" />
|
|
111
|
+
<path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zM6 20V4h7v5h5v11H6z" />
|
|
112
|
+
</svg>
|
|
113
|
+
),
|
|
114
|
+
},
|
|
115
|
+
]);
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
test("Renders file items and delete one file", async () => {
|
|
119
|
+
const callbackFile = jest.fn();
|
|
120
|
+
const { getByText, getAllByRole } = render(
|
|
121
|
+
<DxcFileInput
|
|
122
|
+
label="File input label"
|
|
123
|
+
helperText="File input helper text"
|
|
124
|
+
value={files}
|
|
125
|
+
callbackFile={callbackFile}
|
|
126
|
+
/>
|
|
127
|
+
);
|
|
128
|
+
expect(getByText("file1.png")).toBeTruthy();
|
|
129
|
+
expect(getByText("file2.txt")).toBeTruthy();
|
|
130
|
+
expect(getByText("Error message")).toBeTruthy();
|
|
131
|
+
const removeBtn = getAllByRole("button")[1];
|
|
132
|
+
userEvent.click(removeBtn);
|
|
133
|
+
await waitFor(() => {
|
|
134
|
+
expect(callbackFile).toHaveBeenCalledWith([{ error: "Error message", file: file2, preview: null }]);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
test("CallbackFile is correctly called", async () => {
|
|
139
|
+
const newFile = new File(["newFile"], "newFile.pdf", { type: "pdf" });
|
|
140
|
+
const callbackFile = jest.fn();
|
|
141
|
+
const { getByLabelText } = render(
|
|
142
|
+
<DxcFileInput
|
|
143
|
+
label="File input label"
|
|
144
|
+
helperText="File input helper text"
|
|
145
|
+
value={files}
|
|
146
|
+
callbackFile={callbackFile}
|
|
147
|
+
/>
|
|
148
|
+
);
|
|
149
|
+
const inputFile = getByLabelText("File input label", { hidden: true });
|
|
150
|
+
fireEvent.change(inputFile, { target: { files: [newFile] } });
|
|
151
|
+
await waitFor(() => {
|
|
152
|
+
expect(callbackFile).toHaveBeenCalledWith([
|
|
153
|
+
{ error: null, preview: null, file: file1 },
|
|
154
|
+
{ error: "Error message", preview: null, file: file2 },
|
|
155
|
+
{
|
|
156
|
+
error: undefined,
|
|
157
|
+
file: newFile,
|
|
158
|
+
preview: (
|
|
159
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
|
|
160
|
+
<path fill="none" d="M0 0h24v24H0V0z" />
|
|
161
|
+
<path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zM6 20V4h7v5h5v11H6z" />
|
|
162
|
+
</svg>
|
|
163
|
+
),
|
|
164
|
+
},
|
|
165
|
+
]);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
test("Callback called correctly when a file size does not comply minSize or maxSize", async () => {
|
|
170
|
+
const newFile = new File(["newFile"], "newFile.pdf", { type: "pdf" });
|
|
171
|
+
const callbackFile = jest.fn();
|
|
172
|
+
const { getByLabelText } = render(
|
|
173
|
+
<DxcFileInput
|
|
174
|
+
label="File input label"
|
|
175
|
+
helperText="File input helper text"
|
|
176
|
+
minSize={1000}
|
|
177
|
+
maxSize={20000}
|
|
178
|
+
value={files}
|
|
179
|
+
callbackFile={callbackFile}
|
|
180
|
+
/>
|
|
181
|
+
);
|
|
182
|
+
const inputFile = getByLabelText("File input label", { hidden: true });
|
|
183
|
+
fireEvent.change(inputFile, { target: { files: [newFile] } });
|
|
184
|
+
await waitFor(() => {
|
|
185
|
+
expect(callbackFile).toHaveBeenCalledWith([
|
|
186
|
+
{ error: null, preview: null, file: file1 },
|
|
187
|
+
{ error: "Error message", preview: null, file: file2 },
|
|
188
|
+
{
|
|
189
|
+
error: "File size must be greater than min size.",
|
|
190
|
+
file: newFile,
|
|
191
|
+
preview: (
|
|
192
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor">
|
|
193
|
+
<path fill="none" d="M0 0h24v24H0V0z" />
|
|
194
|
+
<path d="M14 2H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2-.9 2-2V8l-6-6zM6 20V4h7v5h5v11H6z" />
|
|
195
|
+
</svg>
|
|
196
|
+
),
|
|
197
|
+
},
|
|
198
|
+
]);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
39
201
|
});
|
package/test/InputText.test.js
CHANGED
|
@@ -4,7 +4,7 @@ import userEvent from "@testing-library/user-event";
|
|
|
4
4
|
|
|
5
5
|
import icon from "../../app/src/images/invision.svg";
|
|
6
6
|
|
|
7
|
-
import
|
|
7
|
+
import V3DxcInputText from "../src/input-text/InputText";
|
|
8
8
|
|
|
9
9
|
const countries = ["Albania", "Andorra", "Armenia", "Austria", "Azerbaijan"];
|
|
10
10
|
|
|
@@ -28,13 +28,13 @@ jest.mock("popper.js", () => {
|
|
|
28
28
|
|
|
29
29
|
describe("InputText component tests", () => {
|
|
30
30
|
test("Input renders with correct label", () => {
|
|
31
|
-
const { getByText } = render(<
|
|
31
|
+
const { getByText } = render(<V3DxcInputText label="Input label" />);
|
|
32
32
|
expect(getByText("Input label")).toBeTruthy();
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
test("onChange function is called correctly", () => {
|
|
36
36
|
const onChange = jest.fn();
|
|
37
|
-
const { getByRole } = render(<
|
|
37
|
+
const { getByRole } = render(<V3DxcInputText label="Input label" onChange={onChange} />);
|
|
38
38
|
const input = getByRole("textbox");
|
|
39
39
|
userEvent.type(input, "20000");
|
|
40
40
|
expect(onChange).toHaveBeenCalled();
|
|
@@ -44,7 +44,7 @@ describe("InputText component tests", () => {
|
|
|
44
44
|
const onBlur = jest.fn();
|
|
45
45
|
const onChange = jest.fn();
|
|
46
46
|
|
|
47
|
-
const { getByRole } = render(<
|
|
47
|
+
const { getByRole } = render(<V3DxcInputText label="Input label" onChange={onChange} onBlur={onBlur} />);
|
|
48
48
|
const input = getByRole("textbox");
|
|
49
49
|
userEvent.type(input, "Test value");
|
|
50
50
|
fireEvent.blur(input);
|
|
@@ -54,7 +54,7 @@ describe("InputText component tests", () => {
|
|
|
54
54
|
|
|
55
55
|
test("Uncontrolled component", () => {
|
|
56
56
|
const onChange = jest.fn();
|
|
57
|
-
const { getByRole } = render(<
|
|
57
|
+
const { getByRole } = render(<V3DxcInputText label="Input label" onChange={onChange} />);
|
|
58
58
|
const input = getByRole("textbox");
|
|
59
59
|
userEvent.type(input, "20000");
|
|
60
60
|
expect(onChange).toHaveBeenCalled();
|
|
@@ -66,7 +66,7 @@ describe("InputText component tests", () => {
|
|
|
66
66
|
const onChange = jest.fn();
|
|
67
67
|
const onBlur = jest.fn();
|
|
68
68
|
const { getByRole } = render(
|
|
69
|
-
<
|
|
69
|
+
<V3DxcInputText label="Input label" value="Test value" onChange={onChange} onBlur={onBlur} />
|
|
70
70
|
);
|
|
71
71
|
const input = getByRole("textbox");
|
|
72
72
|
userEvent.type(input, "20000");
|
|
@@ -78,14 +78,14 @@ describe("InputText component tests", () => {
|
|
|
78
78
|
});
|
|
79
79
|
test("Prefix icon onClick", () => {
|
|
80
80
|
const onClick = jest.fn();
|
|
81
|
-
const { getByRole } = render(<
|
|
81
|
+
const { getByRole } = render(<V3DxcInputText label="Input label" prefixIconSrc={icon} onClickPrefix={onClick} />);
|
|
82
82
|
const prefixIcon = getByRole("img");
|
|
83
83
|
userEvent.click(prefixIcon);
|
|
84
84
|
expect(onClick).toHaveBeenCalled();
|
|
85
85
|
});
|
|
86
86
|
test("Suffix icon onClick", () => {
|
|
87
87
|
const onClick = jest.fn();
|
|
88
|
-
const { getByRole } = render(<
|
|
88
|
+
const { getByRole } = render(<V3DxcInputText label="Input label" suffixIconSrc={icon} onClickSuffix={onClick} />);
|
|
89
89
|
const suffixIcon = getByRole("img");
|
|
90
90
|
userEvent.click(suffixIcon);
|
|
91
91
|
expect(onClick).toHaveBeenCalled();
|
|
@@ -96,7 +96,7 @@ describe("Autocomplete component Synchronous tests", () => {
|
|
|
96
96
|
test("Autocomplete no matches found is shown", async () => {
|
|
97
97
|
const onChangeAtocomplete = jest.fn();
|
|
98
98
|
render(
|
|
99
|
-
<
|
|
99
|
+
<V3DxcInputText label="Autocomplete Countries" autocompleteOptions={countries} onChange={onChangeAtocomplete} />
|
|
100
100
|
);
|
|
101
101
|
const input = screen.getByRole("textbox");
|
|
102
102
|
fireEvent.focus(input);
|
|
@@ -108,7 +108,7 @@ describe("Autocomplete component Synchronous tests", () => {
|
|
|
108
108
|
test("Autocomplete suggestions are shown", async () => {
|
|
109
109
|
const onChangeAtocomplete = jest.fn();
|
|
110
110
|
render(
|
|
111
|
-
<
|
|
111
|
+
<V3DxcInputText label="Autocomplete Countries" autocompleteOptions={countries} onChange={onChangeAtocomplete} />
|
|
112
112
|
);
|
|
113
113
|
const input = screen.getByRole("textbox");
|
|
114
114
|
fireEvent.focus(input);
|
|
@@ -118,7 +118,7 @@ describe("Autocomplete component Synchronous tests", () => {
|
|
|
118
118
|
test("Autocomplete UNCONTROLLED suggestion selected", async () => {
|
|
119
119
|
const onChangeAtocomplete = jest.fn();
|
|
120
120
|
render(
|
|
121
|
-
<
|
|
121
|
+
<V3DxcInputText label="Autocomplete Countries" autocompleteOptions={countries} onChange={onChangeAtocomplete} />
|
|
122
122
|
);
|
|
123
123
|
const input = screen.getByRole("textbox");
|
|
124
124
|
fireEvent.focus(input);
|
|
@@ -138,7 +138,7 @@ describe("Autocomplete component Synchronous tests", () => {
|
|
|
138
138
|
test("Autocomplete CONTROLLED suggestions selected", async () => {
|
|
139
139
|
const onChangeAtocomplete = jest.fn();
|
|
140
140
|
render(
|
|
141
|
-
<
|
|
141
|
+
<V3DxcInputText
|
|
142
142
|
label="Autocomplete Countries"
|
|
143
143
|
value="Andorra"
|
|
144
144
|
autocompleteOptions={countries}
|
|
@@ -165,7 +165,11 @@ describe("InputText component Asynchronous Autocomplete tests", () => {
|
|
|
165
165
|
|
|
166
166
|
const onChangeAtocomplete = jest.fn();
|
|
167
167
|
render(
|
|
168
|
-
<
|
|
168
|
+
<V3DxcInputText
|
|
169
|
+
label="Autocomplete Countries"
|
|
170
|
+
autocompleteOptions={callbackFunc}
|
|
171
|
+
onChange={onChangeAtocomplete}
|
|
172
|
+
/>
|
|
169
173
|
);
|
|
170
174
|
const input = screen.getByRole("textbox");
|
|
171
175
|
fireEvent.focus(input);
|
|
@@ -178,7 +182,11 @@ describe("InputText component Asynchronous Autocomplete tests", () => {
|
|
|
178
182
|
const callbackFunc = jest.fn(() => new Promise((resolve) => setTimeout(resolve(["Italy", "Spain"]), 1000)));
|
|
179
183
|
const onChangeAtocomplete = jest.fn();
|
|
180
184
|
render(
|
|
181
|
-
<
|
|
185
|
+
<V3DxcInputText
|
|
186
|
+
label="Autocomplete Countries"
|
|
187
|
+
onChange={onChangeAtocomplete}
|
|
188
|
+
autocompleteOptions={callbackFunc}
|
|
189
|
+
/>
|
|
182
190
|
);
|
|
183
191
|
const input = screen.getByRole("textbox");
|
|
184
192
|
fireEvent.focus(input);
|
|
@@ -198,7 +206,7 @@ describe("InputText component Asynchronous Autocomplete tests", () => {
|
|
|
198
206
|
const callbackFunc = jest.fn(() => new Promise((resolve) => setTimeout(resolve(["Italy", "Spain"]), 3000)));
|
|
199
207
|
const onChangeAtocomplete = jest.fn();
|
|
200
208
|
render(
|
|
201
|
-
<
|
|
209
|
+
<V3DxcInputText
|
|
202
210
|
label="Autocomplete Countries"
|
|
203
211
|
value="test value"
|
|
204
212
|
onChange={onChangeAtocomplete}
|
|
@@ -224,7 +232,7 @@ describe("InputText component Asynchronous Autocomplete tests", () => {
|
|
|
224
232
|
const onChangeAtocomplete = jest.fn();
|
|
225
233
|
|
|
226
234
|
render(
|
|
227
|
-
<
|
|
235
|
+
<V3DxcInputText
|
|
228
236
|
label="Autocomplete Countries"
|
|
229
237
|
value="test value"
|
|
230
238
|
onChange={onChangeAtocomplete}
|
package/test/NewTextarea.test.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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
4
|
import DxcNewTextarea from "../src/new-textarea/NewTextarea";
|
|
5
5
|
|
|
6
6
|
describe("NewTextarea component tests", () => {
|
|
@@ -14,7 +14,9 @@ describe("NewTextarea component tests", () => {
|
|
|
14
14
|
expect(getByText("Example helper text")).toBeTruthy();
|
|
15
15
|
});
|
|
16
16
|
test("Renders with correct label and optional", () => {
|
|
17
|
-
const { getByText, getByRole } = render(
|
|
17
|
+
const { getByText, getByRole } = render(
|
|
18
|
+
<DxcNewTextarea label="Example label" helperText="Example helper text" optional />
|
|
19
|
+
);
|
|
18
20
|
const textarea = getByRole("textbox");
|
|
19
21
|
expect(getByText("Example label")).toBeTruthy();
|
|
20
22
|
expect(getByText("(Optional)")).toBeTruthy();
|
|
@@ -45,29 +47,42 @@ describe("NewTextarea component tests", () => {
|
|
|
45
47
|
expect(textarea.getAttribute("aria-describedBy")).toBeNull();
|
|
46
48
|
expect(textarea.getAttribute("aria-required")).toBe("true");
|
|
47
49
|
});
|
|
48
|
-
test("
|
|
50
|
+
test("Not optional constraint (onBlur)", () => {
|
|
49
51
|
const onChange = jest.fn();
|
|
50
52
|
const onBlur = jest.fn();
|
|
51
|
-
const { getByLabelText
|
|
52
|
-
<DxcNewTextarea
|
|
53
|
-
label="Example label"
|
|
54
|
-
placeholder="Placeholder"
|
|
55
|
-
onChange={onChange}
|
|
56
|
-
onBlur={onBlur}
|
|
57
|
-
/>
|
|
53
|
+
const { getByLabelText } = render(
|
|
54
|
+
<DxcNewTextarea label="Example label" placeholder="Placeholder" onChange={onChange} onBlur={onBlur} />
|
|
58
55
|
);
|
|
59
56
|
const textarea = getByLabelText("Example label");
|
|
57
|
+
|
|
60
58
|
fireEvent.focus(textarea);
|
|
61
59
|
fireEvent.blur(textarea);
|
|
62
|
-
expect(
|
|
60
|
+
expect(onBlur).toHaveBeenCalled();
|
|
61
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "", error: "This field is required. Please, enter a value." });
|
|
63
62
|
fireEvent.change(textarea, { target: { value: "Test" } });
|
|
64
63
|
fireEvent.blur(textarea);
|
|
65
|
-
expect(
|
|
64
|
+
expect(onBlur).toHaveBeenCalled();
|
|
65
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "Test", error: null });
|
|
66
66
|
});
|
|
67
|
-
test("
|
|
67
|
+
test("Not optional constraint (onChange)", () => {
|
|
68
|
+
const onChange = jest.fn();
|
|
69
|
+
const { getByLabelText } = render(
|
|
70
|
+
<DxcNewTextarea label="Example label" placeholder="Placeholder" onChange={onChange} />
|
|
71
|
+
);
|
|
72
|
+
const textarea = getByLabelText("Example label");
|
|
73
|
+
|
|
74
|
+
fireEvent.focus(textarea);
|
|
75
|
+
fireEvent.change(textarea, { target: { value: "Test" } });
|
|
76
|
+
expect(onChange).toHaveBeenCalled();
|
|
77
|
+
expect(onChange).toHaveBeenCalledWith({ value: "Test", error: null });
|
|
78
|
+
userEvent.clear(textarea);
|
|
79
|
+
expect(onChange).toHaveBeenCalled();
|
|
80
|
+
expect(onChange).toHaveBeenCalledWith({ value: "", error: "This field is required. Please, enter a value." });
|
|
81
|
+
});
|
|
82
|
+
test("Pattern constraint", () => {
|
|
68
83
|
const onChange = jest.fn();
|
|
69
84
|
const onBlur = jest.fn();
|
|
70
|
-
const { getByLabelText
|
|
85
|
+
const { getByLabelText } = render(
|
|
71
86
|
<DxcNewTextarea
|
|
72
87
|
label="Example label"
|
|
73
88
|
placeholder="Placeholder"
|
|
@@ -78,17 +93,25 @@ describe("NewTextarea component tests", () => {
|
|
|
78
93
|
/>
|
|
79
94
|
);
|
|
80
95
|
const textarea = getByLabelText("Example label");
|
|
96
|
+
|
|
81
97
|
fireEvent.change(textarea, { target: { value: "pattern test" } });
|
|
98
|
+
expect(onChange).toHaveBeenCalled();
|
|
99
|
+
expect(onChange).toHaveBeenCalledWith({ value: "pattern test", error: "Please match the format requested." });
|
|
82
100
|
fireEvent.blur(textarea);
|
|
83
|
-
expect(
|
|
101
|
+
expect(onBlur).toHaveBeenCalled();
|
|
102
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "pattern test", error: "Please match the format requested." });
|
|
103
|
+
userEvent.clear(textarea);
|
|
84
104
|
fireEvent.change(textarea, { target: { value: "pattern4&" } });
|
|
105
|
+
expect(onChange).toHaveBeenCalled();
|
|
106
|
+
expect(onChange).toHaveBeenCalledWith({ value: "pattern4&", error: null });
|
|
85
107
|
fireEvent.blur(textarea);
|
|
86
|
-
expect(
|
|
108
|
+
expect(onBlur).toHaveBeenCalled();
|
|
109
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "pattern4&", error: null });
|
|
87
110
|
});
|
|
88
|
-
test("
|
|
111
|
+
test("Length constraint", () => {
|
|
89
112
|
const onChange = jest.fn();
|
|
90
113
|
const onBlur = jest.fn();
|
|
91
|
-
const { getByLabelText
|
|
114
|
+
const { getByLabelText } = render(
|
|
92
115
|
<DxcNewTextarea
|
|
93
116
|
label="Example label"
|
|
94
117
|
placeholder="Placeholder"
|
|
@@ -99,14 +122,22 @@ describe("NewTextarea component tests", () => {
|
|
|
99
122
|
/>
|
|
100
123
|
);
|
|
101
124
|
const textarea = getByLabelText("Example label");
|
|
125
|
+
|
|
102
126
|
fireEvent.change(textarea, { target: { value: "test" } });
|
|
127
|
+
expect(onChange).toHaveBeenCalled();
|
|
128
|
+
expect(onChange).toHaveBeenCalledWith({ value: "test", error: "Min length 5, max length 10." });
|
|
103
129
|
fireEvent.blur(textarea);
|
|
104
|
-
expect(
|
|
105
|
-
|
|
130
|
+
expect(onBlur).toHaveBeenCalled();
|
|
131
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "test", error: "Min length 5, max length 10." });
|
|
132
|
+
userEvent.clear(textarea);
|
|
133
|
+
fireEvent.change(textarea, { target: { value: "length" } });
|
|
134
|
+
expect(onChange).toHaveBeenCalled();
|
|
135
|
+
expect(onChange).toHaveBeenCalledWith({ value: "length", error: null });
|
|
106
136
|
fireEvent.blur(textarea);
|
|
107
|
-
expect(
|
|
137
|
+
expect(onBlur).toHaveBeenCalled();
|
|
138
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "length", error: null });
|
|
108
139
|
});
|
|
109
|
-
test("
|
|
140
|
+
test("Pattern and length constraints", () => {
|
|
110
141
|
const onChange = jest.fn();
|
|
111
142
|
const onBlur = jest.fn();
|
|
112
143
|
const { getByLabelText, getByText, queryByText } = render(
|
|
@@ -121,101 +152,25 @@ describe("NewTextarea component tests", () => {
|
|
|
121
152
|
/>
|
|
122
153
|
);
|
|
123
154
|
const textarea = getByLabelText("Example label");
|
|
155
|
+
|
|
124
156
|
fireEvent.change(textarea, { target: { value: "test" } });
|
|
157
|
+
expect(onChange).toHaveBeenCalled();
|
|
158
|
+
expect(onChange).toHaveBeenCalledWith({ value: "test", error: "Min length 5, max length 10." });
|
|
125
159
|
fireEvent.blur(textarea);
|
|
126
|
-
expect(
|
|
127
|
-
|
|
128
|
-
fireEvent.
|
|
129
|
-
expect(
|
|
130
|
-
|
|
131
|
-
fireEvent.blur(textarea);
|
|
132
|
-
expect(queryByText("Please match the format requested.")).toBeFalsy();
|
|
133
|
-
});
|
|
134
|
-
test("Non Strict mode - Not optional constraint", () => {
|
|
135
|
-
const onChange = jest.fn((value) => {
|
|
136
|
-
expect(value).toBe("");
|
|
137
|
-
});
|
|
138
|
-
const onBlur = jest.fn(({ value, error }) => {
|
|
139
|
-
expect(value).toBe("");
|
|
140
|
-
expect(error).toBe("This field is required. Please, enter a value.");
|
|
141
|
-
});
|
|
142
|
-
const { getByLabelText } = render(
|
|
143
|
-
<DxcNewTextarea
|
|
144
|
-
label="Example label"
|
|
145
|
-
placeholder="Placeholder"
|
|
146
|
-
onChange={onChange}
|
|
147
|
-
onBlur={onBlur}
|
|
148
|
-
/>
|
|
149
|
-
);
|
|
150
|
-
const textarea = getByLabelText("Example label");
|
|
151
|
-
fireEvent.focus(textarea);
|
|
152
|
-
fireEvent.blur(textarea);
|
|
153
|
-
});
|
|
154
|
-
test("Non Strict mode - Pattern constraint", () => {
|
|
155
|
-
const onChange = jest.fn((value) => {
|
|
156
|
-
expect(value).toBe("Example value");
|
|
157
|
-
});
|
|
158
|
-
const onBlur = jest.fn(({ value, error }) => {
|
|
159
|
-
expect(value).toBe("Example value");
|
|
160
|
-
expect(error).toBe("Please match the format requested.");
|
|
161
|
-
});
|
|
162
|
-
const { getByLabelText } = render(
|
|
163
|
-
<DxcNewTextarea
|
|
164
|
-
label="Example label"
|
|
165
|
-
placeholder="Placeholder"
|
|
166
|
-
onChange={onChange}
|
|
167
|
-
onBlur={onBlur}
|
|
168
|
-
margin={{ left: "medium", right: "medium" }}
|
|
169
|
-
pattern='^.*(?=.*[a-zA-Z])(?=.*\d)(?=.*[!&$%&? "]).*$'
|
|
170
|
-
/>
|
|
171
|
-
);
|
|
172
|
-
const textarea = getByLabelText("Example label");
|
|
173
|
-
fireEvent.change(textarea, { target: { value: "Example value" } });
|
|
174
|
-
fireEvent.blur(textarea);
|
|
175
|
-
});
|
|
176
|
-
test("Non Strict mode - Length constraint", () => {
|
|
177
|
-
const onChange = jest.fn((value) => {
|
|
178
|
-
expect(value).toBe("Example value");
|
|
179
|
-
});
|
|
180
|
-
const onBlur = jest.fn(({ value, error }) => {
|
|
181
|
-
expect(value).toBe("Example value");
|
|
182
|
-
expect(error).toBe("Min length 5, max length 10.");
|
|
183
|
-
});
|
|
184
|
-
const { getByLabelText } = render(
|
|
185
|
-
<DxcNewTextarea
|
|
186
|
-
label="Example label"
|
|
187
|
-
placeholder="Placeholder"
|
|
188
|
-
onChange={onChange}
|
|
189
|
-
onBlur={onBlur}
|
|
190
|
-
margin={{ left: "medium", right: "medium" }}
|
|
191
|
-
length={{ min: 5, max: 10 }}
|
|
192
|
-
/>
|
|
193
|
-
);
|
|
194
|
-
const textarea = getByLabelText("Example label");
|
|
195
|
-
fireEvent.change(textarea, { target: { value: "Example value" } });
|
|
160
|
+
expect(onBlur).toHaveBeenCalled();
|
|
161
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "test", error: "Min length 5, max length 10." });
|
|
162
|
+
fireEvent.change(textarea, { target: { value: "tests" } });
|
|
163
|
+
expect(onChange).toHaveBeenCalled();
|
|
164
|
+
expect(onChange).toHaveBeenCalledWith({ value: "tests", error: "Please match the format requested." });
|
|
196
165
|
fireEvent.blur(textarea);
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
});
|
|
202
|
-
const onBlur = jest.fn(({ value, error }) => {
|
|
203
|
-
expect(value).toBe("Example value");
|
|
204
|
-
expect(error).toBe("Min length 5, max length 10.");
|
|
205
|
-
});
|
|
206
|
-
const { getByLabelText } = render(
|
|
207
|
-
<DxcNewTextarea
|
|
208
|
-
label="Example label"
|
|
209
|
-
placeholder="Placeholder"
|
|
210
|
-
onChange={onChange}
|
|
211
|
-
onBlur={onBlur}
|
|
212
|
-
margin={{ left: "medium", right: "medium" }}
|
|
213
|
-
length={{ min: 5, max: 10 }}
|
|
214
|
-
/>
|
|
215
|
-
);
|
|
216
|
-
const textarea = getByLabelText("Example label");
|
|
217
|
-
fireEvent.change(textarea, { target: { value: "Example value" } });
|
|
166
|
+
expect(onBlur).toHaveBeenCalled();
|
|
167
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "tests", error: "Please match the format requested." });
|
|
168
|
+
fireEvent.change(textarea, { target: { value: "tests4&" } });
|
|
169
|
+
expect(onChange).toHaveBeenCalled();
|
|
170
|
+
expect(onChange).toHaveBeenCalledWith({ value: "tests4&", error: null });
|
|
218
171
|
fireEvent.blur(textarea);
|
|
172
|
+
expect(onBlur).toHaveBeenCalled();
|
|
173
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "tests4&", error: null });
|
|
219
174
|
});
|
|
220
175
|
test("onBlur function is called correctly", () => {
|
|
221
176
|
const onBlur = jest.fn();
|
|
@@ -226,27 +181,15 @@ describe("NewTextarea component tests", () => {
|
|
|
226
181
|
expect(onBlur).toHaveBeenCalled();
|
|
227
182
|
expect(onBlur).toHaveBeenCalledWith({ value: "Blur test", error: null });
|
|
228
183
|
});
|
|
229
|
-
test("
|
|
184
|
+
test("onChange function is called correctly", () => {
|
|
230
185
|
const onChange = jest.fn();
|
|
231
|
-
const onBlur = jest.fn();
|
|
232
186
|
const { getByLabelText } = render(
|
|
233
|
-
<DxcNewTextarea label="Example label" value="Test value" onChange={onChange}
|
|
187
|
+
<DxcNewTextarea label="Example label" value="Test value" onChange={onChange} />
|
|
234
188
|
);
|
|
235
189
|
const textarea = getByLabelText("Example label");
|
|
236
190
|
fireEvent.change(textarea, { target: { value: "Controlled test" } });
|
|
237
191
|
expect(onChange).toHaveBeenCalled();
|
|
192
|
+
expect(onChange).toHaveBeenCalledWith({ value: "Controlled test", error: null });
|
|
238
193
|
expect(textarea.value).toBe("Test value");
|
|
239
|
-
fireEvent.blur(textarea);
|
|
240
|
-
expect(onBlur).toHaveBeenCalled();
|
|
241
|
-
expect(onBlur).toHaveBeenCalledWith({ value: "Test value", error: null });
|
|
242
|
-
});
|
|
243
|
-
test("Uncontrolled textarea", () => {
|
|
244
|
-
const onChange = jest.fn();
|
|
245
|
-
const { getByLabelText } = render(<DxcNewTextarea label="Example label" onChange={onChange} />);
|
|
246
|
-
const textarea = getByLabelText("Example label");
|
|
247
|
-
fireEvent.change(textarea, { target: { value: "Uncontrolled test" } });
|
|
248
|
-
expect(onChange).toHaveBeenCalled();
|
|
249
|
-
expect(onChange).toHaveBeenCalledWith("Uncontrolled test");
|
|
250
|
-
expect(textarea.value).toBe("Uncontrolled test");
|
|
251
194
|
});
|
|
252
195
|
});
|