@reltio/components 1.4.1849 → 1.4.1850

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/cjs/SaveSegmentDialog/SaveSegmentDialog.d.ts +8 -0
  2. package/cjs/SaveSegmentDialog/SaveSegmentDialog.js +129 -0
  3. package/cjs/SaveSegmentDialog/SaveSegmentDialog.test.d.ts +1 -0
  4. package/cjs/SaveSegmentDialog/SaveSegmentDialog.test.js +214 -0
  5. package/cjs/SaveSegmentDialog/index.d.ts +1 -0
  6. package/cjs/SaveSegmentDialog/index.js +5 -0
  7. package/cjs/SaveSegmentDialog/styles.d.ts +1 -0
  8. package/cjs/SaveSegmentDialog/styles.js +15 -0
  9. package/cjs/hooks/useSavedSearchesRequest/index.d.ts +1 -0
  10. package/cjs/hooks/useSavedSearchesRequest/index.js +5 -0
  11. package/cjs/hooks/useSavedSearchesRequest/requests.d.ts +6 -0
  12. package/cjs/hooks/useSavedSearchesRequest/requests.js +72 -0
  13. package/cjs/hooks/useSavedSearchesRequest/useSavedSearchesRequest.d.ts +76 -0
  14. package/cjs/hooks/useSavedSearchesRequest/useSavedSearchesRequest.js +255 -0
  15. package/cjs/hooks/useSavedSearchesRequest/useSavedSearchesRequest.test.d.ts +1 -0
  16. package/cjs/hooks/useSavedSearchesRequest/useSavedSearchesRequest.test.js +743 -0
  17. package/cjs/index.d.ts +1 -0
  18. package/cjs/index.js +3 -1
  19. package/esm/SaveSegmentDialog/SaveSegmentDialog.d.ts +8 -0
  20. package/esm/SaveSegmentDialog/SaveSegmentDialog.js +99 -0
  21. package/esm/SaveSegmentDialog/SaveSegmentDialog.test.d.ts +1 -0
  22. package/esm/SaveSegmentDialog/SaveSegmentDialog.test.js +209 -0
  23. package/esm/SaveSegmentDialog/index.d.ts +1 -0
  24. package/esm/SaveSegmentDialog/index.js +1 -0
  25. package/esm/SaveSegmentDialog/styles.d.ts +1 -0
  26. package/esm/SaveSegmentDialog/styles.js +12 -0
  27. package/esm/hooks/useSavedSearchesRequest/index.d.ts +1 -0
  28. package/esm/hooks/useSavedSearchesRequest/index.js +1 -0
  29. package/esm/hooks/useSavedSearchesRequest/requests.d.ts +6 -0
  30. package/esm/hooks/useSavedSearchesRequest/requests.js +68 -0
  31. package/esm/hooks/useSavedSearchesRequest/useSavedSearchesRequest.d.ts +76 -0
  32. package/esm/hooks/useSavedSearchesRequest/useSavedSearchesRequest.js +251 -0
  33. package/esm/hooks/useSavedSearchesRequest/useSavedSearchesRequest.test.d.ts +1 -0
  34. package/esm/hooks/useSavedSearchesRequest/useSavedSearchesRequest.test.js +738 -0
  35. package/esm/index.d.ts +1 -0
  36. package/esm/index.js +1 -0
  37. package/package.json +1 -1
  38. package/cjs/hooks/useSavedSearchesRequest.d.ts +0 -23
  39. package/cjs/hooks/useSavedSearchesRequest.js +0 -224
  40. package/esm/hooks/useSavedSearchesRequest.d.ts +0 -23
  41. package/esm/hooks/useSavedSearchesRequest.js +0 -220
