@pie-lib/config-ui 12.0.0-next.0 → 12.1.0-next.0
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/lib/__tests__/alert-dialog.test.js +262 -0
- package/lib/__tests__/checkbox.test.js +227 -0
- package/lib/__tests__/choice-utils.test.js +14 -0
- package/lib/__tests__/form-section.test.js +252 -0
- package/lib/__tests__/help.test.js +270 -0
- package/lib/__tests__/input.test.js +268 -0
- package/lib/__tests__/langs.test.js +541 -0
- package/lib/__tests__/number-text-field-custom.test.js +362 -0
- package/lib/__tests__/number-text-field.test.js +421 -0
- package/lib/__tests__/radio-with-label.test.js +233 -0
- package/lib/__tests__/settings-panel.test.js +184 -0
- package/lib/__tests__/settings.test.js +653 -0
- package/lib/__tests__/tabs.test.js +211 -0
- package/lib/__tests__/two-choice.test.js +124 -0
- package/lib/__tests__/with-stateful-model.test.js +221 -0
- package/lib/alert-dialog.js +1 -1
- package/lib/checkbox.js +1 -1
- package/lib/choice-configuration/__tests__/feedback-menu.test.js +287 -0
- package/lib/choice-configuration/__tests__/index.test.js +253 -0
- package/lib/choice-configuration/feedback-menu.js +1 -1
- package/lib/choice-configuration/index.js +3 -3
- package/lib/choice-configuration/index.js.map +1 -1
- package/lib/choice-utils.js +1 -1
- package/lib/feedback-config/__tests__/feedback-config.test.js +201 -0
- package/lib/feedback-config/__tests__/feedback-selector.test.js +177 -0
- package/lib/feedback-config/feedback-selector.js +3 -3
- package/lib/feedback-config/feedback-selector.js.map +1 -1
- package/lib/feedback-config/group.js +1 -1
- package/lib/feedback-config/index.js +1 -1
- package/lib/form-section.js +1 -1
- package/lib/help.js +1 -1
- package/lib/index.js +1 -1
- package/lib/input.js +1 -1
- package/lib/inputs.js +1 -1
- package/lib/langs.js +1 -1
- package/lib/layout/__tests__/config.layout.test.js +70 -0
- package/lib/layout/__tests__/layout-content.test.js +6 -0
- package/lib/layout/config-layout.js +1 -1
- package/lib/layout/index.js +1 -1
- package/lib/layout/layout-contents.js +1 -1
- package/lib/layout/settings-box.js +1 -1
- package/lib/mui-box/index.js +1 -1
- package/lib/number-text-field-custom.js +1 -1
- package/lib/number-text-field.js +1 -1
- package/lib/radio-with-label.js +1 -1
- package/lib/settings/display-size.js +1 -1
- package/lib/settings/index.js +1 -1
- package/lib/settings/panel.js +1 -1
- package/lib/settings/settings-radio-label.js +1 -1
- package/lib/settings/toggle.js +1 -1
- package/lib/tabs/index.js +1 -1
- package/lib/tags-input/__tests__/index.test.js +183 -0
- package/lib/tags-input/index.js +1 -1
- package/lib/two-choice.js +1 -1
- package/lib/with-stateful-model.js +1 -1
- package/package.json +5 -13
- package/src/choice-configuration/__tests__/index.test.jsx +1 -1
- package/src/choice-configuration/index.jsx +68 -75
- package/src/feedback-config/__tests__/feedback-selector.test.jsx +3 -13
- package/src/feedback-config/feedback-selector.jsx +3 -7
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _react = _interopRequireDefault(require("react"));
|
|
5
|
+
var _react2 = require("@testing-library/react");
|
|
6
|
+
var _formSection = _interopRequireDefault(require("../form-section"));
|
|
7
|
+
describe('FormSection Component', function () {
|
|
8
|
+
describe('Rendering', function () {
|
|
9
|
+
it('should render with label and children', function () {
|
|
10
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
11
|
+
label: "Settings"
|
|
12
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Child content")));
|
|
13
|
+
expect(_react2.screen.getByText('Settings')).toBeInTheDocument();
|
|
14
|
+
expect(_react2.screen.getByText('Child content')).toBeInTheDocument();
|
|
15
|
+
});
|
|
16
|
+
it('should render label as subtitle1 typography', function () {
|
|
17
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
18
|
+
label: "Configuration"
|
|
19
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
20
|
+
container = _render.container;
|
|
21
|
+
var typography = container.querySelector('[class*="MuiTypography"]');
|
|
22
|
+
expect(typography).toBeInTheDocument();
|
|
23
|
+
});
|
|
24
|
+
it('should render with custom className', function () {
|
|
25
|
+
var _render2 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
26
|
+
label: "Custom",
|
|
27
|
+
className: "custom-class"
|
|
28
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
29
|
+
container = _render2.container;
|
|
30
|
+
expect(container.querySelector('.custom-class')).toBeInTheDocument();
|
|
31
|
+
});
|
|
32
|
+
it('should render multiple children', function () {
|
|
33
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
34
|
+
label: "Multiple Children"
|
|
35
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "First child"), /*#__PURE__*/_react["default"].createElement("div", null, "Second child"), /*#__PURE__*/_react["default"].createElement("div", null, "Third child")));
|
|
36
|
+
expect(_react2.screen.getByText('First child')).toBeInTheDocument();
|
|
37
|
+
expect(_react2.screen.getByText('Second child')).toBeInTheDocument();
|
|
38
|
+
expect(_react2.screen.getByText('Third child')).toBeInTheDocument();
|
|
39
|
+
});
|
|
40
|
+
it('should render with single child', function () {
|
|
41
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
42
|
+
label: "Single Child"
|
|
43
|
+
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
44
|
+
type: "text",
|
|
45
|
+
placeholder: "Input"
|
|
46
|
+
})));
|
|
47
|
+
expect(_react2.screen.getByPlaceholderText('Input')).toBeInTheDocument();
|
|
48
|
+
});
|
|
49
|
+
it('should render with complex child components', function () {
|
|
50
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
51
|
+
label: "Complex"
|
|
52
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", null, "Name:"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
53
|
+
type: "text",
|
|
54
|
+
placeholder: "Enter name"
|
|
55
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", null, "Email:"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
56
|
+
type: "email",
|
|
57
|
+
placeholder: "Enter email"
|
|
58
|
+
}))));
|
|
59
|
+
expect(_react2.screen.getByPlaceholderText('Enter name')).toBeInTheDocument();
|
|
60
|
+
expect(_react2.screen.getByPlaceholderText('Enter email')).toBeInTheDocument();
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('Labels', function () {
|
|
64
|
+
it('should display different labels', function () {
|
|
65
|
+
var _render3 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
66
|
+
label: "First Label"
|
|
67
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
68
|
+
rerender = _render3.rerender;
|
|
69
|
+
expect(_react2.screen.getByText('First Label')).toBeInTheDocument();
|
|
70
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
71
|
+
label: "Second Label"
|
|
72
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content")));
|
|
73
|
+
expect(_react2.screen.getByText('Second Label')).toBeInTheDocument();
|
|
74
|
+
expect(_react2.screen.queryByText('First Label')).not.toBeInTheDocument();
|
|
75
|
+
});
|
|
76
|
+
it('should handle empty label', function () {
|
|
77
|
+
var _render4 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
78
|
+
label: ""
|
|
79
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
80
|
+
container = _render4.container;
|
|
81
|
+
expect(container.querySelector('[class*="MuiTypography"]')).toBeInTheDocument();
|
|
82
|
+
expect(_react2.screen.getByText('Content')).toBeInTheDocument();
|
|
83
|
+
});
|
|
84
|
+
it('should handle long labels', function () {
|
|
85
|
+
var longLabel = 'This is a very long label that should wrap properly within the form section';
|
|
86
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
87
|
+
label: longLabel
|
|
88
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content")));
|
|
89
|
+
expect(_react2.screen.getByText(longLabel)).toBeInTheDocument();
|
|
90
|
+
});
|
|
91
|
+
it('should handle special characters in labels', function () {
|
|
92
|
+
var specialLabel = 'Settings & Configuration < Advanced > Test @ #1';
|
|
93
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
94
|
+
label: specialLabel
|
|
95
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content")));
|
|
96
|
+
expect(_react2.screen.getByText(specialLabel)).toBeInTheDocument();
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('Styling and Layout', function () {
|
|
100
|
+
it('should apply default spacing', function () {
|
|
101
|
+
var _render5 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
102
|
+
label: "Spaced"
|
|
103
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
104
|
+
container = _render5.container;
|
|
105
|
+
var formSection = container.querySelector('[class*="MuiBox"], div');
|
|
106
|
+
expect(formSection).toBeInTheDocument();
|
|
107
|
+
});
|
|
108
|
+
it('should apply labelExtraStyle to the label', function () {
|
|
109
|
+
var _render6 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
110
|
+
label: "Styled Label",
|
|
111
|
+
labelExtraStyle: {
|
|
112
|
+
color: 'red',
|
|
113
|
+
fontWeight: 'bold'
|
|
114
|
+
}
|
|
115
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
116
|
+
container = _render6.container;
|
|
117
|
+
var typography = container.querySelector('[class*="MuiTypography"]');
|
|
118
|
+
expect(typography).toHaveStyle('color: red');
|
|
119
|
+
expect(typography).toHaveStyle('fontWeight: bold');
|
|
120
|
+
});
|
|
121
|
+
it('should apply multiple labelExtraStyle properties', function () {
|
|
122
|
+
var extraStyle = {
|
|
123
|
+
fontSize: '18px',
|
|
124
|
+
margin: '10px',
|
|
125
|
+
padding: '5px'
|
|
126
|
+
};
|
|
127
|
+
var _render7 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
128
|
+
label: "Multi-styled",
|
|
129
|
+
labelExtraStyle: extraStyle
|
|
130
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
131
|
+
container = _render7.container;
|
|
132
|
+
var typography = container.querySelector('[class*="MuiTypography"]');
|
|
133
|
+
expect(typography).toHaveStyle('fontSize: 18px');
|
|
134
|
+
expect(typography).toHaveStyle('margin: 10px');
|
|
135
|
+
expect(typography).toHaveStyle('padding: 5px');
|
|
136
|
+
});
|
|
137
|
+
it('should handle no labelExtraStyle', function () {
|
|
138
|
+
var _render8 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
139
|
+
label: "No Extra Style"
|
|
140
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
141
|
+
container = _render8.container;
|
|
142
|
+
expect(container.querySelector('[class*="MuiTypography"]')).toBeInTheDocument();
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('CSS classes', function () {
|
|
146
|
+
it('should support multiple custom classes', function () {
|
|
147
|
+
var _render9 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
148
|
+
label: "Test",
|
|
149
|
+
className: "class1 class2 class3"
|
|
150
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
151
|
+
container = _render9.container;
|
|
152
|
+
var element = container.querySelector('.class1.class2.class3');
|
|
153
|
+
expect(element).toBeInTheDocument();
|
|
154
|
+
});
|
|
155
|
+
it('should work without custom className', function () {
|
|
156
|
+
var _render0 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
157
|
+
label: "Test"
|
|
158
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
159
|
+
container = _render0.container;
|
|
160
|
+
expect(container.firstChild).toBeInTheDocument();
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('Content variations', function () {
|
|
164
|
+
it('should render form inputs as children', function () {
|
|
165
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
166
|
+
label: "Form Inputs"
|
|
167
|
+
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
168
|
+
type: "text",
|
|
169
|
+
placeholder: "Text input"
|
|
170
|
+
}), /*#__PURE__*/_react["default"].createElement("input", {
|
|
171
|
+
type: "number",
|
|
172
|
+
placeholder: "Number input"
|
|
173
|
+
}), /*#__PURE__*/_react["default"].createElement("textarea", {
|
|
174
|
+
placeholder: "Text area"
|
|
175
|
+
})));
|
|
176
|
+
expect(_react2.screen.getByPlaceholderText('Text input')).toBeInTheDocument();
|
|
177
|
+
expect(_react2.screen.getByPlaceholderText('Number input')).toBeInTheDocument();
|
|
178
|
+
expect(_react2.screen.getByPlaceholderText('Text area')).toBeInTheDocument();
|
|
179
|
+
});
|
|
180
|
+
it('should render lists as children', function () {
|
|
181
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
182
|
+
label: "Options"
|
|
183
|
+
}, /*#__PURE__*/_react["default"].createElement("ul", null, /*#__PURE__*/_react["default"].createElement("li", null, "Option 1"), /*#__PURE__*/_react["default"].createElement("li", null, "Option 2"), /*#__PURE__*/_react["default"].createElement("li", null, "Option 3"))));
|
|
184
|
+
expect(_react2.screen.getByText('Option 1')).toBeInTheDocument();
|
|
185
|
+
expect(_react2.screen.getByText('Option 2')).toBeInTheDocument();
|
|
186
|
+
expect(_react2.screen.getByText('Option 3')).toBeInTheDocument();
|
|
187
|
+
});
|
|
188
|
+
it('should render buttons as children', function () {
|
|
189
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
190
|
+
label: "Actions"
|
|
191
|
+
}, /*#__PURE__*/_react["default"].createElement("button", null, "Save"), /*#__PURE__*/_react["default"].createElement("button", null, "Cancel")));
|
|
192
|
+
expect(_react2.screen.getByRole('button', {
|
|
193
|
+
name: 'Save'
|
|
194
|
+
})).toBeInTheDocument();
|
|
195
|
+
expect(_react2.screen.getByRole('button', {
|
|
196
|
+
name: 'Cancel'
|
|
197
|
+
})).toBeInTheDocument();
|
|
198
|
+
});
|
|
199
|
+
it('should render nested form sections', function () {
|
|
200
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
201
|
+
label: "Outer"
|
|
202
|
+
}, /*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
203
|
+
label: "Inner"
|
|
204
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Nested content"))));
|
|
205
|
+
expect(_react2.screen.getByText('Outer')).toBeInTheDocument();
|
|
206
|
+
expect(_react2.screen.getByText('Inner')).toBeInTheDocument();
|
|
207
|
+
expect(_react2.screen.getByText('Nested content')).toBeInTheDocument();
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
describe('Edge cases', function () {
|
|
211
|
+
it('should render with conditional children', function () {
|
|
212
|
+
var showContent = true;
|
|
213
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
214
|
+
label: "Conditional"
|
|
215
|
+
}, showContent && /*#__PURE__*/_react["default"].createElement("div", null, "Visible"), !showContent && /*#__PURE__*/_react["default"].createElement("div", null, "Hidden")));
|
|
216
|
+
expect(_react2.screen.getByText('Visible')).toBeInTheDocument();
|
|
217
|
+
expect(_react2.screen.queryByText('Hidden')).not.toBeInTheDocument();
|
|
218
|
+
});
|
|
219
|
+
it('should update when children change', function () {
|
|
220
|
+
var _render1 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
221
|
+
label: "Dynamic"
|
|
222
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Initial content"))),
|
|
223
|
+
rerender = _render1.rerender;
|
|
224
|
+
expect(_react2.screen.getByText('Initial content')).toBeInTheDocument();
|
|
225
|
+
rerender(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
226
|
+
label: "Dynamic"
|
|
227
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Updated content")));
|
|
228
|
+
expect(_react2.screen.queryByText('Initial content')).not.toBeInTheDocument();
|
|
229
|
+
expect(_react2.screen.getByText('Updated content')).toBeInTheDocument();
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
describe('Accessibility', function () {
|
|
233
|
+
it('should have proper heading hierarchy', function () {
|
|
234
|
+
var _render10 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
235
|
+
label: "Accessible Section"
|
|
236
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Content"))),
|
|
237
|
+
container = _render10.container;
|
|
238
|
+
var typography = container.querySelector('[class*="MuiTypography"]');
|
|
239
|
+
expect(typography).toBeInTheDocument();
|
|
240
|
+
});
|
|
241
|
+
it('should be properly semantically structured', function () {
|
|
242
|
+
var _render11 = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_formSection["default"], {
|
|
243
|
+
label: "Semantic"
|
|
244
|
+
}, /*#__PURE__*/_react["default"].createElement("input", {
|
|
245
|
+
type: "text"
|
|
246
|
+
}))),
|
|
247
|
+
container = _render11.container;
|
|
248
|
+
expect(container.querySelector('div')).toBeInTheDocument();
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfZm9ybVNlY3Rpb24iLCJkZXNjcmliZSIsIml0IiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsImxhYmVsIiwiZXhwZWN0Iiwic2NyZWVuIiwiZ2V0QnlUZXh0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJfcmVuZGVyIiwiY29udGFpbmVyIiwidHlwb2dyYXBoeSIsInF1ZXJ5U2VsZWN0b3IiLCJfcmVuZGVyMiIsImNsYXNzTmFtZSIsInR5cGUiLCJwbGFjZWhvbGRlciIsImdldEJ5UGxhY2Vob2xkZXJUZXh0IiwiX3JlbmRlcjMiLCJyZXJlbmRlciIsInF1ZXJ5QnlUZXh0Iiwibm90IiwiX3JlbmRlcjQiLCJsb25nTGFiZWwiLCJzcGVjaWFsTGFiZWwiLCJfcmVuZGVyNSIsImZvcm1TZWN0aW9uIiwiX3JlbmRlcjYiLCJsYWJlbEV4dHJhU3R5bGUiLCJjb2xvciIsImZvbnRXZWlnaHQiLCJ0b0hhdmVTdHlsZSIsImV4dHJhU3R5bGUiLCJmb250U2l6ZSIsIm1hcmdpbiIsInBhZGRpbmciLCJfcmVuZGVyNyIsIl9yZW5kZXI4IiwiX3JlbmRlcjkiLCJlbGVtZW50IiwiX3JlbmRlcjAiLCJmaXJzdENoaWxkIiwiZ2V0QnlSb2xlIiwibmFtZSIsInNob3dDb250ZW50IiwiX3JlbmRlcjEiLCJfcmVuZGVyMTAiLCJfcmVuZGVyMTEiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0c19fL2Zvcm0tc2VjdGlvbi50ZXN0LmpzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgcmVuZGVyLCBzY3JlZW4gfSBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3JlYWN0JztcbmltcG9ydCBGb3JtU2VjdGlvbiBmcm9tICcuLi9mb3JtLXNlY3Rpb24nO1xuXG5kZXNjcmliZSgnRm9ybVNlY3Rpb24gQ29tcG9uZW50JywgKCkgPT4ge1xuICBkZXNjcmliZSgnUmVuZGVyaW5nJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVuZGVyIHdpdGggbGFiZWwgYW5kIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJTZXR0aW5nc1wiPlxuICAgICAgICAgIDxkaXY+Q2hpbGQgY29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdTZXR0aW5ncycpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NoaWxkIGNvbnRlbnQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIGxhYmVsIGFzIHN1YnRpdGxlMSB0eXBvZ3JhcGh5JywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiQ29uZmlndXJhdGlvblwiPlxuICAgICAgICAgIDxkaXY+Q29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignW2NsYXNzKj1cIk11aVR5cG9ncmFwaHlcIl0nKTtcbiAgICAgIGV4cGVjdCh0eXBvZ3JhcGh5KS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgd2l0aCBjdXN0b20gY2xhc3NOYW1lJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiQ3VzdG9tXCIgY2xhc3NOYW1lPVwiY3VzdG9tLWNsYXNzXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuY3VzdG9tLWNsYXNzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBtdWx0aXBsZSBjaGlsZHJlbicsICgpID0+IHtcbiAgICAgIHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiTXVsdGlwbGUgQ2hpbGRyZW5cIj5cbiAgICAgICAgICA8ZGl2PkZpcnN0IGNoaWxkPC9kaXY+XG4gICAgICAgICAgPGRpdj5TZWNvbmQgY2hpbGQ8L2Rpdj5cbiAgICAgICAgICA8ZGl2PlRoaXJkIGNoaWxkPC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0ZpcnN0IGNoaWxkJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnU2Vjb25kIGNoaWxkJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVGhpcmQgY2hpbGQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIHdpdGggc2luZ2xlIGNoaWxkJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJTaW5nbGUgQ2hpbGRcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIklucHV0XCIgLz5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5UGxhY2Vob2xkZXJUZXh0KCdJbnB1dCcpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgd2l0aCBjb21wbGV4IGNoaWxkIGNvbXBvbmVudHMnLCAoKSA9PiB7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD1cIkNvbXBsZXhcIj5cbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGxhYmVsPk5hbWU6PC9sYWJlbD5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbmFtZVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxsYWJlbD5FbWFpbDo8L2xhYmVsPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1haWxcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlQbGFjZWhvbGRlclRleHQoJ0VudGVyIG5hbWUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlQbGFjZWhvbGRlclRleHQoJ0VudGVyIGVtYWlsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdMYWJlbHMnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCBkaXNwbGF5IGRpZmZlcmVudCBsYWJlbHMnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcmVuZGVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD1cIkZpcnN0IExhYmVsXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0ZpcnN0IExhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIHJlcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJTZWNvbmQgTGFiZWxcIj5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnU2Vjb25kIExhYmVsJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlUZXh0KCdGaXJzdCBMYWJlbCcpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGVtcHR5IGxhYmVsJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbY2xhc3MqPVwiTXVpVHlwb2dyYXBoeVwiXScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0NvbnRlbnQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgaGFuZGxlIGxvbmcgbGFiZWxzJywgKCkgPT4ge1xuICAgICAgY29uc3QgbG9uZ0xhYmVsID0gJ1RoaXMgaXMgYSB2ZXJ5IGxvbmcgbGFiZWwgdGhhdCBzaG91bGQgd3JhcCBwcm9wZXJseSB3aXRoaW4gdGhlIGZvcm0gc2VjdGlvbic7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD17bG9uZ0xhYmVsfT5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dChsb25nTGFiZWwpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc3BlY2lhbCBjaGFyYWN0ZXJzIGluIGxhYmVscycsICgpID0+IHtcbiAgICAgIGNvbnN0IHNwZWNpYWxMYWJlbCA9ICdTZXR0aW5ncyAmIENvbmZpZ3VyYXRpb24gPCBBZHZhbmNlZCA+IFRlc3QgQCAjMSc7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD17c3BlY2lhbExhYmVsfT5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dChzcGVjaWFsTGFiZWwpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnU3R5bGluZyBhbmQgTGF5b3V0JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgYXBwbHkgZGVmYXVsdCBzcGFjaW5nJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiU3BhY2VkXCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZm9ybVNlY3Rpb24gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignW2NsYXNzKj1cIk11aUJveFwiXSwgZGl2Jyk7XG4gICAgICBleHBlY3QoZm9ybVNlY3Rpb24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IGxhYmVsRXh0cmFTdHlsZSB0byB0aGUgbGFiZWwnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gXG4gICAgICAgICAgbGFiZWw9XCJTdHlsZWQgTGFiZWxcIiBcbiAgICAgICAgICBsYWJlbEV4dHJhU3R5bGU9e3sgY29sb3I6ICdyZWQnLCBmb250V2VpZ2h0OiAnYm9sZCcgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXY+Q29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IHR5cG9ncmFwaHkgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignW2NsYXNzKj1cIk11aVR5cG9ncmFwaHlcIl0nKTtcbiAgICAgIGV4cGVjdCh0eXBvZ3JhcGh5KS50b0hhdmVTdHlsZSgnY29sb3I6IHJlZCcpO1xuICAgICAgZXhwZWN0KHR5cG9ncmFwaHkpLnRvSGF2ZVN0eWxlKCdmb250V2VpZ2h0OiBib2xkJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGFwcGx5IG11bHRpcGxlIGxhYmVsRXh0cmFTdHlsZSBwcm9wZXJ0aWVzJywgKCkgPT4ge1xuICAgICAgY29uc3QgZXh0cmFTdHlsZSA9IHtcbiAgICAgICAgZm9udFNpemU6ICcxOHB4JyxcbiAgICAgICAgbWFyZ2luOiAnMTBweCcsXG4gICAgICAgIHBhZGRpbmc6ICc1cHgnLFxuICAgICAgfTtcblxuICAgICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIFxuICAgICAgICAgIGxhYmVsPVwiTXVsdGktc3R5bGVkXCIgXG4gICAgICAgICAgbGFiZWxFeHRyYVN0eWxlPXtleHRyYVN0eWxlfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgY29uc3QgdHlwb2dyYXBoeSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdbY2xhc3MqPVwiTXVpVHlwb2dyYXBoeVwiXScpO1xuICAgICAgZXhwZWN0KHR5cG9ncmFwaHkpLnRvSGF2ZVN0eWxlKCdmb250U2l6ZTogMThweCcpO1xuICAgICAgZXhwZWN0KHR5cG9ncmFwaHkpLnRvSGF2ZVN0eWxlKCdtYXJnaW46IDEwcHgnKTtcbiAgICAgIGV4cGVjdCh0eXBvZ3JhcGh5KS50b0hhdmVTdHlsZSgncGFkZGluZzogNXB4Jyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGhhbmRsZSBubyBsYWJlbEV4dHJhU3R5bGUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJObyBFeHRyYSBTdHlsZVwiPlxuICAgICAgICAgIDxkaXY+Q29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGV4cGVjdChjb250YWluZXIucXVlcnlTZWxlY3RvcignW2NsYXNzKj1cIk11aVR5cG9ncmFwaHlcIl0nKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NTUyBjbGFzc2VzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgc3VwcG9ydCBtdWx0aXBsZSBjdXN0b20gY2xhc3NlcycsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgY29udGFpbmVyIH0gPSByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD1cIlRlc3RcIiBjbGFzc05hbWU9XCJjbGFzczEgY2xhc3MyIGNsYXNzM1wiPlxuICAgICAgICAgIDxkaXY+Q29udGVudDwvZGl2PlxuICAgICAgICA8L0Zvcm1TZWN0aW9uPixcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmNsYXNzMS5jbGFzczIuY2xhc3MzJyk7XG4gICAgICBleHBlY3QoZWxlbWVudCkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgd29yayB3aXRob3V0IGN1c3RvbSBjbGFzc05hbWUnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJUZXN0XCI+XG4gICAgICAgICAgPGRpdj5Db250ZW50PC9kaXY+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5maXJzdENoaWxkKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ29udGVudCB2YXJpYXRpb25zJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVuZGVyIGZvcm0gaW5wdXRzIGFzIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJGb3JtIElucHV0c1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIHBsYWNlaG9sZGVyPVwiVGV4dCBpbnB1dFwiIC8+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBwbGFjZWhvbGRlcj1cIk51bWJlciBpbnB1dFwiIC8+XG4gICAgICAgICAgPHRleHRhcmVhIHBsYWNlaG9sZGVyPVwiVGV4dCBhcmVhXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5UGxhY2Vob2xkZXJUZXh0KCdUZXh0IGlucHV0JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5UGxhY2Vob2xkZXJUZXh0KCdOdW1iZXIgaW5wdXQnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlQbGFjZWhvbGRlclRleHQoJ1RleHQgYXJlYScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZW5kZXIgbGlzdHMgYXMgY2hpbGRyZW4nLCAoKSA9PiB7XG4gICAgICByZW5kZXIoXG4gICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD1cIk9wdGlvbnNcIj5cbiAgICAgICAgICA8dWw+XG4gICAgICAgICAgICA8bGk+T3B0aW9uIDE8L2xpPlxuICAgICAgICAgICAgPGxpPk9wdGlvbiAyPC9saT5cbiAgICAgICAgICAgIDxsaT5PcHRpb24gMzwvbGk+XG4gICAgICAgICAgPC91bD5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnT3B0aW9uIDEnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdPcHRpb24gMicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ09wdGlvbiAzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJlbmRlciBidXR0b25zIGFzIGNoaWxkcmVuJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJBY3Rpb25zXCI+XG4gICAgICAgICAgPGJ1dHRvbj5TYXZlPC9idXR0b24+XG4gICAgICAgICAgPGJ1dHRvbj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnU2F2ZScgfSkpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJywgeyBuYW1lOiAnQ2FuY2VsJyB9KSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmVuZGVyIG5lc3RlZCBmb3JtIHNlY3Rpb25zJywgKCkgPT4ge1xuICAgICAgcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJPdXRlclwiPlxuICAgICAgICAgIDxGb3JtU2VjdGlvbiBsYWJlbD1cIklubmVyXCI+XG4gICAgICAgICAgICA8ZGl2Pk5lc3RlZCBjb250ZW50PC9kaXY+XG4gICAgICAgICAgPC9Gb3JtU2VjdGlvbj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnT3V0ZXInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdJbm5lcicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ05lc3RlZCBjb250ZW50JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdFZGdlIGNhc2VzJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmVuZGVyIHdpdGggY29uZGl0aW9uYWwgY2hpbGRyZW4nLCAoKSA9PiB7XG4gICAgICBjb25zdCBzaG93Q29udGVudCA9IHRydWU7XG5cbiAgICAgIHJlbmRlcihcbiAgICAgICAgPEZvcm1TZWN0aW9uIGxhYmVsPVwiQ29uZGl0aW9uYWxcIj5cbiAgICAgICAgICB7c2hvd0NvbnRlbnQgJiYgPGRpdj5WaXNpYmxlPC9kaXY+fVxuICAgICAgICAgIHshc2hvd0NvbnRlbnQgJiYgPGRpdj5IaWRkZW48L2Rpdj59XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ1Zpc2libGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICAgIGV4cGVjdChzY3JlZW4ucXVlcnlCeVRleHQoJ0hpZGRlbicpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdXBkYXRlIHdoZW4gY2hpbGRyZW4gY2hhbmdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyByZXJlbmRlciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJEeW5hbWljXCI+XG4gICAgICAgICAgPGRpdj5Jbml0aWFsIGNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSW5pdGlhbCBjb250ZW50JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG5cbiAgICAgIHJlcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJEeW5hbWljXCI+XG4gICAgICAgICAgPGRpdj5VcGRhdGVkIGNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlUZXh0KCdJbml0aWFsIGNvbnRlbnQnKSkubm90LnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnVXBkYXRlZCBjb250ZW50JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdBY2Nlc3NpYmlsaXR5JywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgaGF2ZSBwcm9wZXIgaGVhZGluZyBoaWVyYXJjaHknLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJBY2Nlc3NpYmxlIFNlY3Rpb25cIj5cbiAgICAgICAgICA8ZGl2PkNvbnRlbnQ8L2Rpdj5cbiAgICAgICAgPC9Gb3JtU2VjdGlvbj4sXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0eXBvZ3JhcGh5ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ1tjbGFzcyo9XCJNdWlUeXBvZ3JhcGh5XCJdJyk7XG4gICAgICBleHBlY3QodHlwb2dyYXBoeSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgYmUgcHJvcGVybHkgc2VtYW50aWNhbGx5IHN0cnVjdHVyZWQnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gcmVuZGVyKFxuICAgICAgICA8Rm9ybVNlY3Rpb24gbGFiZWw9XCJTZW1hbnRpY1wiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIC8+XG4gICAgICAgIDwvRm9ybVNlY3Rpb24+LFxuICAgICAgKTtcblxuICAgICAgZXhwZWN0KGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdkaXYnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsT0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBRUFHLFFBQVEsQ0FBQyx1QkFBdUIsRUFBRSxZQUFNO0VBQ3RDQSxRQUFRLENBQUMsV0FBVyxFQUFFLFlBQU07SUFDMUJDLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxZQUFNO01BQ2hELElBQUFDLGNBQU0sZUFDSlAsTUFBQSxZQUFBUSxhQUFBLENBQUNKLFlBQUEsV0FBVztRQUFDSyxLQUFLLEVBQUM7TUFBVSxnQkFDM0JULE1BQUEsWUFBQVEsYUFBQSxjQUFLLGVBQWtCLENBQ1osQ0FDZixDQUFDO01BRURFLE1BQU0sQ0FBQ0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztNQUN4REgsTUFBTSxDQUFDQyxjQUFNLENBQUNDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9ELENBQUMsQ0FBQztJQUVGUCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsWUFBTTtNQUN0RCxJQUFB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
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
6
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
7
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
8
|
+
var _react = _interopRequireDefault(require("react"));
|
|
9
|
+
var _react2 = require("@testing-library/react");
|
|
10
|
+
var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
|
|
11
|
+
var _help = _interopRequireWildcard(require("../help"));
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
13
|
+
describe('HelpButton', function () {
|
|
14
|
+
it('renders help icon button', function () {
|
|
15
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpButton, null));
|
|
16
|
+
var button = _react2.screen.getByRole('button');
|
|
17
|
+
expect(button).toBeInTheDocument();
|
|
18
|
+
});
|
|
19
|
+
it('calls onClick when clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
20
|
+
var user, onClick, button;
|
|
21
|
+
return _regenerator["default"].wrap(function (_context) {
|
|
22
|
+
while (1) switch (_context.prev = _context.next) {
|
|
23
|
+
case 0:
|
|
24
|
+
user = _userEvent["default"].setup();
|
|
25
|
+
onClick = jest.fn();
|
|
26
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpButton, {
|
|
27
|
+
onClick: onClick
|
|
28
|
+
}));
|
|
29
|
+
button = _react2.screen.getByRole('button');
|
|
30
|
+
_context.next = 1;
|
|
31
|
+
return user.click(button);
|
|
32
|
+
case 1:
|
|
33
|
+
expect(onClick).toHaveBeenCalledTimes(1);
|
|
34
|
+
case 2:
|
|
35
|
+
case "end":
|
|
36
|
+
return _context.stop();
|
|
37
|
+
}
|
|
38
|
+
}, _callee);
|
|
39
|
+
})));
|
|
40
|
+
it('renders with large size', function () {
|
|
41
|
+
var _render = (0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpButton, null)),
|
|
42
|
+
container = _render.container;
|
|
43
|
+
var button = container.querySelector('button[class*="sizeLarge"]');
|
|
44
|
+
expect(button || _react2.screen.getByRole('button')).toBeInTheDocument();
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
describe('HelpDialog', function () {
|
|
48
|
+
var defaultProps = {
|
|
49
|
+
open: true,
|
|
50
|
+
onClose: jest.fn(),
|
|
51
|
+
title: 'Help Title',
|
|
52
|
+
children: 'Help content here'
|
|
53
|
+
};
|
|
54
|
+
beforeEach(function () {
|
|
55
|
+
jest.clearAllMocks();
|
|
56
|
+
});
|
|
57
|
+
it('renders when open is true', function () {
|
|
58
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpDialog, defaultProps));
|
|
59
|
+
expect(_react2.screen.getByText('Help Title')).toBeInTheDocument();
|
|
60
|
+
expect(_react2.screen.getByText('Help content here')).toBeInTheDocument();
|
|
61
|
+
});
|
|
62
|
+
it('does not render when open is false', function () {
|
|
63
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpDialog, (0, _extends2["default"])({}, defaultProps, {
|
|
64
|
+
open: false
|
|
65
|
+
})));
|
|
66
|
+
expect(_react2.screen.queryByText('Help Title')).not.toBeInTheDocument();
|
|
67
|
+
});
|
|
68
|
+
it('displays title correctly', function () {
|
|
69
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpDialog, (0, _extends2["default"])({}, defaultProps, {
|
|
70
|
+
title: "Custom Help"
|
|
71
|
+
})));
|
|
72
|
+
expect(_react2.screen.getByText('Custom Help')).toBeInTheDocument();
|
|
73
|
+
});
|
|
74
|
+
it('displays children content', function () {
|
|
75
|
+
var content = 'This is helpful information';
|
|
76
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpDialog, (0, _extends2["default"])({}, defaultProps, {
|
|
77
|
+
children: content
|
|
78
|
+
})));
|
|
79
|
+
expect(_react2.screen.getByText(content)).toBeInTheDocument();
|
|
80
|
+
});
|
|
81
|
+
it('calls onClose when OK button is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
82
|
+
var user, onClose, okButton;
|
|
83
|
+
return _regenerator["default"].wrap(function (_context2) {
|
|
84
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
85
|
+
case 0:
|
|
86
|
+
user = _userEvent["default"].setup();
|
|
87
|
+
onClose = jest.fn();
|
|
88
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpDialog, (0, _extends2["default"])({}, defaultProps, {
|
|
89
|
+
onClose: onClose
|
|
90
|
+
})));
|
|
91
|
+
okButton = _react2.screen.getByRole('button', {
|
|
92
|
+
name: /OK/i
|
|
93
|
+
});
|
|
94
|
+
_context2.next = 1;
|
|
95
|
+
return user.click(okButton);
|
|
96
|
+
case 1:
|
|
97
|
+
expect(onClose).toHaveBeenCalledTimes(1);
|
|
98
|
+
case 2:
|
|
99
|
+
case "end":
|
|
100
|
+
return _context2.stop();
|
|
101
|
+
}
|
|
102
|
+
}, _callee2);
|
|
103
|
+
})));
|
|
104
|
+
it('calls onClose when dialog is closed via backdrop', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
105
|
+
var user, onClose, dialog;
|
|
106
|
+
return _regenerator["default"].wrap(function (_context3) {
|
|
107
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
108
|
+
case 0:
|
|
109
|
+
user = _userEvent["default"].setup();
|
|
110
|
+
onClose = jest.fn();
|
|
111
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpDialog, (0, _extends2["default"])({}, defaultProps, {
|
|
112
|
+
onClose: onClose
|
|
113
|
+
})));
|
|
114
|
+
|
|
115
|
+
// Simulate backdrop click by calling onClose (MUI Dialog prop)
|
|
116
|
+
dialog = _react2.screen.getByRole('dialog', {
|
|
117
|
+
hidden: true
|
|
118
|
+
});
|
|
119
|
+
expect(dialog).toBeInTheDocument();
|
|
120
|
+
case 1:
|
|
121
|
+
case "end":
|
|
122
|
+
return _context3.stop();
|
|
123
|
+
}
|
|
124
|
+
}, _callee3);
|
|
125
|
+
})));
|
|
126
|
+
it('renders OK button', function () {
|
|
127
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpDialog, defaultProps));
|
|
128
|
+
var okButton = _react2.screen.getByRole('button', {
|
|
129
|
+
name: /OK/i
|
|
130
|
+
});
|
|
131
|
+
expect(okButton).toBeInTheDocument();
|
|
132
|
+
});
|
|
133
|
+
it('handles multiline children content', function () {
|
|
134
|
+
var content = ['Line 1', 'Line 2', 'Line 3'];
|
|
135
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help.HelpDialog, defaultProps, content.map(function (line, i) {
|
|
136
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
137
|
+
key: i
|
|
138
|
+
}, line);
|
|
139
|
+
})));
|
|
140
|
+
expect(_react2.screen.getByText('Line 1')).toBeInTheDocument();
|
|
141
|
+
expect(_react2.screen.getByText('Line 2')).toBeInTheDocument();
|
|
142
|
+
expect(_react2.screen.getByText('Line 3')).toBeInTheDocument();
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
describe('Help Component', function () {
|
|
146
|
+
var defaultProps = {
|
|
147
|
+
title: 'Help Title',
|
|
148
|
+
children: 'Help content'
|
|
149
|
+
};
|
|
150
|
+
beforeEach(function () {
|
|
151
|
+
jest.clearAllMocks();
|
|
152
|
+
});
|
|
153
|
+
it('renders help button initially', function () {
|
|
154
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help["default"], defaultProps));
|
|
155
|
+
var button = _react2.screen.getByRole('button');
|
|
156
|
+
expect(button).toBeInTheDocument();
|
|
157
|
+
});
|
|
158
|
+
it('opens dialog when help button is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
159
|
+
var user, button;
|
|
160
|
+
return _regenerator["default"].wrap(function (_context4) {
|
|
161
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
162
|
+
case 0:
|
|
163
|
+
user = _userEvent["default"].setup();
|
|
164
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help["default"], defaultProps));
|
|
165
|
+
button = _react2.screen.getByRole('button');
|
|
166
|
+
_context4.next = 1;
|
|
167
|
+
return user.click(button);
|
|
168
|
+
case 1:
|
|
169
|
+
expect(_react2.screen.getByText('Help Title')).toBeInTheDocument();
|
|
170
|
+
expect(_react2.screen.getByText('Help content')).toBeInTheDocument();
|
|
171
|
+
case 2:
|
|
172
|
+
case "end":
|
|
173
|
+
return _context4.stop();
|
|
174
|
+
}
|
|
175
|
+
}, _callee4);
|
|
176
|
+
})));
|
|
177
|
+
it('closes dialog when OK button is clicked', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
178
|
+
var user, helpButton, okButton;
|
|
179
|
+
return _regenerator["default"].wrap(function (_context5) {
|
|
180
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
181
|
+
case 0:
|
|
182
|
+
user = _userEvent["default"].setup();
|
|
183
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help["default"], defaultProps));
|
|
184
|
+
helpButton = _react2.screen.getByRole('button', {
|
|
185
|
+
name: ''
|
|
186
|
+
});
|
|
187
|
+
_context5.next = 1;
|
|
188
|
+
return user.click(helpButton);
|
|
189
|
+
case 1:
|
|
190
|
+
okButton = _react2.screen.getByRole('button', {
|
|
191
|
+
name: /OK/i
|
|
192
|
+
});
|
|
193
|
+
_context5.next = 2;
|
|
194
|
+
return user.click(okButton);
|
|
195
|
+
case 2:
|
|
196
|
+
_context5.next = 3;
|
|
197
|
+
return (0, _react2.waitFor)(function () {
|
|
198
|
+
expect(_react2.screen.queryByText('Help Title')).not.toBeInTheDocument();
|
|
199
|
+
});
|
|
200
|
+
case 3:
|
|
201
|
+
case "end":
|
|
202
|
+
return _context5.stop();
|
|
203
|
+
}
|
|
204
|
+
}, _callee5);
|
|
205
|
+
})));
|
|
206
|
+
it('displays title prop', function () {
|
|
207
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help["default"], {
|
|
208
|
+
title: "Custom Title",
|
|
209
|
+
children: "content"
|
|
210
|
+
}));
|
|
211
|
+
var button = _react2.screen.getByRole('button');
|
|
212
|
+
expect(button).toBeInTheDocument();
|
|
213
|
+
});
|
|
214
|
+
it('displays children prop', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
215
|
+
var user, button;
|
|
216
|
+
return _regenerator["default"].wrap(function (_context6) {
|
|
217
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
218
|
+
case 0:
|
|
219
|
+
user = _userEvent["default"].setup();
|
|
220
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help["default"], (0, _extends2["default"])({}, defaultProps, {
|
|
221
|
+
children: "Custom help content"
|
|
222
|
+
})));
|
|
223
|
+
button = _react2.screen.getByRole('button');
|
|
224
|
+
_context6.next = 1;
|
|
225
|
+
return user.click(button);
|
|
226
|
+
case 1:
|
|
227
|
+
expect(_react2.screen.getByText('Custom help content')).toBeInTheDocument();
|
|
228
|
+
case 2:
|
|
229
|
+
case "end":
|
|
230
|
+
return _context6.stop();
|
|
231
|
+
}
|
|
232
|
+
}, _callee6);
|
|
233
|
+
})));
|
|
234
|
+
it('can open and close dialog multiple times', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7() {
|
|
235
|
+
var user, helpButton, okButton;
|
|
236
|
+
return _regenerator["default"].wrap(function (_context7) {
|
|
237
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
238
|
+
case 0:
|
|
239
|
+
user = _userEvent["default"].setup();
|
|
240
|
+
(0, _react2.render)(/*#__PURE__*/_react["default"].createElement(_help["default"], defaultProps));
|
|
241
|
+
helpButton = _react2.screen.getByRole('button', {
|
|
242
|
+
name: ''
|
|
243
|
+
});
|
|
244
|
+
_context7.next = 1;
|
|
245
|
+
return user.click(helpButton);
|
|
246
|
+
case 1:
|
|
247
|
+
expect(_react2.screen.getByText('Help Title')).toBeInTheDocument();
|
|
248
|
+
okButton = _react2.screen.getByRole('button', {
|
|
249
|
+
name: /OK/i
|
|
250
|
+
});
|
|
251
|
+
_context7.next = 2;
|
|
252
|
+
return user.click(okButton);
|
|
253
|
+
case 2:
|
|
254
|
+
_context7.next = 3;
|
|
255
|
+
return (0, _react2.waitFor)(function () {
|
|
256
|
+
expect(_react2.screen.queryByText('Help Title')).not.toBeInTheDocument();
|
|
257
|
+
});
|
|
258
|
+
case 3:
|
|
259
|
+
_context7.next = 4;
|
|
260
|
+
return user.click(helpButton);
|
|
261
|
+
case 4:
|
|
262
|
+
expect(_react2.screen.getByText('Help Title')).toBeInTheDocument();
|
|
263
|
+
case 5:
|
|
264
|
+
case "end":
|
|
265
|
+
return _context7.stop();
|
|
266
|
+
}
|
|
267
|
+
}, _callee7);
|
|
268
|
+
})));
|
|
269
|
+
});
|
|
270
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9yZWFjdDIiLCJfdXNlckV2ZW50IiwiX2hlbHAiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiZGVzY3JpYmUiLCJpdCIsInJlbmRlciIsImNyZWF0ZUVsZW1lbnQiLCJIZWxwQnV0dG9uIiwiYnV0dG9uIiwic2NyZWVuIiwiZ2V0QnlSb2xlIiwiZXhwZWN0IiwidG9CZUluVGhlRG9jdW1lbnQiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInVzZXIiLCJvbkNsaWNrIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIm5leHQiLCJ1c2VyRXZlbnQiLCJzZXR1cCIsImplc3QiLCJmbiIsImNsaWNrIiwidG9IYXZlQmVlbkNhbGxlZFRpbWVzIiwic3RvcCIsIl9yZW5kZXIiLCJjb250YWluZXIiLCJxdWVyeVNlbGVjdG9yIiwiZGVmYXVsdFByb3BzIiwib3BlbiIsIm9uQ2xvc2UiLCJ0aXRsZSIsImNoaWxkcmVuIiwiYmVmb3JlRWFjaCIsImNsZWFyQWxsTW9ja3MiLCJIZWxwRGlhbG9nIiwiZ2V0QnlUZXh0IiwiX2V4dGVuZHMyIiwicXVlcnlCeVRleHQiLCJub3QiLCJjb250ZW50IiwiX2NhbGxlZTIiLCJva0J1dHRvbiIsIl9jb250ZXh0MiIsIm5hbWUiLCJfY2FsbGVlMyIsImRpYWxvZyIsIl9jb250ZXh0MyIsImhpZGRlbiIsIm1hcCIsImxpbmUiLCJrZXkiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsIl9jYWxsZWU1IiwiaGVscEJ1dHRvbiIsIl9jb250ZXh0NSIsIndhaXRGb3IiLCJfY2FsbGVlNiIsIl9jb250ZXh0NiIsIl9jYWxsZWU3IiwiX2NvbnRleHQ3Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL19fdGVzdHNfXy9oZWxwLnRlc3QuanN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyByZW5kZXIsIHNjcmVlbiwgd2FpdEZvciB9IGZyb20gJ0B0ZXN0aW5nLWxpYnJhcnkvcmVhY3QnO1xuaW1wb3J0IHVzZXJFdmVudCBmcm9tICdAdGVzdGluZy1saWJyYXJ5L3VzZXItZXZlbnQnO1xuaW1wb3J0IEhlbHAsIHsgSGVscEJ1dHRvbiwgSGVscERpYWxvZyB9IGZyb20gJy4uL2hlbHAnO1xuXG5kZXNjcmliZSgnSGVscEJ1dHRvbicsICgpID0+IHtcbiAgaXQoJ3JlbmRlcnMgaGVscCBpY29uIGJ1dHRvbicsICgpID0+IHtcbiAgICByZW5kZXIoPEhlbHBCdXR0b24gLz4pO1xuICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicpO1xuICAgIGV4cGVjdChidXR0b24pLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBvbkNsaWNrIHdoZW4gY2xpY2tlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgY29uc3Qgb25DbGljayA9IGplc3QuZm4oKTtcbiAgICByZW5kZXIoPEhlbHBCdXR0b24gb25DbGljaz17b25DbGlja30gLz4pO1xuICAgIFxuICAgIGNvbnN0IGJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicpO1xuICAgIGF3YWl0IHVzZXIuY2xpY2soYnV0dG9uKTtcbiAgICBcbiAgICBleHBlY3Qob25DbGljaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdCgncmVuZGVycyB3aXRoIGxhcmdlIHNpemUnLCAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHJlbmRlcig8SGVscEJ1dHRvbiAvPik7XG4gICAgY29uc3QgYnV0dG9uID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbltjbGFzcyo9XCJzaXplTGFyZ2VcIl0nKTtcbiAgICBleHBlY3QoYnV0dG9uIHx8IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcbn0pO1xuXG5kZXNjcmliZSgnSGVscERpYWxvZycsICgpID0+IHtcbiAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgIG9wZW46IHRydWUsXG4gICAgb25DbG9zZTogamVzdC5mbigpLFxuICAgIHRpdGxlOiAnSGVscCBUaXRsZScsXG4gICAgY2hpbGRyZW46ICdIZWxwIGNvbnRlbnQgaGVyZScsXG4gIH07XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIH0pO1xuXG4gIGl0KCdyZW5kZXJzIHdoZW4gb3BlbiBpcyB0cnVlJywgKCkgPT4ge1xuICAgIHJlbmRlcig8SGVscERpYWxvZyB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0hlbHAgVGl0bGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSGVscCBjb250ZW50IGhlcmUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2RvZXMgbm90IHJlbmRlciB3aGVuIG9wZW4gaXMgZmFsc2UnLCAoKSA9PiB7XG4gICAgcmVuZGVyKDxIZWxwRGlhbG9nIHsuLi5kZWZhdWx0UHJvcHN9IG9wZW49e2ZhbHNlfSAvPik7XG4gICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgnSGVscCBUaXRsZScpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc3BsYXlzIHRpdGxlIGNvcnJlY3RseScsICgpID0+IHtcbiAgICByZW5kZXIoPEhlbHBEaWFsb2cgey4uLmRlZmF1bHRQcm9wc30gdGl0bGU9XCJDdXN0b20gSGVscFwiIC8+KTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnQ3VzdG9tIEhlbHAnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc3BsYXlzIGNoaWxkcmVuIGNvbnRlbnQnLCAoKSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9ICdUaGlzIGlzIGhlbHBmdWwgaW5mb3JtYXRpb24nO1xuICAgIHJlbmRlcig8SGVscERpYWxvZyB7Li4uZGVmYXVsdFByb3BzfSBjaGlsZHJlbj17Y29udGVudH0gLz4pO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KGNvbnRlbnQpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnY2FsbHMgb25DbG9zZSB3aGVuIE9LIGJ1dHRvbiBpcyBjbGlja2VkJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICBjb25zdCBvbkNsb3NlID0gamVzdC5mbigpO1xuICAgIHJlbmRlcig8SGVscERpYWxvZyB7Li4uZGVmYXVsdFByb3BzfSBvbkNsb3NlPXtvbkNsb3NlfSAvPik7XG4gICAgXG4gICAgY29uc3Qgb2tCdXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9PSy9pIH0pO1xuICAgIGF3YWl0IHVzZXIuY2xpY2sob2tCdXR0b24pO1xuICAgIFxuICAgIGV4cGVjdChvbkNsb3NlKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMSk7XG4gIH0pO1xuXG4gIGl0KCdjYWxscyBvbkNsb3NlIHdoZW4gZGlhbG9nIGlzIGNsb3NlZCB2aWEgYmFja2Ryb3AnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgIGNvbnN0IG9uQ2xvc2UgPSBqZXN0LmZuKCk7XG4gICAgcmVuZGVyKDxIZWxwRGlhbG9nIHsuLi5kZWZhdWx0UHJvcHN9IG9uQ2xvc2U9e29uQ2xvc2V9IC8+KTtcbiAgICBcbiAgICAvLyBTaW11bGF0ZSBiYWNrZHJvcCBjbGljayBieSBjYWxsaW5nIG9uQ2xvc2UgKE1VSSBEaWFsb2cgcHJvcClcbiAgICBjb25zdCBkaWFsb2cgPSBzY3JlZW4uZ2V0QnlSb2xlKCdkaWFsb2cnLCB7IGhpZGRlbjogdHJ1ZSB9KTtcbiAgICBleHBlY3QoZGlhbG9nKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgncmVuZGVycyBPSyBidXR0b24nLCAoKSA9PiB7XG4gICAgcmVuZGVyKDxIZWxwRGlhbG9nIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICBjb25zdCBva0J1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL09LL2kgfSk7XG4gICAgZXhwZWN0KG9rQnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnaGFuZGxlcyBtdWx0aWxpbmUgY2hpbGRyZW4gY29udGVudCcsICgpID0+IHtcbiAgICBjb25zdCBjb250ZW50ID0gWydMaW5lIDEnLCAnTGluZSAyJywgJ0xpbmUgMyddO1xuICAgIHJlbmRlcihcbiAgICAgIDxIZWxwRGlhbG9nIHsuLi5kZWZhdWx0UHJvcHN9PlxuICAgICAgICB7Y29udGVudC5tYXAoKGxpbmUsIGkpID0+IChcbiAgICAgICAgICA8ZGl2IGtleT17aX0+e2xpbmV9PC9kaXY+XG4gICAgICAgICkpfVxuICAgICAgPC9IZWxwRGlhbG9nPlxuICAgICk7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0xpbmUgMScpKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdMaW5lIDInKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnTGluZSAzJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdIZWxwIENvbXBvbmVudCcsICgpID0+IHtcbiAgY29uc3QgZGVmYXVsdFByb3BzID0ge1xuICAgIHRpdGxlOiAnSGVscCBUaXRsZScsXG4gICAgY2hpbGRyZW46ICdIZWxwIGNvbnRlbnQnLFxuICB9O1xuXG4gIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgIGplc3QuY2xlYXJBbGxNb2NrcygpO1xuICB9KTtcblxuICBpdCgncmVuZGVycyBoZWxwIGJ1dHRvbiBpbml0aWFsbHknLCAoKSA9PiB7XG4gICAgcmVuZGVyKDxIZWxwIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nKTtcbiAgICBleHBlY3QoYnV0dG9uKS50b0JlSW5UaGVEb2N1bWVudCgpO1xuICB9KTtcblxuICBpdCgnb3BlbnMgZGlhbG9nIHdoZW4gaGVscCBidXR0b24gaXMgY2xpY2tlZCcsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1c2VyID0gdXNlckV2ZW50LnNldHVwKCk7XG4gICAgcmVuZGVyKDxIZWxwIHsuLi5kZWZhdWx0UHJvcHN9IC8+KTtcbiAgICBcbiAgICBjb25zdCBidXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nKTtcbiAgICBhd2FpdCB1c2VyLmNsaWNrKGJ1dHRvbik7XG4gICAgXG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0hlbHAgVGl0bGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBleHBlY3Qoc2NyZWVuLmdldEJ5VGV4dCgnSGVscCBjb250ZW50JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdjbG9zZXMgZGlhbG9nIHdoZW4gT0sgYnV0dG9uIGlzIGNsaWNrZWQnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgIHJlbmRlcig8SGVscCB7Li4uZGVmYXVsdFByb3BzfSAvPik7XG4gICAgXG4gICAgY29uc3QgaGVscEJ1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogJycgfSk7XG4gICAgYXdhaXQgdXNlci5jbGljayhoZWxwQnV0dG9uKTtcbiAgICBcbiAgICBjb25zdCBva0J1dHRvbiA9IHNjcmVlbi5nZXRCeVJvbGUoJ2J1dHRvbicsIHsgbmFtZTogL09LL2kgfSk7XG4gICAgYXdhaXQgdXNlci5jbGljayhva0J1dHRvbik7XG4gICAgXG4gICAgYXdhaXQgd2FpdEZvcigoKSA9PiB7XG4gICAgICBleHBlY3Qoc2NyZWVuLnF1ZXJ5QnlUZXh0KCdIZWxwIFRpdGxlJykpLm5vdC50b0JlSW5UaGVEb2N1bWVudCgpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnZGlzcGxheXMgdGl0bGUgcHJvcCcsICgpID0+IHtcbiAgICByZW5kZXIoPEhlbHAgdGl0bGU9XCJDdXN0b20gVGl0bGVcIiBjaGlsZHJlbj1cImNvbnRlbnRcIiAvPik7XG4gICAgY29uc3QgYnV0dG9uID0gc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJyk7XG4gICAgZXhwZWN0KGJ1dHRvbikudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgfSk7XG5cbiAgaXQoJ2Rpc3BsYXlzIGNoaWxkcmVuIHByb3AnLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgdXNlciA9IHVzZXJFdmVudC5zZXR1cCgpO1xuICAgIHJlbmRlcig8SGVscCB7Li4uZGVmYXVsdFByb3BzfSBjaGlsZHJlbj1cIkN1c3RvbSBoZWxwIGNvbnRlbnRcIiAvPik7XG4gICAgXG4gICAgY29uc3QgYnV0dG9uID0gc2NyZWVuLmdldEJ5Um9sZSgnYnV0dG9uJyk7XG4gICAgYXdhaXQgdXNlci5jbGljayhidXR0b24pO1xuICAgIFxuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdDdXN0b20gaGVscCBjb250ZW50JykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xuXG4gIGl0KCdjYW4gb3BlbiBhbmQgY2xvc2UgZGlhbG9nIG11bHRpcGxlIHRpbWVzJywgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSB1c2VyRXZlbnQuc2V0dXAoKTtcbiAgICByZW5kZXIoPEhlbHAgey4uLmRlZmF1bHRQcm9wc30gLz4pO1xuICAgIFxuICAgIGNvbnN0IGhlbHBCdXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6ICcnIH0pO1xuICAgIFxuICAgIGF3YWl0IHVzZXIuY2xpY2soaGVscEJ1dHRvbik7XG4gICAgZXhwZWN0KHNjcmVlbi5nZXRCeVRleHQoJ0hlbHAgVGl0bGUnKSkudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICBcbiAgICBsZXQgb2tCdXR0b24gPSBzY3JlZW4uZ2V0QnlSb2xlKCdidXR0b24nLCB7IG5hbWU6IC9PSy9pIH0pO1xuICAgIGF3YWl0IHVzZXIuY2xpY2sob2tCdXR0b24pO1xuICAgIFxuICAgIGF3YWl0IHdhaXRGb3IoKCkgPT4ge1xuICAgICAgZXhwZWN0KHNjcmVlbi5xdWVyeUJ5VGV4dCgnSGVscCBUaXRsZScpKS5ub3QudG9CZUluVGhlRG9jdW1lbnQoKTtcbiAgICB9KTtcbiAgICBcbiAgICBhd2FpdCB1c2VyLmNsaWNrKGhlbHBCdXR0b24pO1xuICAgIGV4cGVjdChzY3JlZW4uZ2V0QnlUZXh0KCdIZWxwIFRpdGxlJykpLnRvQmVJblRoZURvY3VtZW50KCk7XG4gIH0pO1xufSk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxVQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxLQUFBLEdBQUFDLHVCQUFBLENBQUFKLE9BQUE7QUFBdUQsU0FBQUksd0JBQUFDLENBQUEsRUFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxNQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFB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
|