@dynatrace/strato-components-testing 3.11.3 → 3.12.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/esm/jest/index.js +9 -1
- package/esm/jest/index.js.map +2 -2
- package/esm/jest/mocks/create-range-mock.js +4 -22
- package/esm/jest/mocks/create-range-mock.js.map +2 -2
- package/esm/jest/mocks/fetch-mock.js +4 -14
- package/esm/jest/mocks/fetch-mock.js.map +2 -2
- package/esm/jest/mocks/framer-motion-mock.js +3 -48
- package/esm/jest/mocks/framer-motion-mock.js.map +3 -3
- package/esm/jest/mocks/intersection-observer-mock.js +4 -35
- package/esm/jest/mocks/intersection-observer-mock.js.map +2 -2
- package/esm/jest/mocks/match-media-mock.js +4 -21
- package/esm/jest/mocks/match-media-mock.js.map +2 -2
- package/esm/jest/mocks/resize-observer-mock.js +4 -18
- package/esm/jest/mocks/resize-observer-mock.js.map +2 -2
- package/esm/jest/mocks/scroll-into-view-mock.js +4 -10
- package/esm/jest/mocks/scroll-into-view-mock.js.map +2 -2
- package/esm/jest/testing-helpers/filters/filter-field.js +12 -415
- package/esm/jest/testing-helpers/filters/filter-field.js.map +2 -2
- package/esm/jest/testing-helpers/tables/datatable.js +1 -11
- package/esm/jest/testing-helpers/tables/datatable.js.map +2 -2
- package/esm/jest/testing-helpers/utils/setup-user-event.js +1 -1
- package/esm/jest/testing-helpers/utils/setup-user-event.js.map +2 -2
- package/esm/shared/mocks/create-range-mock.js +29 -0
- package/esm/shared/mocks/create-range-mock.js.map +7 -0
- package/esm/shared/mocks/fetch-mock.js +23 -0
- package/esm/shared/mocks/fetch-mock.js.map +7 -0
- package/esm/shared/mocks/framer-motion-mock.js +54 -0
- package/esm/shared/mocks/framer-motion-mock.js.map +7 -0
- package/esm/shared/mocks/intersection-observer-mock.js +39 -0
- package/esm/shared/mocks/intersection-observer-mock.js.map +7 -0
- package/esm/shared/mocks/match-media-mock.js +28 -0
- package/esm/shared/mocks/match-media-mock.js.map +7 -0
- package/esm/shared/mocks/resize-observer-mock.js +25 -0
- package/esm/shared/mocks/resize-observer-mock.js.map +7 -0
- package/esm/shared/mocks/scroll-into-view-mock.js +17 -0
- package/esm/shared/mocks/scroll-into-view-mock.js.map +7 -0
- package/esm/shared/testing-helpers/filters/filter-field.js +439 -0
- package/esm/shared/testing-helpers/filters/filter-field.js.map +7 -0
- package/esm/vitest/index.js +149 -0
- package/esm/vitest/index.js.map +7 -0
- package/esm/vitest/mocks/create-range-mock.js +10 -0
- package/esm/vitest/mocks/create-range-mock.js.map +7 -0
- package/esm/vitest/mocks/fetch-mock.js +10 -0
- package/esm/vitest/mocks/fetch-mock.js.map +7 -0
- package/esm/vitest/mocks/framer-motion-mock.js +13 -0
- package/esm/vitest/mocks/framer-motion-mock.js.map +7 -0
- package/esm/vitest/mocks/intersection-observer-mock.js +10 -0
- package/esm/vitest/mocks/intersection-observer-mock.js.map +7 -0
- package/esm/vitest/mocks/match-media-mock.js +10 -0
- package/esm/vitest/mocks/match-media-mock.js.map +7 -0
- package/esm/vitest/mocks/resize-observer-mock.js +10 -0
- package/esm/vitest/mocks/resize-observer-mock.js.map +7 -0
- package/esm/vitest/mocks/scroll-into-view-mock.js +10 -0
- package/esm/vitest/mocks/scroll-into-view-mock.js.map +7 -0
- package/esm/vitest/preset/index.js +5 -0
- package/esm/vitest/preset/index.js.map +7 -0
- package/esm/vitest/preset/vitest-preset.js +9 -0
- package/esm/vitest/preset/vitest-preset.js.map +7 -0
- package/esm/vitest/setup/index.js +77 -0
- package/esm/vitest/setup/index.js.map +7 -0
- package/esm/vitest/testing-helpers/filters/filter-field.js +24 -0
- package/esm/vitest/testing-helpers/filters/filter-field.js.map +7 -0
- package/esm/vitest/testing-helpers/utils/isFakeTimersEnabled.js +8 -0
- package/esm/vitest/testing-helpers/utils/isFakeTimersEnabled.js.map +7 -0
- package/esm/vitest/testing-helpers/utils/setup-user-event.js +16 -0
- package/esm/vitest/testing-helpers/utils/setup-user-event.js.map +7 -0
- package/jest/index.d.ts +3 -1
- package/jest/index.js +4 -0
- package/jest/mocks/create-range-mock.d.ts +4 -11
- package/jest/mocks/create-range-mock.js +4 -22
- package/jest/mocks/fetch-mock.d.ts +4 -10
- package/jest/mocks/fetch-mock.js +4 -14
- package/jest/mocks/framer-motion-mock.js +3 -46
- package/jest/mocks/intersection-observer-mock.d.ts +4 -11
- package/jest/mocks/intersection-observer-mock.js +4 -35
- package/jest/mocks/match-media-mock.d.ts +4 -11
- package/jest/mocks/match-media-mock.js +4 -21
- package/jest/mocks/resize-observer-mock.d.ts +4 -13
- package/jest/mocks/resize-observer-mock.js +4 -18
- package/jest/mocks/scroll-into-view-mock.d.ts +4 -10
- package/jest/mocks/scroll-into-view-mock.js +4 -10
- package/jest/testing-helpers/filters/filter-field.d.ts +5 -109
- package/jest/testing-helpers/filters/filter-field.js +11 -414
- package/jest/testing-helpers/tables/datatable.js +1 -11
- package/jest/testing-helpers/utils/setup-user-event.js +1 -1
- package/package.json +3 -3
- package/shared/mocks/create-range-mock.d.ts +7 -0
- package/shared/mocks/create-range-mock.js +47 -0
- package/shared/mocks/fetch-mock.d.ts +13 -0
- package/shared/mocks/fetch-mock.js +41 -0
- package/shared/mocks/framer-motion-mock.d.ts +15 -0
- package/shared/mocks/framer-motion-mock.js +70 -0
- package/shared/mocks/intersection-observer-mock.d.ts +7 -0
- package/shared/mocks/intersection-observer-mock.js +57 -0
- package/shared/mocks/match-media-mock.d.ts +7 -0
- package/shared/mocks/match-media-mock.js +46 -0
- package/shared/mocks/resize-observer-mock.d.ts +8 -0
- package/shared/mocks/resize-observer-mock.js +43 -0
- package/shared/mocks/scroll-into-view-mock.d.ts +7 -0
- package/shared/mocks/scroll-into-view-mock.js +35 -0
- package/shared/testing-helpers/filters/filter-field.d.ts +128 -0
- package/shared/testing-helpers/filters/filter-field.js +449 -0
- package/vitest/index.d.ts +32 -0
- package/vitest/index.js +98 -0
- package/vitest/mocks/create-range-mock.d.ts +5 -0
- package/vitest/mocks/create-range-mock.js +28 -0
- package/vitest/mocks/fetch-mock.d.ts +5 -0
- package/vitest/mocks/fetch-mock.js +28 -0
- package/vitest/mocks/framer-motion-mock.d.ts +27 -0
- package/vitest/mocks/framer-motion-mock.js +31 -0
- package/vitest/mocks/intersection-observer-mock.d.ts +5 -0
- package/vitest/mocks/intersection-observer-mock.js +28 -0
- package/vitest/mocks/match-media-mock.d.ts +5 -0
- package/vitest/mocks/match-media-mock.js +28 -0
- package/vitest/mocks/resize-observer-mock.d.ts +5 -0
- package/vitest/mocks/resize-observer-mock.js +28 -0
- package/vitest/mocks/scroll-into-view-mock.d.ts +5 -0
- package/vitest/mocks/scroll-into-view-mock.js +28 -0
- package/vitest/preset/index.d.ts +2 -0
- package/vitest/preset/index.js +23 -0
- package/vitest/preset/vitest-preset.d.ts +24 -0
- package/vitest/preset/vitest-preset.js +27 -0
- package/vitest/setup/index.d.ts +2 -0
- package/vitest/setup/index.js +40 -0
- package/vitest/testing-helpers/filters/filter-field.d.ts +6 -0
- package/vitest/testing-helpers/filters/filter-field.js +36 -0
- package/vitest/testing-helpers/utils/isFakeTimersEnabled.d.ts +6 -0
- package/vitest/testing-helpers/utils/isFakeTimersEnabled.js +26 -0
- package/vitest/testing-helpers/utils/setup-user-event.d.ts +7 -0
- package/vitest/testing-helpers/utils/setup-user-event.js +44 -0
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var filter_field_exports = {};
|
|
19
|
+
__export(filter_field_exports, {
|
|
20
|
+
FilterFieldHelper: () => FilterFieldHelper,
|
|
21
|
+
FilterFieldPinnedAndRecentSuggestionBase: () => FilterFieldPinnedAndRecentSuggestionBase,
|
|
22
|
+
FilterFieldPinnedSuggestion: () => FilterFieldPinnedSuggestion,
|
|
23
|
+
FilterFieldRecentSuggestion: () => FilterFieldRecentSuggestion,
|
|
24
|
+
createFilterFieldHelpers: () => createFilterFieldHelpers
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(filter_field_exports);
|
|
27
|
+
var import_react = require("@testing-library/react");
|
|
28
|
+
var import_user_event = require("@testing-library/user-event");
|
|
29
|
+
class FilterFieldPinnedAndRecentSuggestionBase {
|
|
30
|
+
/** @internal */
|
|
31
|
+
constructor(suggestionRoot, deps) {
|
|
32
|
+
this.suggestionRoot = suggestionRoot;
|
|
33
|
+
this._deps = deps;
|
|
34
|
+
}
|
|
35
|
+
suggestionRoot;
|
|
36
|
+
_deps;
|
|
37
|
+
get pinButtonElement() {
|
|
38
|
+
return this.suggestionRoot.querySelector(
|
|
39
|
+
"button[aria-checked]"
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Receives the value of the suggestion that would be applied.
|
|
44
|
+
*/
|
|
45
|
+
get value() {
|
|
46
|
+
return this.suggestionRoot.childNodes.item(1).textContent;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Returns if the current suggestion is currently pinned or not.
|
|
50
|
+
*/
|
|
51
|
+
get pinned() {
|
|
52
|
+
if (this.pinButtonElement) {
|
|
53
|
+
return this.pinButtonElement.getAttribute("aria-checked") === "true";
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Applies the suggestion to the filter field.
|
|
59
|
+
*/
|
|
60
|
+
async apply() {
|
|
61
|
+
await this._deps.setupUserEvent({
|
|
62
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
63
|
+
}).click(this.suggestionRoot);
|
|
64
|
+
}
|
|
65
|
+
get pinEnabled() {
|
|
66
|
+
if (this.pinButtonElement) {
|
|
67
|
+
return this.pinButtonElement.getAttribute("aria-disabled") === "false";
|
|
68
|
+
}
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Allows the suggestion to be pinned if not pinned already.
|
|
73
|
+
*/
|
|
74
|
+
async pin() {
|
|
75
|
+
if (this.pinned === true) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (this.pinButtonElement) {
|
|
79
|
+
await this._deps.setupUserEvent({
|
|
80
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
81
|
+
}).click(this.pinButtonElement);
|
|
82
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
83
|
+
await (0, import_react.act)(async () => {
|
|
84
|
+
this._deps.runOnlyPendingTimers();
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Allows the suggestion to be unpinned if not unpinned already.
|
|
91
|
+
*/
|
|
92
|
+
async unpin() {
|
|
93
|
+
if (this.pinned === false) {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
if (this.pinButtonElement) {
|
|
97
|
+
await this._deps.setupUserEvent({
|
|
98
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
99
|
+
}).click(this.pinButtonElement);
|
|
100
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
101
|
+
await (0, import_react.act)(async () => {
|
|
102
|
+
this._deps.runOnlyPendingTimers();
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
class FilterFieldPinnedSuggestion extends FilterFieldPinnedAndRecentSuggestionBase {
|
|
109
|
+
/**
|
|
110
|
+
* Receives the value of the suggestion that would be applied.
|
|
111
|
+
*/
|
|
112
|
+
get value() {
|
|
113
|
+
return this.suggestionRoot.childNodes.item(0).textContent;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
class FilterFieldRecentSuggestion extends FilterFieldPinnedAndRecentSuggestionBase {
|
|
117
|
+
/**
|
|
118
|
+
* Receives the value of the suggestion that would be applied.
|
|
119
|
+
*/
|
|
120
|
+
get value() {
|
|
121
|
+
return this.suggestionRoot.querySelector('[role="option"]')?.childNodes.item(0).textContent ?? null;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Receives time offset indicating when the filter statement has last been used.
|
|
125
|
+
*/
|
|
126
|
+
get lastUsed() {
|
|
127
|
+
return this.suggestionRoot.querySelector('[role="option"]')?.childNodes.item(1).textContent ?? null;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
class FilterFieldHelper {
|
|
131
|
+
/** @internal */
|
|
132
|
+
constructor(dataTestId, deps) {
|
|
133
|
+
this.dataTestId = dataTestId;
|
|
134
|
+
this._deps = deps;
|
|
135
|
+
}
|
|
136
|
+
dataTestId;
|
|
137
|
+
_deps;
|
|
138
|
+
get filterFieldWrapper() {
|
|
139
|
+
return import_react.screen.getByTestId(this.dataTestId);
|
|
140
|
+
}
|
|
141
|
+
get editorView() {
|
|
142
|
+
return this.filterFieldWrapper.querySelector(
|
|
143
|
+
".cm-content"
|
|
144
|
+
)?.cmTile?.view;
|
|
145
|
+
}
|
|
146
|
+
get inputElement() {
|
|
147
|
+
return (0, import_react.within)(this.filterFieldWrapper).getAllByRole(
|
|
148
|
+
"textbox",
|
|
149
|
+
{ hidden: true }
|
|
150
|
+
)[1];
|
|
151
|
+
}
|
|
152
|
+
get filterFieldElement() {
|
|
153
|
+
return (0, import_react.within)(this.filterFieldWrapper).getByRole(
|
|
154
|
+
"textbox",
|
|
155
|
+
{
|
|
156
|
+
name: "Filter field",
|
|
157
|
+
hidden: true
|
|
158
|
+
}
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
get placeholderElement() {
|
|
162
|
+
return this.filterFieldWrapper.querySelector(".cm-placeholder");
|
|
163
|
+
}
|
|
164
|
+
get suggestionsContainer() {
|
|
165
|
+
return import_react.screen.queryByTestId(`filterfield-suggestions-${this.dataTestId}`);
|
|
166
|
+
}
|
|
167
|
+
/** Returns the value of the native text input. */
|
|
168
|
+
get value() {
|
|
169
|
+
return this.inputElement.value;
|
|
170
|
+
}
|
|
171
|
+
/** Returns the value of the filter field. */
|
|
172
|
+
get filterFieldValue() {
|
|
173
|
+
return this.filterFieldElement.textContent || "";
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* The placeholder text shown in the filter field.
|
|
177
|
+
* Undefined if the placeholder is currently not rendered.
|
|
178
|
+
*/
|
|
179
|
+
get placeholder() {
|
|
180
|
+
return this.placeholderElement?.textContent || void 0;
|
|
181
|
+
}
|
|
182
|
+
/** Focus the filter field if not already focused. */
|
|
183
|
+
async focus() {
|
|
184
|
+
if (!this.filterFieldWrapper.contains(document.activeElement)) {
|
|
185
|
+
await (0, import_react.act)(async () => {
|
|
186
|
+
this.inputElement.focus();
|
|
187
|
+
});
|
|
188
|
+
expect(
|
|
189
|
+
this.filterFieldWrapper.contains(document.activeElement)
|
|
190
|
+
).toBeTruthy();
|
|
191
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
192
|
+
await (0, import_react.act)(async () => {
|
|
193
|
+
this._deps.runOnlyPendingTimers();
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/** Blur the filter field by tabbing out of it. */
|
|
199
|
+
async blur() {
|
|
200
|
+
await (0, import_react.act)(async () => {
|
|
201
|
+
this.filterFieldElement.blur();
|
|
202
|
+
});
|
|
203
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
204
|
+
await (0, import_react.act)(async () => {
|
|
205
|
+
this._deps.runOnlyPendingTimers();
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/** Fill a provided value into the filter field. */
|
|
210
|
+
async type(text, cursorIndex) {
|
|
211
|
+
const regEx = new RegExp(text, "g");
|
|
212
|
+
const matches = this.value.match(regEx);
|
|
213
|
+
await this.moveCursorTo(cursorIndex ?? -1);
|
|
214
|
+
await this._deps.setupUserEvent({
|
|
215
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
216
|
+
}).keyboard(text);
|
|
217
|
+
await (0, import_react.waitFor)(() => {
|
|
218
|
+
expect(this.value.match(regEx) ?? []).toHaveLength(
|
|
219
|
+
(matches?.length ?? 0) + 1
|
|
220
|
+
);
|
|
221
|
+
});
|
|
222
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
223
|
+
await (0, import_react.act)(async () => {
|
|
224
|
+
this._deps.runOnlyPendingTimers();
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
/** Clears the filter field value. */
|
|
229
|
+
async clear() {
|
|
230
|
+
if (this.value !== "") {
|
|
231
|
+
await this._deps.setupUserEvent({
|
|
232
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
233
|
+
}).click(
|
|
234
|
+
await (0, import_react.within)(this.filterFieldWrapper).findByRole("button", {
|
|
235
|
+
name: "Clear filter",
|
|
236
|
+
hidden: true
|
|
237
|
+
})
|
|
238
|
+
);
|
|
239
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
240
|
+
await (0, import_react.act)(async () => {
|
|
241
|
+
this._deps.runOnlyPendingTimers();
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Moves the cursor to the given index.
|
|
248
|
+
* -1 moves to the end of the input.
|
|
249
|
+
*/
|
|
250
|
+
async moveCursorTo(index) {
|
|
251
|
+
const user = this._deps.setupUserEvent({
|
|
252
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
253
|
+
});
|
|
254
|
+
if (index === -1) {
|
|
255
|
+
await (0, import_react.act)(async () => {
|
|
256
|
+
await this.focus();
|
|
257
|
+
});
|
|
258
|
+
await user.keyboard("{PageDown}");
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
const editorView = this.editorView;
|
|
262
|
+
if (!editorView) {
|
|
263
|
+
console.warn("FilterField editor could not be found. Panic now.");
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
await (0, import_react.act)(async () => {
|
|
267
|
+
await this.focus();
|
|
268
|
+
editorView.dispatch({
|
|
269
|
+
selection: {
|
|
270
|
+
anchor: Math.min(index, editorView.state.doc.length)
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
275
|
+
await (0, import_react.act)(async () => {
|
|
276
|
+
this._deps.runOnlyPendingTimers();
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
/** Open the suggestions overlay with the keyboard shortcut. */
|
|
281
|
+
async openSuggestions() {
|
|
282
|
+
await (0, import_react.act)(async () => {
|
|
283
|
+
await this.focus();
|
|
284
|
+
});
|
|
285
|
+
await this._deps.setupUserEvent({
|
|
286
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
287
|
+
}).keyboard("{Control>}{Space}{/Control}");
|
|
288
|
+
await (0, import_react.waitFor)(
|
|
289
|
+
async () => expect(this.suggestionsContainer).toBeInTheDocument()
|
|
290
|
+
);
|
|
291
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
292
|
+
await (0, import_react.act)(async () => {
|
|
293
|
+
this._deps.runOnlyPendingTimers();
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Close the suggestions overlay using the `Escape` key.
|
|
299
|
+
* If the filter field is focused, the focus will stay in the filter field.
|
|
300
|
+
*/
|
|
301
|
+
async closeSuggestions() {
|
|
302
|
+
await (0, import_react.act)(async () => {
|
|
303
|
+
await this.focus();
|
|
304
|
+
});
|
|
305
|
+
await this._deps.setupUserEvent({
|
|
306
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
307
|
+
}).keyboard("{Escape}");
|
|
308
|
+
if (this.suggestionsContainer !== null) {
|
|
309
|
+
await (0, import_react.waitForElementToBeRemoved)(() => this.suggestionsContainer);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/** Apply the suggestion with the given text. */
|
|
313
|
+
async applySuggestion(queryString) {
|
|
314
|
+
await (0, import_react.act)(async () => {
|
|
315
|
+
await this.focus();
|
|
316
|
+
});
|
|
317
|
+
await (0, import_react.waitFor)(() => {
|
|
318
|
+
expect(this.suggestionsContainer).toBeInTheDocument();
|
|
319
|
+
});
|
|
320
|
+
if (!this.suggestionsContainer) {
|
|
321
|
+
console.warn(
|
|
322
|
+
"The filter field suggestions overlay seems to be closed. Make sure to open it before applying a suggestion."
|
|
323
|
+
);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
const showMore = (0, import_react.within)(this.suggestionsContainer).queryByRole("option", {
|
|
327
|
+
name: "Show more"
|
|
328
|
+
});
|
|
329
|
+
if (showMore) {
|
|
330
|
+
await this._deps.setupUserEvent({
|
|
331
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
332
|
+
}).click(showMore);
|
|
333
|
+
}
|
|
334
|
+
let suggestions = (0, import_react.within)(this.suggestionsContainer).queryAllByTestId(
|
|
335
|
+
queryString,
|
|
336
|
+
{ exact: true }
|
|
337
|
+
);
|
|
338
|
+
if (suggestions.length > 0) {
|
|
339
|
+
suggestions = suggestions.reduce((acc, container) => {
|
|
340
|
+
const suggestion = (0, import_react.within)(container).queryByRole("option");
|
|
341
|
+
if (suggestion) {
|
|
342
|
+
acc.push(suggestion);
|
|
343
|
+
}
|
|
344
|
+
return acc;
|
|
345
|
+
}, []);
|
|
346
|
+
}
|
|
347
|
+
if (suggestions.length === 0) {
|
|
348
|
+
suggestions.push(
|
|
349
|
+
...(0, import_react.within)(this.suggestionsContainer).queryAllByText(
|
|
350
|
+
(_, element) => element?.getAttribute("role") === "option" && // The replace is needed to ignore non-breaking spaces
|
|
351
|
+
element.firstElementChild?.textContent?.replace(/\s+/g, " ") === queryString.replace(/\s+/g, " ")
|
|
352
|
+
)
|
|
353
|
+
);
|
|
354
|
+
}
|
|
355
|
+
if (suggestions.length === 0) {
|
|
356
|
+
console.warn(
|
|
357
|
+
`Could not query a suggestion with the given queryString '${queryString}' (trying queryByTestId and queryByText).`
|
|
358
|
+
);
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
if (suggestions.length > 1) {
|
|
362
|
+
console.warn(
|
|
363
|
+
"Found multiple suggestions with the given testId. Will apply the first one"
|
|
364
|
+
);
|
|
365
|
+
}
|
|
366
|
+
await this._deps.setupUserEvent({
|
|
367
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
368
|
+
}).click(suggestions[0]);
|
|
369
|
+
}
|
|
370
|
+
/** Get recent suggestions */
|
|
371
|
+
async getRecentSuggestions() {
|
|
372
|
+
if (this.suggestionsContainer) {
|
|
373
|
+
const recentGroup = (0, import_react.within)(this.suggestionsContainer).getByRole("group", {
|
|
374
|
+
name: "Recently used filters"
|
|
375
|
+
});
|
|
376
|
+
const suggestions = (0, import_react.within)(recentGroup).getAllByRole(
|
|
377
|
+
"group",
|
|
378
|
+
{
|
|
379
|
+
hidden: true,
|
|
380
|
+
name(_accessibleName, element) {
|
|
381
|
+
return element.getAttribute(
|
|
382
|
+
"data-strato-filter-field-virtual-focus-type"
|
|
383
|
+
) === "recent-suggestion";
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
);
|
|
387
|
+
return suggestions.map(
|
|
388
|
+
(el) => new FilterFieldRecentSuggestion(el, this._deps)
|
|
389
|
+
);
|
|
390
|
+
}
|
|
391
|
+
return [];
|
|
392
|
+
}
|
|
393
|
+
/** Get pinned suggestions */
|
|
394
|
+
async getPinnedSuggestions() {
|
|
395
|
+
if (this.suggestionsContainer) {
|
|
396
|
+
try {
|
|
397
|
+
await (0, import_react.waitFor)(
|
|
398
|
+
() => import_react.screen.getByRole("group", {
|
|
399
|
+
name: "Pinned filters",
|
|
400
|
+
hidden: true,
|
|
401
|
+
suggest: false
|
|
402
|
+
})
|
|
403
|
+
);
|
|
404
|
+
const pinnedGroup = (0, import_react.within)(this.suggestionsContainer).getByRole(
|
|
405
|
+
"group",
|
|
406
|
+
{
|
|
407
|
+
name: "Pinned filters",
|
|
408
|
+
hidden: true
|
|
409
|
+
}
|
|
410
|
+
);
|
|
411
|
+
const suggestions = (0, import_react.within)(pinnedGroup).getAllByRole(
|
|
412
|
+
"group",
|
|
413
|
+
{
|
|
414
|
+
hidden: true,
|
|
415
|
+
name(_accessibleName, element) {
|
|
416
|
+
return element.getAttribute(
|
|
417
|
+
"data-strato-filter-field-virtual-focus-type"
|
|
418
|
+
) === "pinned-suggestion";
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
);
|
|
422
|
+
return suggestions.map(
|
|
423
|
+
(el) => new FilterFieldPinnedSuggestion(el, this._deps)
|
|
424
|
+
);
|
|
425
|
+
} catch {
|
|
426
|
+
return [];
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
return [];
|
|
430
|
+
}
|
|
431
|
+
/** Paste text at the current cursor position */
|
|
432
|
+
async paste(text, cursorIndex) {
|
|
433
|
+
await this.moveCursorTo(cursorIndex ?? -1);
|
|
434
|
+
await this._deps.setupUserEvent({
|
|
435
|
+
pointerEventsCheck: import_user_event.PointerEventsCheckLevel.Never
|
|
436
|
+
}).paste(text);
|
|
437
|
+
if (this._deps.isFakeTimersEnabled()) {
|
|
438
|
+
await (0, import_react.act)(async () => {
|
|
439
|
+
this._deps.runOnlyPendingTimers();
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
function createFilterFieldHelpers(deps) {
|
|
445
|
+
function getFilterFieldHelper(dataTestId) {
|
|
446
|
+
return new FilterFieldHelper(dataTestId, deps);
|
|
447
|
+
}
|
|
448
|
+
return { getFilterFieldHelper };
|
|
449
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import '@testing-library/jest-dom/vitest';
|
|
2
|
+
export { customRender as render, type RenderWithIntlOptions, } from '../jest/custom-render.js';
|
|
3
|
+
export { stratoVitestPreset } from './preset/index.js';
|
|
4
|
+
export { getTextInputHelper, type TextInputHelper, } from '../jest/testing-helpers/forms/text-input.js';
|
|
5
|
+
export { getPasswordInputHelper, type PasswordInputHelper, } from '../jest/testing-helpers/forms/password-input.js';
|
|
6
|
+
export { getSearchInputHelper, type SearchInputHelper, } from '../jest/testing-helpers/forms/search-input.js';
|
|
7
|
+
export { getDataTableHelper, type DataTableHelper, type DataTablePaginationHelper, type DataTableUserActionHelper, type DataTableSortingHelper, type DataTableRowSelectionHelper, type DataTableSubRowsHelper, type DataTableInteractiveRowsHelper, type DataTableDownloadHelper, type DataTableExpandableRowHelper, } from '../jest/testing-helpers/tables/datatable.js';
|
|
8
|
+
export type { BaseInputHelper } from '../jest/testing-helpers/forms/base-input.js';
|
|
9
|
+
export { getFilterFieldHelper, FilterFieldHelper, FilterFieldPinnedAndRecentSuggestionBase, FilterFieldPinnedSuggestion, FilterFieldRecentSuggestion, } from './testing-helpers/filters/filter-field.js';
|
|
10
|
+
export type { _FilterFieldDeps } from './testing-helpers/filters/filter-field.js';
|
|
11
|
+
export { getSelectTestingHelper, type SelectTestingHelper, } from '../jest/testing-helpers/forms/select.js';
|
|
12
|
+
export { setupGetBoundingClientRectMock, clearGetBoundingClientRectMock, } from '../jest/mocks/bounding-client-rect-mock.js';
|
|
13
|
+
export { createMockElement } from '../jest/mocks/create-mock-element.js';
|
|
14
|
+
export { setupCanvasMeasureTextMock, clearCanvasMeasureTextMock, } from '../jest/mocks/canvas-mock.js';
|
|
15
|
+
export { setupOffsetWidthMock, clearOffsetWidthMock, } from '../jest/mocks/offset-width-mock.js';
|
|
16
|
+
export { setupOffsetHeightMock, clearOffsetHeightMock, } from '../jest/mocks/offset-height-mock.js';
|
|
17
|
+
export { setupDomRectMock, clearDomRectMock, } from '../jest/mocks/dom-rect-mock.js';
|
|
18
|
+
export { setupPointerEventMock, clearPointerEventMock, } from '../jest/mocks/pointer-event-mock.js';
|
|
19
|
+
export { setupScreenSizeMock, clearScreenSizeMock, } from '../jest/mocks/screen-size-mock.js';
|
|
20
|
+
export { setupScrollWidthMock, clearScrollWidthMock, } from '../jest/mocks/scroll-width-mock.js';
|
|
21
|
+
export { setupVirtualizationMock, clearVirtualizationMock, } from '../jest/mocks/virtualization-mock.js';
|
|
22
|
+
export { setupTextEllipsisMock, clearTextEllipsisMock, } from '../jest/mocks/text-ellipsis-mock.js';
|
|
23
|
+
export { setupElementFromPointMock, clearElementFromPointMock, } from '../jest/mocks/element-from-point-mock.js';
|
|
24
|
+
export { setupResizeObserverMock, clearResizeObserverMock, } from './mocks/resize-observer-mock.js';
|
|
25
|
+
export { setupMatchMediaMock, clearMatchMediaMock, } from './mocks/match-media-mock.js';
|
|
26
|
+
export { setupIntersectionObserverMock, clearIntersectionObserverMock, } from './mocks/intersection-observer-mock.js';
|
|
27
|
+
export { setupScrollIntoViewMock, clearScrollIntoViewMock, } from './mocks/scroll-into-view-mock.js';
|
|
28
|
+
export { setupCreateRangeMock, clearCreateRangeMock, } from './mocks/create-range-mock.js';
|
|
29
|
+
export { setupFetchMock, clearFetchMock } from './mocks/fetch-mock.js';
|
|
30
|
+
export type { MockedResponse } from '../shared/mocks/fetch-mock.js';
|
|
31
|
+
export { setupFramerMotionMock, clearFramerMotionMock, type FramerMotionActual, } from './mocks/framer-motion-mock.js';
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|
package/vitest/index.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var vitest_exports = {};
|
|
19
|
+
__export(vitest_exports, {
|
|
20
|
+
FilterFieldHelper: () => import_filter_field.FilterFieldHelper,
|
|
21
|
+
FilterFieldPinnedAndRecentSuggestionBase: () => import_filter_field.FilterFieldPinnedAndRecentSuggestionBase,
|
|
22
|
+
FilterFieldPinnedSuggestion: () => import_filter_field.FilterFieldPinnedSuggestion,
|
|
23
|
+
FilterFieldRecentSuggestion: () => import_filter_field.FilterFieldRecentSuggestion,
|
|
24
|
+
clearCanvasMeasureTextMock: () => import_canvas_mock.clearCanvasMeasureTextMock,
|
|
25
|
+
clearCreateRangeMock: () => import_create_range_mock.clearCreateRangeMock,
|
|
26
|
+
clearDomRectMock: () => import_dom_rect_mock.clearDomRectMock,
|
|
27
|
+
clearElementFromPointMock: () => import_element_from_point_mock.clearElementFromPointMock,
|
|
28
|
+
clearFetchMock: () => import_fetch_mock.clearFetchMock,
|
|
29
|
+
clearFramerMotionMock: () => import_framer_motion_mock.clearFramerMotionMock,
|
|
30
|
+
clearGetBoundingClientRectMock: () => import_bounding_client_rect_mock.clearGetBoundingClientRectMock,
|
|
31
|
+
clearIntersectionObserverMock: () => import_intersection_observer_mock.clearIntersectionObserverMock,
|
|
32
|
+
clearMatchMediaMock: () => import_match_media_mock.clearMatchMediaMock,
|
|
33
|
+
clearOffsetHeightMock: () => import_offset_height_mock.clearOffsetHeightMock,
|
|
34
|
+
clearOffsetWidthMock: () => import_offset_width_mock.clearOffsetWidthMock,
|
|
35
|
+
clearPointerEventMock: () => import_pointer_event_mock.clearPointerEventMock,
|
|
36
|
+
clearResizeObserverMock: () => import_resize_observer_mock.clearResizeObserverMock,
|
|
37
|
+
clearScreenSizeMock: () => import_screen_size_mock.clearScreenSizeMock,
|
|
38
|
+
clearScrollIntoViewMock: () => import_scroll_into_view_mock.clearScrollIntoViewMock,
|
|
39
|
+
clearScrollWidthMock: () => import_scroll_width_mock.clearScrollWidthMock,
|
|
40
|
+
clearTextEllipsisMock: () => import_text_ellipsis_mock.clearTextEllipsisMock,
|
|
41
|
+
clearVirtualizationMock: () => import_virtualization_mock.clearVirtualizationMock,
|
|
42
|
+
createMockElement: () => import_create_mock_element.createMockElement,
|
|
43
|
+
getDataTableHelper: () => import_datatable.getDataTableHelper,
|
|
44
|
+
getFilterFieldHelper: () => import_filter_field.getFilterFieldHelper,
|
|
45
|
+
getPasswordInputHelper: () => import_password_input.getPasswordInputHelper,
|
|
46
|
+
getSearchInputHelper: () => import_search_input.getSearchInputHelper,
|
|
47
|
+
getSelectTestingHelper: () => import_select.getSelectTestingHelper,
|
|
48
|
+
getTextInputHelper: () => import_text_input.getTextInputHelper,
|
|
49
|
+
render: () => import_custom_render.customRender,
|
|
50
|
+
setupCanvasMeasureTextMock: () => import_canvas_mock.setupCanvasMeasureTextMock,
|
|
51
|
+
setupCreateRangeMock: () => import_create_range_mock.setupCreateRangeMock,
|
|
52
|
+
setupDomRectMock: () => import_dom_rect_mock.setupDomRectMock,
|
|
53
|
+
setupElementFromPointMock: () => import_element_from_point_mock.setupElementFromPointMock,
|
|
54
|
+
setupFetchMock: () => import_fetch_mock.setupFetchMock,
|
|
55
|
+
setupFramerMotionMock: () => import_framer_motion_mock.setupFramerMotionMock,
|
|
56
|
+
setupGetBoundingClientRectMock: () => import_bounding_client_rect_mock.setupGetBoundingClientRectMock,
|
|
57
|
+
setupIntersectionObserverMock: () => import_intersection_observer_mock.setupIntersectionObserverMock,
|
|
58
|
+
setupMatchMediaMock: () => import_match_media_mock.setupMatchMediaMock,
|
|
59
|
+
setupOffsetHeightMock: () => import_offset_height_mock.setupOffsetHeightMock,
|
|
60
|
+
setupOffsetWidthMock: () => import_offset_width_mock.setupOffsetWidthMock,
|
|
61
|
+
setupPointerEventMock: () => import_pointer_event_mock.setupPointerEventMock,
|
|
62
|
+
setupResizeObserverMock: () => import_resize_observer_mock.setupResizeObserverMock,
|
|
63
|
+
setupScreenSizeMock: () => import_screen_size_mock.setupScreenSizeMock,
|
|
64
|
+
setupScrollIntoViewMock: () => import_scroll_into_view_mock.setupScrollIntoViewMock,
|
|
65
|
+
setupScrollWidthMock: () => import_scroll_width_mock.setupScrollWidthMock,
|
|
66
|
+
setupTextEllipsisMock: () => import_text_ellipsis_mock.setupTextEllipsisMock,
|
|
67
|
+
setupVirtualizationMock: () => import_virtualization_mock.setupVirtualizationMock,
|
|
68
|
+
stratoVitestPreset: () => import_preset.stratoVitestPreset
|
|
69
|
+
});
|
|
70
|
+
module.exports = __toCommonJS(vitest_exports);
|
|
71
|
+
var import_vitest = require("@testing-library/jest-dom/vitest");
|
|
72
|
+
var import_custom_render = require("../jest/custom-render.js");
|
|
73
|
+
var import_preset = require("./preset/index.js");
|
|
74
|
+
var import_text_input = require("../jest/testing-helpers/forms/text-input.js");
|
|
75
|
+
var import_password_input = require("../jest/testing-helpers/forms/password-input.js");
|
|
76
|
+
var import_search_input = require("../jest/testing-helpers/forms/search-input.js");
|
|
77
|
+
var import_datatable = require("../jest/testing-helpers/tables/datatable.js");
|
|
78
|
+
var import_filter_field = require("./testing-helpers/filters/filter-field.js");
|
|
79
|
+
var import_select = require("../jest/testing-helpers/forms/select.js");
|
|
80
|
+
var import_bounding_client_rect_mock = require("../jest/mocks/bounding-client-rect-mock.js");
|
|
81
|
+
var import_create_mock_element = require("../jest/mocks/create-mock-element.js");
|
|
82
|
+
var import_canvas_mock = require("../jest/mocks/canvas-mock.js");
|
|
83
|
+
var import_offset_width_mock = require("../jest/mocks/offset-width-mock.js");
|
|
84
|
+
var import_offset_height_mock = require("../jest/mocks/offset-height-mock.js");
|
|
85
|
+
var import_dom_rect_mock = require("../jest/mocks/dom-rect-mock.js");
|
|
86
|
+
var import_pointer_event_mock = require("../jest/mocks/pointer-event-mock.js");
|
|
87
|
+
var import_screen_size_mock = require("../jest/mocks/screen-size-mock.js");
|
|
88
|
+
var import_scroll_width_mock = require("../jest/mocks/scroll-width-mock.js");
|
|
89
|
+
var import_virtualization_mock = require("../jest/mocks/virtualization-mock.js");
|
|
90
|
+
var import_text_ellipsis_mock = require("../jest/mocks/text-ellipsis-mock.js");
|
|
91
|
+
var import_element_from_point_mock = require("../jest/mocks/element-from-point-mock.js");
|
|
92
|
+
var import_resize_observer_mock = require("./mocks/resize-observer-mock.js");
|
|
93
|
+
var import_match_media_mock = require("./mocks/match-media-mock.js");
|
|
94
|
+
var import_intersection_observer_mock = require("./mocks/intersection-observer-mock.js");
|
|
95
|
+
var import_scroll_into_view_mock = require("./mocks/scroll-into-view-mock.js");
|
|
96
|
+
var import_create_range_mock = require("./mocks/create-range-mock.js");
|
|
97
|
+
var import_fetch_mock = require("./mocks/fetch-mock.js");
|
|
98
|
+
var import_framer_motion_mock = require("./mocks/framer-motion-mock.js");
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var create_range_mock_exports = {};
|
|
19
|
+
__export(create_range_mock_exports, {
|
|
20
|
+
clearCreateRangeMock: () => clearCreateRangeMock,
|
|
21
|
+
setupCreateRangeMock: () => setupCreateRangeMock
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(create_range_mock_exports);
|
|
24
|
+
var import_vitest = require("vitest");
|
|
25
|
+
var import_create_range_mock = require("../../shared/mocks/create-range-mock.js");
|
|
26
|
+
const _helpers = (0, import_create_range_mock.createCreateRangeMockHelpers)(import_vitest.vi.fn);
|
|
27
|
+
const setupCreateRangeMock = _helpers.setupCreateRangeMock;
|
|
28
|
+
const clearCreateRangeMock = _helpers.clearCreateRangeMock;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var fetch_mock_exports = {};
|
|
19
|
+
__export(fetch_mock_exports, {
|
|
20
|
+
clearFetchMock: () => clearFetchMock,
|
|
21
|
+
setupFetchMock: () => setupFetchMock
|
|
22
|
+
});
|
|
23
|
+
module.exports = __toCommonJS(fetch_mock_exports);
|
|
24
|
+
var import_vitest = require("vitest");
|
|
25
|
+
var import_fetch_mock = require("../../shared/mocks/fetch-mock.js");
|
|
26
|
+
const _helpers = (0, import_fetch_mock.createFetchMockHelpers)(import_vitest.vi.fn);
|
|
27
|
+
const setupFetchMock = _helpers.setupFetchMock;
|
|
28
|
+
const clearFetchMock = _helpers.clearFetchMock;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** @public */
|
|
2
|
+
export type FramerMotionActual = {
|
|
3
|
+
isValidMotionProp: (key: string) => boolean;
|
|
4
|
+
cubicBezier: (mX1: number, mY1: number, mX2: number, mY2: number) => (t: number) => number;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Mocks framer motion so children are rendered without animations for easier testing.
|
|
8
|
+
* Needs to be called inside 'vi.mock' at the root level of the test file (vi.mock is hoisted):
|
|
9
|
+
*
|
|
10
|
+
* vi.mock('framer-motion', async (importOriginal) =\> \{
|
|
11
|
+
* const actual = await importOriginal\<typeof import('framer-motion')\>();
|
|
12
|
+
* const \{ setupFramerMotionMock \} = await import('\@dynatrace/strato-components-testing/vitest');
|
|
13
|
+
* return setupFramerMotionMock(actual);
|
|
14
|
+
* \});
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export declare function setupFramerMotionMock(actual: FramerMotionActual): {
|
|
18
|
+
motion: any;
|
|
19
|
+
AnimatePresence: any;
|
|
20
|
+
useReducedMotion: (value?: boolean) => boolean;
|
|
21
|
+
cubicBezier: (mX1: number, mY1: number, mX2: number, mY2: number) => (t: number) => number;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* @public
|
|
25
|
+
*/
|
|
26
|
+
export declare function clearFramerMotionMock(): void;
|
|
27
|
+
//# sourceMappingURL=framer-motion-mock.d.ts.map
|