@dxc-technology/halstack-react 0.0.0-90f64ff → 0.0.0-9427b76
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 +66 -58
- package/dist/alert/Alert.js +1 -1
- package/dist/alert/index.d.ts +51 -0
- package/dist/common/variables.js +141 -58
- package/dist/date/Date.js +4 -6
- package/dist/file-input/FileInput.js +641 -0
- package/dist/file-input/FileItem.js +280 -0
- package/dist/file-input/index.d.ts +81 -0
- package/dist/layout/ApplicationLayout.js +1 -1
- package/dist/link/Link.js +4 -8
- package/dist/main.d.ts +7 -0
- package/dist/main.js +8 -0
- package/dist/new-date/NewDate.js +64 -67
- package/dist/new-date/index.d.ts +95 -0
- package/dist/new-input-text/NewInputText.js +160 -157
- package/dist/new-input-text/index.d.ts +135 -0
- package/dist/new-textarea/NewTextarea.js +53 -37
- package/dist/new-textarea/index.d.ts +117 -0
- package/dist/number/Number.js +1 -3
- package/dist/number/index.d.ts +113 -0
- package/dist/password/Password.js +3 -3
- package/dist/password/index.d.ts +94 -0
- package/dist/progress-bar/ProgressBar.js +1 -1
- package/dist/select/Select.js +122 -158
- package/dist/sidenav/Sidenav.js +6 -4
- package/dist/tag/Tag.js +26 -32
- package/package.json +2 -1
- package/test/FileInput.test.js +201 -0
- package/test/NewDate.test.js +41 -12
- package/test/NewInputText.test.js +104 -187
- package/test/NewTextarea.test.js +95 -101
- package/test/Number.test.js +44 -28
- package/test/Paginator.test.js +1 -1
- package/test/Password.test.js +15 -8
- package/test/ResultsetTable.test.js +1 -2
- package/test/Select.test.js +40 -17
- package/dist/select/Select.stories.js +0 -235
- package/dist/select/readme.md +0 -72
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,29 +14,75 @@ 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 } = render(
|
|
17
|
+
const { getByText, getByRole } = render(
|
|
18
|
+
<DxcNewTextarea label="Example label" helperText="Example helper text" optional />
|
|
19
|
+
);
|
|
20
|
+
const textarea = getByRole("textbox");
|
|
18
21
|
expect(getByText("Example label")).toBeTruthy();
|
|
19
22
|
expect(getByText("(Optional)")).toBeTruthy();
|
|
20
23
|
expect(getByText("Example helper text")).toBeTruthy();
|
|
24
|
+
expect(textarea.getAttribute("aria-required")).toBe("false");
|
|
21
25
|
});
|
|
22
26
|
test("Renders with correct placeholder", () => {
|
|
23
27
|
const { getByRole } = render(<DxcNewTextarea placeholder="Placeholder" />);
|
|
24
|
-
const
|
|
25
|
-
expect(
|
|
28
|
+
const textarea = getByRole("textbox");
|
|
29
|
+
expect(textarea.getAttribute("placeholder")).toBe("Placeholder");
|
|
26
30
|
});
|
|
27
31
|
test("Renders with error message", () => {
|
|
28
|
-
const { getByText } = render(<DxcNewTextarea error="Error message." />);
|
|
32
|
+
const { getByText, getByRole } = render(<DxcNewTextarea error="Error message." />);
|
|
33
|
+
const textarea = getByRole("textbox");
|
|
29
34
|
expect(getByText("Error message.")).toBeTruthy();
|
|
35
|
+
expect(textarea.getAttribute("aria-invalid")).toBe("true");
|
|
36
|
+
expect(textarea.getAttribute("aria-describedBy")).not.toBeNull();
|
|
30
37
|
});
|
|
31
38
|
test("Renders with correct default rows", () => {
|
|
32
39
|
const { getByLabelText } = render(<DxcNewTextarea label="Example label" rows={10} />);
|
|
33
40
|
const textarea = getByLabelText("Example label");
|
|
34
41
|
expect(textarea.rows).toBe(10);
|
|
35
42
|
});
|
|
36
|
-
test("
|
|
43
|
+
test("Renders with correct accesibility attributes", () => {
|
|
44
|
+
const { getByLabelText } = render(<DxcNewTextarea label="Example label" />);
|
|
45
|
+
const textarea = getByLabelText("Example label");
|
|
46
|
+
expect(textarea.getAttribute("aria-invalid")).toBe("false");
|
|
47
|
+
expect(textarea.getAttribute("aria-describedBy")).toBeNull();
|
|
48
|
+
expect(textarea.getAttribute("aria-required")).toBe("true");
|
|
49
|
+
});
|
|
50
|
+
test("Not optional constraint (onBlur)", () => {
|
|
37
51
|
const onChange = jest.fn();
|
|
38
52
|
const onBlur = jest.fn();
|
|
39
|
-
const { getByLabelText
|
|
53
|
+
const { getByLabelText } = render(
|
|
54
|
+
<DxcNewTextarea label="Example label" placeholder="Placeholder" onChange={onChange} onBlur={onBlur} />
|
|
55
|
+
);
|
|
56
|
+
const textarea = getByLabelText("Example label");
|
|
57
|
+
|
|
58
|
+
fireEvent.focus(textarea);
|
|
59
|
+
fireEvent.blur(textarea);
|
|
60
|
+
expect(onBlur).toHaveBeenCalled();
|
|
61
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "", error: "This field is required. Please, enter a value." });
|
|
62
|
+
fireEvent.change(textarea, { target: { value: "Test" } });
|
|
63
|
+
fireEvent.blur(textarea);
|
|
64
|
+
expect(onBlur).toHaveBeenCalled();
|
|
65
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "Test", error: null });
|
|
66
|
+
});
|
|
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", () => {
|
|
83
|
+
const onChange = jest.fn();
|
|
84
|
+
const onBlur = jest.fn();
|
|
85
|
+
const { getByLabelText } = render(
|
|
40
86
|
<DxcNewTextarea
|
|
41
87
|
label="Example label"
|
|
42
88
|
placeholder="Placeholder"
|
|
@@ -47,17 +93,25 @@ describe("NewTextarea component tests", () => {
|
|
|
47
93
|
/>
|
|
48
94
|
);
|
|
49
95
|
const textarea = getByLabelText("Example label");
|
|
96
|
+
|
|
50
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." });
|
|
51
100
|
fireEvent.blur(textarea);
|
|
52
|
-
expect(
|
|
101
|
+
expect(onBlur).toHaveBeenCalled();
|
|
102
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "pattern test", error: "Please match the format requested." });
|
|
103
|
+
userEvent.clear(textarea);
|
|
53
104
|
fireEvent.change(textarea, { target: { value: "pattern4&" } });
|
|
105
|
+
expect(onChange).toHaveBeenCalled();
|
|
106
|
+
expect(onChange).toHaveBeenCalledWith({ value: "pattern4&", error: null });
|
|
54
107
|
fireEvent.blur(textarea);
|
|
55
|
-
expect(
|
|
108
|
+
expect(onBlur).toHaveBeenCalled();
|
|
109
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "pattern4&", error: null });
|
|
56
110
|
});
|
|
57
|
-
test("
|
|
111
|
+
test("Length constraint", () => {
|
|
58
112
|
const onChange = jest.fn();
|
|
59
113
|
const onBlur = jest.fn();
|
|
60
|
-
const { getByLabelText
|
|
114
|
+
const { getByLabelText } = render(
|
|
61
115
|
<DxcNewTextarea
|
|
62
116
|
label="Example label"
|
|
63
117
|
placeholder="Placeholder"
|
|
@@ -68,14 +122,22 @@ describe("NewTextarea component tests", () => {
|
|
|
68
122
|
/>
|
|
69
123
|
);
|
|
70
124
|
const textarea = getByLabelText("Example label");
|
|
125
|
+
|
|
71
126
|
fireEvent.change(textarea, { target: { value: "test" } });
|
|
127
|
+
expect(onChange).toHaveBeenCalled();
|
|
128
|
+
expect(onChange).toHaveBeenCalledWith({ value: "test", error: "Min length 5, max length 10." });
|
|
72
129
|
fireEvent.blur(textarea);
|
|
73
|
-
expect(
|
|
74
|
-
|
|
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 });
|
|
75
136
|
fireEvent.blur(textarea);
|
|
76
|
-
expect(
|
|
137
|
+
expect(onBlur).toHaveBeenCalled();
|
|
138
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "length", error: null });
|
|
77
139
|
});
|
|
78
|
-
test("
|
|
140
|
+
test("Pattern and length constraints", () => {
|
|
79
141
|
const onChange = jest.fn();
|
|
80
142
|
const onBlur = jest.fn();
|
|
81
143
|
const { getByLabelText, getByText, queryByText } = render(
|
|
@@ -90,81 +152,25 @@ describe("NewTextarea component tests", () => {
|
|
|
90
152
|
/>
|
|
91
153
|
);
|
|
92
154
|
const textarea = getByLabelText("Example label");
|
|
155
|
+
|
|
93
156
|
fireEvent.change(textarea, { target: { value: "test" } });
|
|
157
|
+
expect(onChange).toHaveBeenCalled();
|
|
158
|
+
expect(onChange).toHaveBeenCalledWith({ value: "test", error: "Min length 5, max length 10." });
|
|
94
159
|
fireEvent.blur(textarea);
|
|
95
|
-
expect(
|
|
96
|
-
|
|
97
|
-
fireEvent.
|
|
98
|
-
expect(
|
|
99
|
-
|
|
100
|
-
fireEvent.blur(textarea);
|
|
101
|
-
expect(queryByText("Please match the format requested.")).toBeFalsy();
|
|
102
|
-
});
|
|
103
|
-
test("Non Strict mode - Pattern constraint", () => {
|
|
104
|
-
const onChange = jest.fn((value) => {
|
|
105
|
-
expect(value).toBe("Example value");
|
|
106
|
-
});
|
|
107
|
-
const onBlur = jest.fn(({ value, error }) => {
|
|
108
|
-
expect(value).toBe("Example value");
|
|
109
|
-
expect(error).toBe("Please match the format requested.");
|
|
110
|
-
});
|
|
111
|
-
const { getByLabelText } = render(
|
|
112
|
-
<DxcNewTextarea
|
|
113
|
-
label="Example label"
|
|
114
|
-
placeholder="Placeholder"
|
|
115
|
-
onChange={onChange}
|
|
116
|
-
onBlur={onBlur}
|
|
117
|
-
margin={{ left: "medium", right: "medium" }}
|
|
118
|
-
pattern='^.*(?=.*[a-zA-Z])(?=.*\d)(?=.*[!&$%&? "]).*$'
|
|
119
|
-
/>
|
|
120
|
-
);
|
|
121
|
-
const textarea = getByLabelText("Example label");
|
|
122
|
-
fireEvent.change(textarea, { target: { value: "Example value" } });
|
|
123
|
-
fireEvent.blur(textarea);
|
|
124
|
-
});
|
|
125
|
-
test("Non Strict mode - Length constraint", () => {
|
|
126
|
-
const onChange = jest.fn((value) => {
|
|
127
|
-
expect(value).toBe("Example value");
|
|
128
|
-
});
|
|
129
|
-
const onBlur = jest.fn(({ value, error }) => {
|
|
130
|
-
expect(value).toBe("Example value");
|
|
131
|
-
expect(error).toBe("Min length 5, max length 10.");
|
|
132
|
-
});
|
|
133
|
-
const { getByLabelText } = render(
|
|
134
|
-
<DxcNewTextarea
|
|
135
|
-
label="Example label"
|
|
136
|
-
placeholder="Placeholder"
|
|
137
|
-
onChange={onChange}
|
|
138
|
-
onBlur={onBlur}
|
|
139
|
-
margin={{ left: "medium", right: "medium" }}
|
|
140
|
-
length={{ min: 5, max: 10 }}
|
|
141
|
-
/>
|
|
142
|
-
);
|
|
143
|
-
const textarea = getByLabelText("Example label");
|
|
144
|
-
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." });
|
|
145
165
|
fireEvent.blur(textarea);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
});
|
|
151
|
-
const onBlur = jest.fn(({ value, error }) => {
|
|
152
|
-
expect(value).toBe("Example value");
|
|
153
|
-
expect(error).toBe("Min length 5, max length 10.");
|
|
154
|
-
});
|
|
155
|
-
const { getByLabelText } = render(
|
|
156
|
-
<DxcNewTextarea
|
|
157
|
-
label="Example label"
|
|
158
|
-
placeholder="Placeholder"
|
|
159
|
-
onChange={onChange}
|
|
160
|
-
onBlur={onBlur}
|
|
161
|
-
margin={{ left: "medium", right: "medium" }}
|
|
162
|
-
length={{ min: 5, max: 10 }}
|
|
163
|
-
/>
|
|
164
|
-
);
|
|
165
|
-
const textarea = getByLabelText("Example label");
|
|
166
|
-
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 });
|
|
167
171
|
fireEvent.blur(textarea);
|
|
172
|
+
expect(onBlur).toHaveBeenCalled();
|
|
173
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "tests4&", error: null });
|
|
168
174
|
});
|
|
169
175
|
test("onBlur function is called correctly", () => {
|
|
170
176
|
const onBlur = jest.fn();
|
|
@@ -175,27 +181,15 @@ describe("NewTextarea component tests", () => {
|
|
|
175
181
|
expect(onBlur).toHaveBeenCalled();
|
|
176
182
|
expect(onBlur).toHaveBeenCalledWith({ value: "Blur test", error: null });
|
|
177
183
|
});
|
|
178
|
-
test("
|
|
184
|
+
test("onChange function is called correctly", () => {
|
|
179
185
|
const onChange = jest.fn();
|
|
180
|
-
const onBlur = jest.fn();
|
|
181
186
|
const { getByLabelText } = render(
|
|
182
|
-
<DxcNewTextarea label="Example label" value="Test value" onChange={onChange}
|
|
187
|
+
<DxcNewTextarea label="Example label" value="Test value" onChange={onChange} />
|
|
183
188
|
);
|
|
184
189
|
const textarea = getByLabelText("Example label");
|
|
185
190
|
fireEvent.change(textarea, { target: { value: "Controlled test" } });
|
|
186
191
|
expect(onChange).toHaveBeenCalled();
|
|
192
|
+
expect(onChange).toHaveBeenCalledWith({ value: "Controlled test", error: null });
|
|
187
193
|
expect(textarea.value).toBe("Test value");
|
|
188
|
-
fireEvent.blur(textarea);
|
|
189
|
-
expect(onBlur).toHaveBeenCalled();
|
|
190
|
-
expect(onBlur).toHaveBeenCalledWith({ value: "Test value", error: null });
|
|
191
|
-
});
|
|
192
|
-
test("Uncontrolled input", () => {
|
|
193
|
-
const onChange = jest.fn();
|
|
194
|
-
const { getByLabelText } = render(<DxcNewTextarea label="Example label" onChange={onChange} />);
|
|
195
|
-
const textarea = getByLabelText("Example label");
|
|
196
|
-
fireEvent.change(textarea, { target: { value: "Uncontrolled test" } });
|
|
197
|
-
expect(onChange).toHaveBeenCalled();
|
|
198
|
-
expect(onChange).toHaveBeenCalledWith("Uncontrolled test");
|
|
199
|
-
expect(textarea.value).toBe("Uncontrolled test");
|
|
200
194
|
});
|
|
201
195
|
});
|
package/test/Number.test.js
CHANGED
|
@@ -36,6 +36,21 @@ describe("Number component tests", () => {
|
|
|
36
36
|
expect(getByText("(Optional)")).toBeTruthy();
|
|
37
37
|
});
|
|
38
38
|
|
|
39
|
+
test("Number is not optional: required field, displays error if not filled in", () => {
|
|
40
|
+
const onBlur = jest.fn();
|
|
41
|
+
const onChange = jest.fn();
|
|
42
|
+
const { getByRole } = render(<DxcNumber onBlur={onBlur} onChange={onChange} />);
|
|
43
|
+
const input = getByRole("textbox");
|
|
44
|
+
|
|
45
|
+
userEvent.type(input, "1");
|
|
46
|
+
userEvent.clear(input);
|
|
47
|
+
fireEvent.blur(input);
|
|
48
|
+
expect(onBlur).toHaveBeenCalled();
|
|
49
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "", error: "This field is required. Please, enter a value." });
|
|
50
|
+
expect(onChange).toHaveBeenCalled();
|
|
51
|
+
expect(onChange).toHaveBeenCalledWith({ value: "", error: "This field is required. Please, enter a value." });
|
|
52
|
+
});
|
|
53
|
+
|
|
39
54
|
test("Suffix and prefix must be shown)", () => {
|
|
40
55
|
const { getByText } = render(<DxcNumber label="Number label" prefix="+34" suffix="USD" />);
|
|
41
56
|
expect(getByText("+34")).toBeTruthy();
|
|
@@ -52,19 +67,29 @@ describe("Number component tests", () => {
|
|
|
52
67
|
const { getByLabelText } = render(<DxcNumber label="Number label" onChange={onChange} />);
|
|
53
68
|
const number = getByLabelText("Number label");
|
|
54
69
|
userEvent.type(number, "t");
|
|
55
|
-
expect(onChange).not.toHaveBeenCalledWith("t");
|
|
70
|
+
expect(onChange).not.toHaveBeenCalledWith({ value: "t", error: null });
|
|
56
71
|
expect(number.value).toBe("");
|
|
57
72
|
userEvent.type(number, "1");
|
|
58
|
-
expect(onChange).toHaveBeenCalledWith("1");
|
|
73
|
+
expect(onChange).toHaveBeenCalledWith({ value: "1", error: null });
|
|
59
74
|
expect(number.value).toBe("1");
|
|
60
75
|
});
|
|
61
76
|
|
|
62
77
|
test("Error message is shown if the value is less than the min value", () => {
|
|
63
|
-
const {
|
|
78
|
+
const onChange = jest.fn(({ value, error }) => {
|
|
79
|
+
expect(value).toBe("1");
|
|
80
|
+
expect(error).toBe("Value must be greater than or equal to 5.");
|
|
81
|
+
});
|
|
82
|
+
const onBlur = jest.fn(({ value, error }) => {
|
|
83
|
+
expect(value).toBe("1");
|
|
84
|
+
expect(error).toBe("Value must be greater than or equal to 5.");
|
|
85
|
+
});
|
|
86
|
+
const { getByLabelText } = render(
|
|
87
|
+
<DxcNumber label="Number label" min={5} onBlur={onBlur} onChange={onChange} />
|
|
88
|
+
);
|
|
64
89
|
const number = getByLabelText("Number label");
|
|
90
|
+
|
|
65
91
|
userEvent.type(number, "1");
|
|
66
92
|
fireEvent.blur(number);
|
|
67
|
-
expect(getByText("Value must be greater than or equal to 5.")).toBeTruthy();
|
|
68
93
|
});
|
|
69
94
|
|
|
70
95
|
test("Cannot decrement the value if it is less than the min value", () => {
|
|
@@ -90,11 +115,17 @@ describe("Number component tests", () => {
|
|
|
90
115
|
});
|
|
91
116
|
|
|
92
117
|
test("Error message is shown if the value is greater than the max value", () => {
|
|
93
|
-
const
|
|
118
|
+
const onChange = jest.fn();
|
|
119
|
+
const onBlur = jest.fn();
|
|
120
|
+
const { getByLabelText } = render(<DxcNumber label="Number label" max={10} onBlur={onBlur} onChange={onChange} />);
|
|
94
121
|
const number = getByLabelText("Number label");
|
|
95
|
-
|
|
122
|
+
|
|
123
|
+
userEvent.type(number, "12");
|
|
124
|
+
expect(onChange).toHaveBeenCalledTimes(2);
|
|
125
|
+
expect(onChange).toHaveBeenCalledWith({ value: "12", error: "Value must be less than or equal to 10." });
|
|
96
126
|
fireEvent.blur(number);
|
|
97
|
-
expect(
|
|
127
|
+
expect(onBlur).toHaveBeenCalled();
|
|
128
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "12", error: "Value must be less than or equal to 10." });
|
|
98
129
|
});
|
|
99
130
|
|
|
100
131
|
test("Cannot increment the value if it is greater than the max value", () => {
|
|
@@ -160,13 +191,16 @@ describe("Number component tests", () => {
|
|
|
160
191
|
});
|
|
161
192
|
|
|
162
193
|
test("Increment and decrement the value with min, max and step", () => {
|
|
163
|
-
const {
|
|
164
|
-
|
|
194
|
+
const onBlur = jest.fn(({ value, error }) => {
|
|
195
|
+
expect(value).toBe("1");
|
|
196
|
+
expect(error).toBe("Value must be greater than or equal to 5.");
|
|
197
|
+
});
|
|
198
|
+
const { getByLabelText, getAllByRole } = render(
|
|
199
|
+
<DxcNumber label="Number label" min={5} max={20} step={8} onBlur={onBlur} />
|
|
165
200
|
);
|
|
166
201
|
const number = getByLabelText("Number label");
|
|
167
202
|
userEvent.type(number, "1");
|
|
168
203
|
fireEvent.blur(number);
|
|
169
|
-
expect(getByText("Value must be greater than or equal to 5.")).toBeTruthy();
|
|
170
204
|
const increment = getAllByRole("button")[1];
|
|
171
205
|
userEvent.click(increment);
|
|
172
206
|
expect(number.value).toBe("5");
|
|
@@ -209,24 +243,6 @@ describe("Number component tests", () => {
|
|
|
209
243
|
expect(number.value).toBe("5");
|
|
210
244
|
});
|
|
211
245
|
|
|
212
|
-
test("Custom error messages", () => {
|
|
213
|
-
const onChange = jest.fn((value) => {
|
|
214
|
-
expect(value).toBe("2");
|
|
215
|
-
});
|
|
216
|
-
|
|
217
|
-
const onBlur = jest.fn(({ value, error }) => {
|
|
218
|
-
expect(value).toBe("2");
|
|
219
|
-
expect(error).toBe("Value must be greater than or equal to 5.");
|
|
220
|
-
});
|
|
221
|
-
|
|
222
|
-
const { getByLabelText } = render(
|
|
223
|
-
<DxcNumber label="Number label" min={5} step={8} onChange={onChange} onBlur={onBlur} />
|
|
224
|
-
);
|
|
225
|
-
const number = getByLabelText("Number label");
|
|
226
|
-
userEvent.type(number, "2");
|
|
227
|
-
fireEvent.blur(number);
|
|
228
|
-
});
|
|
229
|
-
|
|
230
246
|
test("Number has correct accesibility attributes", () => {
|
|
231
247
|
const { getByLabelText, getAllByRole } = render(<DxcNumber label="Number label" />);
|
|
232
248
|
const number = getByLabelText("Number label");
|
package/test/Paginator.test.js
CHANGED
|
@@ -62,7 +62,7 @@ describe("Paginator component tests", () => {
|
|
|
62
62
|
act(() => {
|
|
63
63
|
userEvent.click(goToPageSelect);
|
|
64
64
|
});
|
|
65
|
-
const goToPageOption =
|
|
65
|
+
const goToPageOption = getByText("2");
|
|
66
66
|
act(() => {
|
|
67
67
|
userEvent.click(goToPageOption);
|
|
68
68
|
});
|
package/test/Password.test.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { render } from "@testing-library/react";
|
|
2
|
+
import { render, fireEvent } from "@testing-library/react";
|
|
3
3
|
import userEvent from "@testing-library/user-event";
|
|
4
4
|
import DxcPassword from "../src/password/Password";
|
|
5
5
|
|
|
@@ -24,13 +24,22 @@ describe("Password component tests", () => {
|
|
|
24
24
|
const { getByRole } = render(<DxcPassword label="Password" onChange={onChange} />);
|
|
25
25
|
const password = getByRole("textbox");
|
|
26
26
|
userEvent.type(password, "Pa$$w0rd");
|
|
27
|
-
expect(onChange).toHaveBeenCalledWith("P");
|
|
27
|
+
expect(onChange).toHaveBeenCalledWith({ value: "P", error: null });
|
|
28
|
+
expect(password.value).toBe("Pa$$w0rd");
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test("onBlur function is called correctly", () => {
|
|
32
|
+
const onBlur = jest.fn();
|
|
33
|
+
const { getByRole } = render(<DxcPassword label="Password" onBlur={onBlur} />);
|
|
34
|
+
const password = getByRole("textbox");
|
|
35
|
+
userEvent.type(password, "Pa$$w0rd");
|
|
36
|
+
fireEvent.blur(password);
|
|
37
|
+
expect(onBlur).toHaveBeenCalledWith({ value: "Pa$$w0rd", error: null });
|
|
28
38
|
expect(password.value).toBe("Pa$$w0rd");
|
|
29
39
|
});
|
|
30
40
|
|
|
31
41
|
test("Clear password value", () => {
|
|
32
|
-
const
|
|
33
|
-
const { getAllByRole, getByRole } = render(<DxcPassword label="Password" onChange={onChange} clearable />);
|
|
42
|
+
const { getAllByRole, getByRole } = render(<DxcPassword label="Password" clearable />);
|
|
34
43
|
const password = getByRole("textbox");
|
|
35
44
|
userEvent.type(password, "Pa$$w0rd");
|
|
36
45
|
expect(password.value).toBe("Pa$$w0rd");
|
|
@@ -40,8 +49,7 @@ describe("Password component tests", () => {
|
|
|
40
49
|
});
|
|
41
50
|
|
|
42
51
|
test("Non clearable password has no clear icon", () => {
|
|
43
|
-
const
|
|
44
|
-
const { getAllByRole, getByRole } = render(<DxcPassword label="Password" onChange={onChange} />);
|
|
52
|
+
const { getAllByRole, getByRole } = render(<DxcPassword label="Password" />);
|
|
45
53
|
const password = getByRole("textbox");
|
|
46
54
|
userEvent.type(password, "Pa$$w0rd");
|
|
47
55
|
expect(password.value).toBe("Pa$$w0rd");
|
|
@@ -50,8 +58,7 @@ describe("Password component tests", () => {
|
|
|
50
58
|
});
|
|
51
59
|
|
|
52
60
|
test("Show/hide password button works correctly", () => {
|
|
53
|
-
const
|
|
54
|
-
const { getAllByRole, getByRole } = render(<DxcPassword label="Password" clearable onChange={onChange} />);
|
|
61
|
+
const { getAllByRole, getByRole } = render(<DxcPassword label="Password" clearable />);
|
|
55
62
|
const password = getByRole("textbox");
|
|
56
63
|
userEvent.type(password, "Pa$$w0rd");
|
|
57
64
|
expect(password.value).toBe("Pa$$w0rd");
|
|
@@ -266,13 +266,12 @@ describe("ResultsetTable component tests", () => {
|
|
|
266
266
|
act(() => {
|
|
267
267
|
userEvent.click(goToPageSelect);
|
|
268
268
|
});
|
|
269
|
-
const goToPageOption =
|
|
269
|
+
const goToPageOption = getByText("2");
|
|
270
270
|
act(() => {
|
|
271
271
|
userEvent.click(goToPageOption);
|
|
272
272
|
});
|
|
273
273
|
|
|
274
274
|
expect(getByText("4 to 6 of 10")).toBeTruthy();
|
|
275
|
-
// expect(getByText("Page: 2 of 4")).toBeTruthy();
|
|
276
275
|
expect(getByText("Rick")).toBeTruthy();
|
|
277
276
|
expect(getByText("Mark")).toBeTruthy();
|
|
278
277
|
expect(getByText("Cris")).toBeTruthy();
|
package/test/Select.test.js
CHANGED
|
@@ -21,18 +21,43 @@ const optionsWithoutIcon = [
|
|
|
21
21
|
const optionsWithIcons = [
|
|
22
22
|
{
|
|
23
23
|
value: 1,
|
|
24
|
-
label: "
|
|
25
|
-
|
|
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
|
+
),
|
|
26
38
|
},
|
|
27
39
|
{
|
|
28
40
|
value: 2,
|
|
29
|
-
label: "
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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
|
+
),
|
|
36
61
|
},
|
|
37
62
|
];
|
|
38
63
|
|
|
@@ -60,29 +85,27 @@ describe("Select component tests", () => {
|
|
|
60
85
|
});
|
|
61
86
|
|
|
62
87
|
test("Select renders options with icons before", () => {
|
|
63
|
-
const { getByRole,
|
|
88
|
+
const { getByRole, getByTestId } = render(
|
|
64
89
|
<DxcSelect label="test-select-name" options={optionsWithIcons}></DxcSelect>
|
|
65
90
|
);
|
|
66
91
|
const select = getByRole("button");
|
|
67
92
|
act(() => {
|
|
68
93
|
userEvent.click(select);
|
|
69
94
|
});
|
|
70
|
-
expect(
|
|
71
|
-
expect(
|
|
72
|
-
expect(getAllByRole("img")[2].getAttribute("src")).toEqual("/testIconLinkedin");
|
|
95
|
+
expect(getByTestId("image-1")).toBeTruthy();
|
|
96
|
+
expect(getByTestId("image-2")).toBeTruthy();
|
|
73
97
|
});
|
|
74
98
|
|
|
75
99
|
test("Select renders options with icons after", () => {
|
|
76
|
-
const { getByRole,
|
|
100
|
+
const { getByRole, getByTestId } = render(
|
|
77
101
|
<DxcSelect label="test-select-name" options={optionsWithIcons} iconPosition="after"></DxcSelect>
|
|
78
102
|
);
|
|
79
103
|
const select = getByRole("button");
|
|
80
104
|
act(() => {
|
|
81
105
|
userEvent.click(select);
|
|
82
106
|
});
|
|
83
|
-
expect(
|
|
84
|
-
expect(
|
|
85
|
-
expect(getAllByRole("img")[2].getAttribute("src")).toEqual("/testIconLinkedin");
|
|
107
|
+
expect(getByTestId("image-1")).toBeTruthy();
|
|
108
|
+
expect(getByTestId("image-2")).toBeTruthy();
|
|
86
109
|
});
|
|
87
110
|
|
|
88
111
|
test("Select renders with a default value", () => {
|