@@ -0,0 +1,743 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
14
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
15
+ return new (P || (P = Promise))(function (resolve, reject) {
16
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
17
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
18
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
19
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
20
+ });
21
+ };
22
+ var __generator = (this && this.__generator) || function (thisArg, body) {
23
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
24
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
25
+ function verb(n) { return function (v) { return step([n, v]); }; }
26
+ function step(op) {
27
+ if (f) throw new TypeError("Generator is already executing.");
28
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
29
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
30
+ if (y = 0, t) op = [op[0] & 2, t.value];
31
+ switch (op[0]) {
32
+ case 0: case 1: t = op; break;
33
+ case 4: _.label++; return { value: op[1], done: false };
34
+ case 5: _.label++; y = op[1]; op = [0]; continue;
35
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
36
+ default:
37
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
38
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
39
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
40
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
41
+ if (t[2]) _.ops.pop();
42
+ _.trys.pop(); continue;
43
+ }
44
+ op = body.call(thisArg, _);
45
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
46
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
47
+ }
48
+ };
49
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
50
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
51
+ if (ar || !(i in from)) {
52
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
53
+ ar[i] = from[i];
54
+ }
55
+ }
56
+ return to.concat(ar || Array.prototype.slice.call(from));
57
+ };
58
+ var __importDefault = (this && this.__importDefault) || function (mod) {
59
+ return (mod && mod.__esModule) ? mod : { "default": mod };
60
+ };
61
+ Object.defineProperty(exports, "__esModule", { value: true });
62
+ var react_1 = __importDefault(require("react"));
63
+ var react_hooks_1 = require("@testing-library/react-hooks");
64
+ var mdm_sdk_1 = require("@reltio/mdm-sdk");
65
+ var core_1 = require("../../core");
66
+ var contexts_1 = require("../../contexts");
67
+ var types_1 = require("../../types");
68
+ var useSavedSearchesRequest_1 = require("../useSavedSearchesRequest");
69
+ jest.mock('@reltio/mdm-sdk', function () { return (__assign(__assign({}, jest.requireActual('@reltio/mdm-sdk')), { getSavedSearches: jest.fn(), getTotalsForQuery: jest.fn(), createSavedSearch: jest.fn(), updateSavedSearch: jest.fn(), deleteSavedSearch: jest.fn() })); });
70
+ jest.mock('../../core', function () { return (__assign(__assign({}, jest.requireActual('../../core')), { showDefaultErrorMessage: jest.fn() })); });
71
+ var defaultProps = {
72
+ options: { favoriteOnly: true, countResults: false },
73
+ defaultRowsPerPage: 25
74
+ };
75
+ var signal = new AbortController().signal;
76
+ var setUp = function (props) {
77
+ if (props === void 0) { props = defaultProps; }
78
+ var Providers = function (_a) {
79
+ var children = _a.children;
80
+ return (react_1.default.createElement(contexts_1.PageRequestsAbortingContext.Provider, { value: signal }, children));
81
+ };
82
+ return (0, react_hooks_1.renderHook)(useSavedSearchesRequest_1.useSavedSearchesRequest, { wrapper: Providers, initialProps: props });
83
+ };
84
+ describe('useSavedSearchesRequest behavior', function () {
85
+ var defaultSavedSearchesResponse = {
86
+ favoriteOnly: true,
87
+ max: 10,
88
+ offset: 0,
89
+ sortBy: 'NAME',
90
+ sortOrder: 'ASC',
91
+ total: 3,
92
+ result: [
93
+ {
94
+ name: 'Crazy-mini',
95
+ uri: 'avedSearch/1',
96
+ query: encodeURIComponent("savedSearch1 range(activeness.startDate,'${lastDay}','${now}')")
97
+ },
98
+ {
99
+ name: 'crazySS',
100
+ uri: 'savedSearch/2',
101
+ query: encodeURIComponent("savedSearch2 equals(type,'configuration/entityTypes/People')")
102
+ },
103
+ { name: 'wrong', uri: 'savedSearch/3', query: encodeURIComponent('wrong query') }
104
+ ]
105
+ };
106
+ var resolveGetSavedSearches, rejectGetSavedSearches;
107
+ beforeEach(function () {
108
+ mdm_sdk_1.getSavedSearches.mockImplementation(function () {
109
+ return new Promise(function (resolve, reject) {
110
+ resolveGetSavedSearches = function (response) { return resolve(response); };
111
+ rejectGetSavedSearches = reject;
112
+ });
113
+ });
114
+ mdm_sdk_1.getTotalsForQuery.mockImplementation(function (query, heavySearchCircuitBreaker) {
115
+ if (query.includes('savedSearch1')) {
116
+ return Promise.resolve({ total: 1 });
117
+ }
118
+ if (query.includes('savedSearch2')) {
119
+ return Promise.resolve({ total: heavySearchCircuitBreaker ? -1 : 2 });
120
+ }
121
+ return Promise.reject('Error from total');
122
+ });
123
+ });
124
+ afterEach(function () {
125
+ jest.restoreAllMocks();
126
+ jest.clearAllMocks();
127
+ });
128
+ it('should send request and be in the loading state, and be in loaded state once data is loaded', function () { return __awaiter(void 0, void 0, void 0, function () {
129
+ var hookResponse, result;
130
+ return __generator(this, function (_a) {
131
+ switch (_a.label) {
132
+ case 0:
133
+ hookResponse = __assign(__assign({}, defaultSavedSearchesResponse), { result: [
134
+ { name: 'Crazy-mini', uri: 'savedSavedSearch/1' },
135
+ { name: 'crazySS', count: 18900000, uri: 'savedSearch/2' }
136
+ ] });
137
+ result = setUp().result;
138
+ expect(result.current.states.loading).toBe('loading');
139
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
140
+ return __generator(this, function (_a) {
141
+ resolveGetSavedSearches(hookResponse);
142
+ return [2 /*return*/];
143
+ });
144
+ }); })];
145
+ case 1:
146
+ _a.sent();
147
+ expect(result.current.states.loading).toBe('loaded');
148
+ expect(result.current.data).toStrictEqual(hookResponse.result);
149
+ return [2 /*return*/];
150
+ }
151
+ });
152
+ }); });
153
+ it('should not update state in case of cancel request', function () { return __awaiter(void 0, void 0, void 0, function () {
154
+ var result;
155
+ return __generator(this, function (_a) {
156
+ switch (_a.label) {
157
+ case 0:
158
+ result = setUp().result;
159
+ expect(result.current.states.loading).toBe('loading');
160
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
161
+ return __generator(this, function (_a) {
162
+ rejectGetSavedSearches({ errorMessage: 'Error!!!', name: 'AbortError' });
163
+ return [2 /*return*/];
164
+ });
165
+ }); })];
166
+ case 1:
167
+ _a.sent();
168
+ expect(result.current.states.loading).toBe('loading');
169
+ return [2 /*return*/];
170
+ }
171
+ });
172
+ }); });
173
+ it('should send total requests if option countResults is true', function () { return __awaiter(void 0, void 0, void 0, function () {
174
+ var props, result;
175
+ return __generator(this, function (_a) {
176
+ switch (_a.label) {
177
+ case 0:
178
+ props = __assign(__assign({}, defaultProps), { options: __assign(__assign({}, defaultProps.options), { countResults: true }) });
179
+ result = setUp(props).result;
180
+ expect(result.current.states.loading).toBe('loading');
181
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
182
+ return __generator(this, function (_a) {
183
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
184
+ return [2 /*return*/];
185
+ });
186
+ }); })];
187
+ case 1:
188
+ _a.sent();
189
+ expect(result.current.data).toStrictEqual([
190
+ __assign(__assign({}, defaultSavedSearchesResponse.result[0]), { count: 1 }),
191
+ __assign(__assign({}, defaultSavedSearchesResponse.result[1]), { count: 2 }),
192
+ defaultSavedSearchesResponse.result[2]
193
+ ]);
194
+ expect(result.current.states.loading).toBe('loaded');
195
+ expect(mdm_sdk_1.getTotalsForQuery.mock.calls.length).toBe(3);
196
+ expect(mdm_sdk_1.getTotalsForQuery.mock.calls[0][2]).toBe(signal);
197
+ expect(mdm_sdk_1.getTotalsForQuery.mock.calls[0][0]).not.toContain('lastDay');
198
+ expect(mdm_sdk_1.getTotalsForQuery.mock.calls[0][0]).not.toContain('now');
199
+ return [2 /*return*/];
200
+ }
201
+ });
202
+ }); });
203
+ it('should not fail with nil options', function () { return __awaiter(void 0, void 0, void 0, function () {
204
+ var result;
205
+ return __generator(this, function (_a) {
206
+ switch (_a.label) {
207
+ case 0:
208
+ result = setUp({ defaultRowsPerPage: 25 }).result;
209
+ expect(result.current.states.loading).toBe('loading');
210
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
211
+ return __generator(this, function (_a) {
212
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
213
+ return [2 /*return*/];
214
+ });
215
+ }); })];
216
+ case 1:
217
+ _a.sent();
218
+ expect(result.current.states.loading).toBe('loaded');
219
+ expect(result.current.data).toStrictEqual(defaultSavedSearchesResponse.result);
220
+ return [2 /*return*/];
221
+ }
222
+ });
223
+ }); });
224
+ it('should not fail when response.result is undefined', function () { return __awaiter(void 0, void 0, void 0, function () {
225
+ var result;
226
+ return __generator(this, function (_a) {
227
+ switch (_a.label) {
228
+ case 0:
229
+ result = setUp().result;
230
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
231
+ return __generator(this, function (_a) {
232
+ resolveGetSavedSearches(__assign(__assign({}, defaultSavedSearchesResponse), { result: undefined }));
233
+ return [2 /*return*/];
234
+ });
235
+ }); })];
236
+ case 1:
237
+ _a.sent();
238
+ expect(result.current.states.loading).toBe('loaded');
239
+ expect(result.current.data).toStrictEqual([]);
240
+ return [2 /*return*/];
241
+ }
242
+ });
243
+ }); });
244
+ describe('Lazy saved search behaviour', function () {
245
+ var defaultProps = {
246
+ options: { favoriteOnly: true, countResults: true },
247
+ queryEstimatorEnabled: true,
248
+ defaultRowsPerPage: 25
249
+ };
250
+ it('should use heavySearchCircuitBreaker and get total -1 for heavy search', function () { return __awaiter(void 0, void 0, void 0, function () {
251
+ var result;
252
+ return __generator(this, function (_a) {
253
+ switch (_a.label) {
254
+ case 0:
255
+ result = setUp(defaultProps).result;
256
+ expect(result.current.states.loading).toBe('loading');
257
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
258
+ return __generator(this, function (_a) {
259
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
260
+ return [2 /*return*/];
261
+ });
262
+ }); })];
263
+ case 1:
264
+ _a.sent();
265
+ expect(result.current.states.loading).toBe('loaded');
266
+ expect(result.current.data).toStrictEqual([
267
+ __assign(__assign({}, defaultSavedSearchesResponse.result[0]), { count: 1 }),
268
+ __assign(__assign({}, defaultSavedSearchesResponse.result[1]), { count: -1 }),
269
+ defaultSavedSearchesResponse.result[2]
270
+ ]);
271
+ expect(mdm_sdk_1.getTotalsForQuery).toHaveBeenCalledTimes(3);
272
+ expect(mdm_sdk_1.getTotalsForQuery.mock.calls[0][2]).toBe(signal);
273
+ expect(mdm_sdk_1.getTotalsForQuery.mock.calls[0][0]).not.toContain('lastDay');
274
+ expect(mdm_sdk_1.getTotalsForQuery.mock.calls[0][0]).not.toContain('now');
275
+ return [2 /*return*/];
276
+ }
277
+ });
278
+ }); });
279
+ it('should load total by loadTotalForSearchByUri for heavy search', function () { return __awaiter(void 0, void 0, void 0, function () {
280
+ var result;
281
+ return __generator(this, function (_a) {
282
+ switch (_a.label) {
283
+ case 0:
284
+ result = setUp(defaultProps).result;
285
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
286
+ return __generator(this, function (_a) {
287
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
288
+ return [2 /*return*/];
289
+ });
290
+ }); })];
291
+ case 1:
292
+ _a.sent();
293
+ expect(result.current.data).toStrictEqual([
294
+ __assign(__assign({}, defaultSavedSearchesResponse.result[0]), { count: 1 }),
295
+ __assign(__assign({}, defaultSavedSearchesResponse.result[1]), { count: -1 }),
296
+ defaultSavedSearchesResponse.result[2]
297
+ ]);
298
+ expect(mdm_sdk_1.getTotalsForQuery).toHaveBeenCalledTimes(3);
299
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
300
+ return __generator(this, function (_a) {
301
+ result.current.loadTotalForSearchByUri(defaultSavedSearchesResponse.result[1].uri);
302
+ return [2 /*return*/];
303
+ });
304
+ }); })];
305
+ case 2:
306
+ _a.sent();
307
+ expect(result.current.data).toStrictEqual([
308
+ __assign(__assign({}, defaultSavedSearchesResponse.result[0]), { count: 1 }),
309
+ __assign(__assign({}, defaultSavedSearchesResponse.result[1]), { count: 2, isLoadingTotal: false }),
310
+ defaultSavedSearchesResponse.result[2]
311
+ ]);
312
+ expect(mdm_sdk_1.getTotalsForQuery).toHaveBeenCalledTimes(4);
313
+ return [2 /*return*/];
314
+ }
315
+ });
316
+ }); });
317
+ });
318
+ describe('createSearch tests', function () {
319
+ var resolveCreateSavedSearch, rejectCreateSavedSearch;
320
+ var createdSearch = {
321
+ name: 'updated name',
322
+ description: 'updated description',
323
+ isPublic: false,
324
+ query: encodeURIComponent("equals(type,'configuration/entityTypes/People')"),
325
+ uiState: { version: '2.0' }
326
+ };
327
+ beforeEach(function () {
328
+ mdm_sdk_1.createSavedSearch.mockImplementation(function () {
329
+ return new Promise(function (resolve, reject) {
330
+ resolveCreateSavedSearch = resolve;
331
+ rejectCreateSavedSearch = reject;
332
+ });
333
+ });
334
+ });
335
+ it('should create search and reload saved searches correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
336
+ var createSearchPromiseResult, result, createSearchResult, savedSearchesResponse;
337
+ return __generator(this, function (_a) {
338
+ switch (_a.label) {
339
+ case 0:
340
+ result = setUp().result;
341
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
342
+ return __generator(this, function (_a) {
343
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
344
+ return [2 /*return*/];
345
+ });
346
+ }); })];
347
+ case 1:
348
+ _a.sent();
349
+ mdm_sdk_1.getSavedSearches.mockClear();
350
+ expect(result.current.states.creating).toBe(types_1.RequestStates.INIT);
351
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
352
+ return __generator(this, function (_a) {
353
+ createSearchPromiseResult = result.current.createSearch(createdSearch);
354
+ return [2 /*return*/];
355
+ });
356
+ }); })];
357
+ case 2:
358
+ _a.sent();
359
+ expect(mdm_sdk_1.createSavedSearch).toHaveBeenCalledWith([createdSearch]);
360
+ expect(result.current.states.creating).toBe(types_1.RequestStates.LOADING);
361
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
362
+ return __generator(this, function (_a) {
363
+ switch (_a.label) {
364
+ case 0: return [4 /*yield*/, resolveCreateSavedSearch(createdSearch)];
365
+ case 1:
366
+ _a.sent();
367
+ return [2 /*return*/];
368
+ }
369
+ });
370
+ }); })];
371
+ case 3:
372
+ _a.sent();
373
+ return [4 /*yield*/, createSearchPromiseResult];
374
+ case 4:
375
+ createSearchResult = _a.sent();
376
+ expect(createSearchResult).toEqual({ success: true, result: createdSearch });
377
+ expect(result.current.states.creating).toBe(types_1.RequestStates.LOADED);
378
+ expect(mdm_sdk_1.getSavedSearches).toHaveBeenCalledWith({ favoriteOnly: true, max: 25, offset: 0 }, signal);
379
+ expect(result.current.states.loading).toBe(types_1.RequestStates.LOADING);
380
+ savedSearchesResponse = __assign(__assign({}, defaultSavedSearchesResponse), { result: __spreadArray(__spreadArray([], defaultSavedSearchesResponse.result, true), [__assign(__assign({}, createdSearch), { uri: 'savedSearch/4' })], false) });
381
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
382
+ return __generator(this, function (_a) {
383
+ resolveGetSavedSearches(savedSearchesResponse);
384
+ return [2 /*return*/];
385
+ });
386
+ }); })];
387
+ case 5:
388
+ _a.sent();
389
+ expect(result.current.states.loading).toBe(types_1.RequestStates.LOADED);
390
+ expect(result.current.data).toEqual(savedSearchesResponse.result);
391
+ return [2 /*return*/];
392
+ }
393
+ });
394
+ }); });
395
+ it('should create search, go to the first page and reload saved searches correctly in case of page is not 0', function () { return __awaiter(void 0, void 0, void 0, function () {
396
+ var result, savedSearchesResponse;
397
+ return __generator(this, function (_a) {
398
+ switch (_a.label) {
399
+ case 0:
400
+ result = setUp().result;
401
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
402
+ return __generator(this, function (_a) {
403
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
404
+ return [2 /*return*/];
405
+ });
406
+ }); })];
407
+ case 1:
408
+ _a.sent();
409
+ mdm_sdk_1.getSavedSearches.mockClear();
410
+ (0, react_hooks_1.act)(function () {
411
+ result.current.updatePage(1);
412
+ });
413
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
414
+ return __generator(this, function (_a) {
415
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
416
+ return [2 /*return*/];
417
+ });
418
+ }); })];
419
+ case 2:
420
+ _a.sent();
421
+ expect(mdm_sdk_1.getSavedSearches).toHaveBeenCalledWith({ favoriteOnly: true, max: 25, offset: 25 }, signal);
422
+ mdm_sdk_1.getSavedSearches.mockClear();
423
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
424
+ return __generator(this, function (_a) {
425
+ result.current.createSearch(createdSearch);
426
+ return [2 /*return*/];
427
+ });
428
+ }); })];
429
+ case 3:
430
+ _a.sent();
431
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
432
+ return __generator(this, function (_a) {
433
+ switch (_a.label) {
434
+ case 0: return [4 /*yield*/, resolveCreateSavedSearch(createdSearch)];
435
+ case 1:
436
+ _a.sent();
437
+ return [2 /*return*/];
438
+ }
439
+ });
440
+ }); })];
441
+ case 4:
442
+ _a.sent();
443
+ expect(mdm_sdk_1.getSavedSearches).toHaveBeenCalledWith({ favoriteOnly: true, max: 25, offset: 0 }, signal);
444
+ savedSearchesResponse = __assign(__assign({}, defaultSavedSearchesResponse), { result: __spreadArray(__spreadArray([], defaultSavedSearchesResponse.result, true), [__assign(__assign({}, createdSearch), { uri: 'savedSearch/4' })], false) });
445
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
446
+ return __generator(this, function (_a) {
447
+ resolveGetSavedSearches(savedSearchesResponse);
448
+ return [2 /*return*/];
449
+ });
450
+ }); })];
451
+ case 5:
452
+ _a.sent();
453
+ expect(result.current.data).toEqual(savedSearchesResponse.result);
454
+ return [2 /*return*/];
455
+ }
456
+ });
457
+ }); });
458
+ it('should show error message and should not reload saved searches in case of createSavedSearch rejects error', function () { return __awaiter(void 0, void 0, void 0, function () {
459
+ var createSearchPromiseResult, result, createSearchResult;
460
+ return __generator(this, function (_a) {
461
+ switch (_a.label) {
462
+ case 0:
463
+ result = setUp().result;
464
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
465
+ return __generator(this, function (_a) {
466
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
467
+ return [2 /*return*/];
468
+ });
469
+ }); })];
470
+ case 1:
471
+ _a.sent();
472
+ mdm_sdk_1.getSavedSearches.mockClear();
473
+ expect(result.current.states.creating).toBe(types_1.RequestStates.INIT);
474
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
475
+ return __generator(this, function (_a) {
476
+ createSearchPromiseResult = result.current.createSearch(createdSearch);
477
+ return [2 /*return*/];
478
+ });
479
+ }); })];
480
+ case 2:
481
+ _a.sent();
482
+ expect(mdm_sdk_1.createSavedSearch).toHaveBeenCalledWith([createdSearch]);
483
+ expect(result.current.states.creating).toBe(types_1.RequestStates.LOADING);
484
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
485
+ return __generator(this, function (_a) {
486
+ switch (_a.label) {
487
+ case 0: return [4 /*yield*/, rejectCreateSavedSearch({ errorMessage: 'Something went wrong' })];
488
+ case 1:
489
+ _a.sent();
490
+ return [2 /*return*/];
491
+ }
492
+ });
493
+ }); })];
494
+ case 3:
495
+ _a.sent();
496
+ return [4 /*yield*/, createSearchPromiseResult];
497
+ case 4:
498
+ createSearchResult = _a.sent();
499
+ expect(createSearchResult).toEqual({ success: false, error: { errorMessage: 'Something went wrong' } });
500
+ expect(result.current.states.creating).toBe(types_1.RequestStates.ERROR);
501
+ expect(result.current.data).toEqual(defaultSavedSearchesResponse.result);
502
+ expect(mdm_sdk_1.getSavedSearches).not.toHaveBeenCalled();
503
+ expect(core_1.showDefaultErrorMessage).toHaveBeenCalledWith({ errorMessage: 'Something went wrong' });
504
+ return [2 /*return*/];
505
+ }
506
+ });
507
+ }); });
508
+ });
509
+ describe('updateSearch tests', function () {
510
+ var resolveUpdateSavedSearch, rejectUpdateSavedSearch;
511
+ var updatedSearch = __assign(__assign({}, defaultSavedSearchesResponse.result[1]), { name: 'updated name', description: 'updated description' });
512
+ beforeEach(function () {
513
+ mdm_sdk_1.updateSavedSearch.mockImplementation(function () {
514
+ return new Promise(function (resolve, reject) {
515
+ resolveUpdateSavedSearch = resolve;
516
+ rejectUpdateSavedSearch = reject;
517
+ });
518
+ });
519
+ });
520
+ it('should update search correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
521
+ var updateSearchPromiseResult, result, updateSearchResult;
522
+ return __generator(this, function (_a) {
523
+ switch (_a.label) {
524
+ case 0:
525
+ result = setUp().result;
526
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
527
+ return __generator(this, function (_a) {
528
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
529
+ return [2 /*return*/];
530
+ });
531
+ }); })];
532
+ case 1:
533
+ _a.sent();
534
+ expect(result.current.states.updating).toBe(types_1.RequestStates.INIT);
535
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
536
+ return __generator(this, function (_a) {
537
+ updateSearchPromiseResult = result.current.updateSearch(updatedSearch);
538
+ return [2 /*return*/];
539
+ });
540
+ }); })];
541
+ case 2:
542
+ _a.sent();
543
+ expect(result.current.states.updating).toBe(types_1.RequestStates.LOADING);
544
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
545
+ return __generator(this, function (_a) {
546
+ switch (_a.label) {
547
+ case 0: return [4 /*yield*/, resolveUpdateSavedSearch(updatedSearch)];
548
+ case 1:
549
+ _a.sent();
550
+ return [2 /*return*/];
551
+ }
552
+ });
553
+ }); })];
554
+ case 3:
555
+ _a.sent();
556
+ return [4 /*yield*/, updateSearchPromiseResult];
557
+ case 4:
558
+ updateSearchResult = _a.sent();
559
+ expect(updateSearchResult).toEqual({ success: true, result: updatedSearch });
560
+ expect(mdm_sdk_1.updateSavedSearch).toHaveBeenCalledWith(updatedSearch);
561
+ expect(result.current.states.updating).toBe(types_1.RequestStates.LOADED);
562
+ expect(result.current.data).toEqual([
563
+ defaultSavedSearchesResponse.result[0],
564
+ updatedSearch,
565
+ defaultSavedSearchesResponse.result[2]
566
+ ]);
567
+ return [2 /*return*/];
568
+ }
569
+ });
570
+ }); });
571
+ it('should show error message and should not update search in case of updateSavedSearch rejects error', function () { return __awaiter(void 0, void 0, void 0, function () {
572
+ var updateSearchPromiseResult, result, updateSearchResult;
573
+ return __generator(this, function (_a) {
574
+ switch (_a.label) {
575
+ case 0:
576
+ result = setUp().result;
577
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
578
+ return __generator(this, function (_a) {
579
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
580
+ return [2 /*return*/];
581
+ });
582
+ }); })];
583
+ case 1:
584
+ _a.sent();
585
+ expect(result.current.states.updating).toBe(types_1.RequestStates.INIT);
586
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
587
+ return __generator(this, function (_a) {
588
+ updateSearchPromiseResult = result.current.updateSearch(updatedSearch);
589
+ return [2 /*return*/];
590
+ });
591
+ }); })];
592
+ case 2:
593
+ _a.sent();
594
+ expect(result.current.states.updating).toBe(types_1.RequestStates.LOADING);
595
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
596
+ return __generator(this, function (_a) {
597
+ switch (_a.label) {
598
+ case 0: return [4 /*yield*/, rejectUpdateSavedSearch({ errorMessage: 'Something went wrong' })];
599
+ case 1:
600
+ _a.sent();
601
+ return [2 /*return*/];
602
+ }
603
+ });
604
+ }); })];
605
+ case 3:
606
+ _a.sent();
607
+ return [4 /*yield*/, updateSearchPromiseResult];
608
+ case 4:
609
+ updateSearchResult = _a.sent();
610
+ expect(updateSearchResult).toEqual({ success: false, error: { errorMessage: 'Something went wrong' } });
611
+ expect(mdm_sdk_1.updateSavedSearch).toHaveBeenCalledWith(updatedSearch);
612
+ expect(result.current.states.updating).toBe(types_1.RequestStates.ERROR);
613
+ expect(result.current.data).toEqual(defaultSavedSearchesResponse.result);
614
+ expect(core_1.showDefaultErrorMessage).toHaveBeenCalledWith({ errorMessage: 'Something went wrong' });
615
+ return [2 /*return*/];
616
+ }
617
+ });
618
+ }); });
619
+ });
620
+ describe('deleteSearch tests', function () {
621
+ var resolveDeleteSavedSearch, rejectDeleteSavedSearch;
622
+ beforeEach(function () {
623
+ mdm_sdk_1.deleteSavedSearch.mockImplementation(function () {
624
+ return new Promise(function (resolve, reject) {
625
+ resolveDeleteSavedSearch = resolve;
626
+ rejectDeleteSavedSearch = reject;
627
+ });
628
+ });
629
+ });
630
+ it('should delete search and reload saved searches correctly', function () { return __awaiter(void 0, void 0, void 0, function () {
631
+ var deleteSearchPromiseResult, result, deletedUri, deleteSearchResult, savedSearchesResponse;
632
+ return __generator(this, function (_a) {
633
+ switch (_a.label) {
634
+ case 0:
635
+ result = setUp().result;
636
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
637
+ return __generator(this, function (_a) {
638
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
639
+ return [2 /*return*/];
640
+ });
641
+ }); })];
642
+ case 1:
643
+ _a.sent();
644
+ mdm_sdk_1.getSavedSearches.mockClear();
645
+ expect(result.current.states.deleting).toBe(types_1.RequestStates.INIT);
646
+ deletedUri = defaultSavedSearchesResponse.result[1].uri;
647
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
648
+ return __generator(this, function (_a) {
649
+ deleteSearchPromiseResult = result.current.deleteSearch(deletedUri);
650
+ return [2 /*return*/];
651
+ });
652
+ }); })];
653
+ case 2:
654
+ _a.sent();
655
+ expect(mdm_sdk_1.deleteSavedSearch).toHaveBeenCalledWith({ uri: deletedUri });
656
+ expect(result.current.states.deleting).toBe(types_1.RequestStates.LOADING);
657
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
658
+ return __generator(this, function (_a) {
659
+ switch (_a.label) {
660
+ case 0: return [4 /*yield*/, resolveDeleteSavedSearch({ status: 'success' })];
661
+ case 1:
662
+ _a.sent();
663
+ return [2 /*return*/];
664
+ }
665
+ });
666
+ }); })];
667
+ case 3:
668
+ _a.sent();
669
+ return [4 /*yield*/, deleteSearchPromiseResult];
670
+ case 4:
671
+ deleteSearchResult = _a.sent();
672
+ expect(deleteSearchResult).toEqual({ success: true, result: { status: 'success' } });
673
+ expect(result.current.states.deleting).toBe(types_1.RequestStates.LOADED);
674
+ expect(mdm_sdk_1.getSavedSearches).toHaveBeenCalledWith({ favoriteOnly: true, max: 25, offset: 0 }, signal);
675
+ expect(result.current.states.loading).toBe(types_1.RequestStates.LOADING);
676
+ savedSearchesResponse = __assign(__assign({}, defaultSavedSearchesResponse), { result: [defaultSavedSearchesResponse.result[0], defaultSavedSearchesResponse.result[2]] });
677
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
678
+ return __generator(this, function (_a) {
679
+ resolveGetSavedSearches(savedSearchesResponse);
680
+ return [2 /*return*/];
681
+ });
682
+ }); })];
683
+ case 5:
684
+ _a.sent();
685
+ expect(result.current.states.loading).toBe(types_1.RequestStates.LOADED);
686
+ expect(result.current.data).toEqual(savedSearchesResponse.result);
687
+ return [2 /*return*/];
688
+ }
689
+ });
690
+ }); });
691
+ it('should show error message and should not reload saved searches in case of deleteSavedSearch rejects error', function () { return __awaiter(void 0, void 0, void 0, function () {
692
+ var deleteSearchPromiseResult, result, deletedUri, deleteSearchResult;
693
+ return __generator(this, function (_a) {
694
+ switch (_a.label) {
695
+ case 0:
696
+ result = setUp().result;
697
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
698
+ return __generator(this, function (_a) {
699
+ resolveGetSavedSearches(defaultSavedSearchesResponse);
700
+ return [2 /*return*/];
701
+ });
702
+ }); })];
703
+ case 1:
704
+ _a.sent();
705
+ mdm_sdk_1.getSavedSearches.mockClear();
706
+ expect(result.current.states.deleting).toBe(types_1.RequestStates.INIT);
707
+ deletedUri = defaultSavedSearchesResponse.result[1].uri;
708
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
709
+ return __generator(this, function (_a) {
710
+ deleteSearchPromiseResult = result.current.deleteSearch(deletedUri);
711
+ return [2 /*return*/];
712
+ });
713
+ }); })];
714
+ case 2:
715
+ _a.sent();
716
+ expect(result.current.states.deleting).toBe(types_1.RequestStates.LOADING);
717
+ return [4 /*yield*/, (0, react_hooks_1.act)(function () { return __awaiter(void 0, void 0, void 0, function () {
718
+ return __generator(this, function (_a) {
719
+ switch (_a.label) {
720
+ case 0: return [4 /*yield*/, rejectDeleteSavedSearch({ errorMessage: 'Something went wrong' })];
721
+ case 1:
722
+ _a.sent();
723
+ return [2 /*return*/];
724
+ }
725
+ });
726
+ }); })];
727
+ case 3:
728
+ _a.sent();
729
+ return [4 /*yield*/, deleteSearchPromiseResult];
730
+ case 4:
731
+ deleteSearchResult = _a.sent();
732
+ expect(deleteSearchResult).toEqual({ success: false, error: { errorMessage: 'Something went wrong' } });
733
+ expect(mdm_sdk_1.deleteSavedSearch).toHaveBeenCalledWith({ uri: deletedUri });
734
+ expect(result.current.states.deleting).toBe(types_1.RequestStates.ERROR);
735
+ expect(result.current.data).toEqual(defaultSavedSearchesResponse.result);
736
+ expect(mdm_sdk_1.getSavedSearches).not.toHaveBeenCalled();
737
+ expect(core_1.showDefaultErrorMessage).toHaveBeenCalledWith({ errorMessage: 'Something went wrong' });
738
+ return [2 /*return*/];
739
+ }
740
+ });
741
+ }); });
742
+ });
743
+ });