@northern.tech/testing 0.8.1 → 0.8.3

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 (86) hide show
  1. package/dist/baseTestConfig.json +17 -0
  2. package/dist/chunk-3CVNBMEF.js +161 -0
  3. package/dist/chunk-3CVNBMEF.js.map +1 -0
  4. package/dist/chunk-7GNK7IRV.js +29 -0
  5. package/dist/chunk-7GNK7IRV.js.map +1 -0
  6. package/dist/chunk-AP4MOFMD.js +239 -0
  7. package/dist/chunk-AP4MOFMD.js.map +1 -0
  8. package/dist/chunk-DOHA53UH.js +301 -0
  9. package/dist/chunk-DOHA53UH.js.map +1 -0
  10. package/dist/chunk-H4J7L3HX.js +188 -0
  11. package/dist/chunk-H4J7L3HX.js.map +1 -0
  12. package/dist/chunk-HRGVXWMH.js +17 -0
  13. package/dist/chunk-HRGVXWMH.js.map +1 -0
  14. package/dist/chunk-KCLTR6QS.js +34 -0
  15. package/dist/chunk-KCLTR6QS.js.map +1 -0
  16. package/dist/chunk-M2TKDOPD.js +266 -0
  17. package/dist/chunk-M2TKDOPD.js.map +1 -0
  18. package/dist/chunk-O42KIJXJ.js +933 -0
  19. package/dist/chunk-O42KIJXJ.js.map +1 -0
  20. package/dist/mockData.cjs +967 -0
  21. package/dist/mockData.cjs.map +1 -0
  22. package/dist/mockData.d.cts +636 -0
  23. package/dist/mockData.d.ts +636 -0
  24. package/dist/mockData.js +47 -0
  25. package/dist/mockData.js.map +1 -0
  26. package/dist/requestHandlers/deploymentHandlers.cjs +1044 -0
  27. package/dist/requestHandlers/deploymentHandlers.cjs.map +1 -0
  28. package/dist/requestHandlers/deploymentHandlers.d.cts +5 -0
  29. package/dist/requestHandlers/deploymentHandlers.d.ts +5 -0
  30. package/dist/requestHandlers/deploymentHandlers.js +8 -0
  31. package/dist/requestHandlers/deploymentHandlers.js.map +1 -0
  32. package/dist/requestHandlers/deviceHandlers.cjs +1096 -0
  33. package/dist/requestHandlers/deviceHandlers.cjs.map +1 -0
  34. package/dist/requestHandlers/deviceHandlers.d.cts +20 -0
  35. package/dist/requestHandlers/deviceHandlers.d.ts +20 -0
  36. package/dist/requestHandlers/deviceHandlers.js +12 -0
  37. package/dist/requestHandlers/deviceHandlers.js.map +1 -0
  38. package/dist/requestHandlers/monitorHandlers.cjs +834 -0
  39. package/dist/requestHandlers/monitorHandlers.cjs.map +1 -0
  40. package/dist/requestHandlers/monitorHandlers.d.cts +5 -0
  41. package/dist/requestHandlers/monitorHandlers.d.ts +5 -0
  42. package/dist/requestHandlers/monitorHandlers.js +8 -0
  43. package/dist/requestHandlers/monitorHandlers.js.map +1 -0
  44. package/dist/requestHandlers/organizationHandlers.cjs +1129 -0
  45. package/dist/requestHandlers/organizationHandlers.cjs.map +1 -0
  46. package/dist/requestHandlers/organizationHandlers.d.cts +5 -0
  47. package/dist/requestHandlers/organizationHandlers.d.ts +5 -0
  48. package/dist/requestHandlers/organizationHandlers.js +8 -0
  49. package/dist/requestHandlers/organizationHandlers.js.map +1 -0
  50. package/dist/requestHandlers/releaseHandlers.cjs +965 -0
  51. package/dist/requestHandlers/releaseHandlers.cjs.map +1 -0
  52. package/dist/requestHandlers/releaseHandlers.d.cts +5 -0
  53. package/dist/requestHandlers/releaseHandlers.d.ts +5 -0
  54. package/dist/requestHandlers/releaseHandlers.js +8 -0
  55. package/dist/requestHandlers/releaseHandlers.js.map +1 -0
  56. package/dist/requestHandlers/requestHandlers.cjs +2002 -0
  57. package/dist/requestHandlers/requestHandlers.cjs.map +1 -0
  58. package/dist/requestHandlers/requestHandlers.d.cts +5 -0
  59. package/dist/requestHandlers/requestHandlers.d.ts +5 -0
  60. package/dist/requestHandlers/requestHandlers.js +35 -0
  61. package/dist/requestHandlers/requestHandlers.js.map +1 -0
  62. package/dist/requestHandlers/userHandlers.cjs +993 -0
  63. package/dist/requestHandlers/userHandlers.cjs.map +1 -0
  64. package/dist/requestHandlers/userHandlers.d.cts +5 -0
  65. package/dist/requestHandlers/userHandlers.d.ts +5 -0
  66. package/dist/requestHandlers/userHandlers.js +8 -0
  67. package/dist/requestHandlers/userHandlers.js.map +1 -0
  68. package/dist/setupTests.cjs +995 -0
  69. package/dist/setupTests.cjs.map +1 -0
  70. package/dist/setupTests.d.cts +77 -0
  71. package/dist/setupTests.d.ts +77 -0
  72. package/dist/setupTests.js +138 -0
  73. package/dist/setupTests.js.map +1 -0
  74. package/dist/theme/light.cjs +41 -0
  75. package/dist/theme/light.cjs.map +1 -0
  76. package/dist/theme/light.d.cts +12 -0
  77. package/dist/theme/light.d.ts +12 -0
  78. package/dist/theme/light.js +7 -0
  79. package/dist/theme/light.js.map +1 -0
  80. package/dist/utils.cjs +71 -0
  81. package/dist/utils.cjs.map +1 -0
  82. package/dist/utils.d.cts +69 -0
  83. package/dist/utils.d.ts +69 -0
  84. package/dist/utils.js +12 -0
  85. package/dist/utils.js.map +1 -0
  86. package/package.json +1 -1
@@ -0,0 +1,995 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+
31
+ // src/setupTests.tsx
32
+ var setupTests_exports = {};
33
+ __export(setupTests_exports, {
34
+ TEST_LOCATION: () => TEST_LOCATION,
35
+ afterAll: () => afterAll,
36
+ afterEach: () => afterEach,
37
+ beforeAll: () => beforeAll,
38
+ beforeEach: () => beforeEach,
39
+ mockAbortController: () => mockAbortController,
40
+ render: () => customRender
41
+ });
42
+ module.exports = __toCommonJS(setupTests_exports);
43
+ var import_react3 = __toESM(require("react"), 1);
44
+ var import_react_redux2 = require("react-redux");
45
+ var import_react_router_dom2 = require("react-router-dom");
46
+ var import_jest = require("@emotion/jest");
47
+ var import_styles2 = require("@mui/material/styles");
48
+ var import_helpers = require("@northern.tech/utils/helpers");
49
+ var import_toolkit = require("@reduxjs/toolkit");
50
+ var import_react4 = require("@testing-library/react");
51
+ var import_vitest2 = require("vitest");
52
+ var import_worker_threads = require("worker_threads");
53
+
54
+ // src/mockData.ts
55
+ var import_constants = require("@northern.tech/utils/constants");
56
+ var menderEnvironment = {
57
+ features: {
58
+ hasMultitenancy: true
59
+ },
60
+ integrationVersion: "saas-123.34",
61
+ menderVersion: "next",
62
+ metaMenderVersion: "saas-123.34",
63
+ services: {
64
+ deploymentsVersion: "1.2.3",
65
+ deviceauthVersion: null,
66
+ inventoryVersion: null
67
+ }
68
+ };
69
+ var TEST_SESSION_DATETIME = "2019-01-13T13:00:00.000Z";
70
+ var testDate = new Date(TEST_SESSION_DATETIME);
71
+ var mockDate = new Date(testDate.setMilliseconds(testDate.getMilliseconds() + import_constants.maxSessionAge));
72
+ var defaultCreationDate = "2019-01-13T06:25:00.000Z";
73
+ var defaultMacAddress = "dc:a6:32:12:ad:bf";
74
+ var permissionSetObjectTypes = {
75
+ any: "Any",
76
+ artifacts: "Artifacts",
77
+ empty: "",
78
+ groups: "Device groups",
79
+ releases: "Releases",
80
+ tenantManagement: "Tenant management",
81
+ userManagement: "User management"
82
+ };
83
+ var commonEndpoints = {
84
+ artifacts: "^/api/management/v1/deployments/artifacts",
85
+ artifactDetails: "^/api/management/v1/deployments/artifacts/[^/]+",
86
+ deviceManagement: "^/api/management/(v[1-9])/(devauth|inventory)/"
87
+ };
88
+ var token = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjZTNkMGY4Yy1hZWRlLTQwMzAtYjM5MS03ZDUwMjBlYjg3M2UiLCJzdWIiOiJhMzBhNzgwYi1iODQzLTUzNDQtODBlMy0wZmQ5NWE0ZjZmYzMiLCJleHAiOjE2MDY4MTUzNjksImlhdCI6MTYwNjIxMDU2OSwibWVuZGVyLnRlbmFudCI6IjVmODVjMTdiY2U2MmI3ZmE3ZjVmNzA0MCIsIm1lbmRlci51c2VyIjp0cnVlLCJpc3MiOiJNZW5kZXIgVXNlcnMiLCJzY3AiOiJtZW5kZXIuKiIsIm1lbmRlci5wbGFuIjoicHJvZmVzc2lvbmFsIiwibmJmIjoxNjA2MjEwNTY5fQ.qVgYdCzLTf8OdK9uUctqqaY_HWkIiwpekuGvuGQAXCEgOv4bRNDlZRN_ZRSbxQoARG3pquhScbQrjBV9tcF4irTUPlTn3yrsXNO17DpcbTVeKRkb88RDtIKiRw3orVZ_GlIb-ckTQ5dS-Nqlyyf3Fmrhca-gwt6m_xv2UrmJK6eYYTMfggdRRWb-4u7mEkBI_pHPMTQrT8kJ2BeX-vHgazH9AoH0k85LHtFZQXD7pXHlDZRnLxJXukncwMGDmF17374gavYAIyDIzcC8sEBMDnVXgpikeA1sauzirqix6mAVs6XmxdQO7aF0wfXO1_PTYUA3Nk1oQfMYNlEI3U9uLRJRZIq2L8fmrrBryhstKd4y0KlBbGAQrx8NtRkgajjd1ljMfPBUEZrb7uSerVjneiO-aIBO76CuH0zdklphIjpGJeogkBhe8pAYNggp1XsZHgpZfl7IE5faKaDkMGnutaea--Czor6bhqUNCuY4tR0cpQJbNwy6LS9o1CFy4Log";
89
+ var userId = "a30a780b-b843-5344-80e3-0fd95a4f6fc3";
90
+ var defaultUser = {
91
+ created_ts: "2019-01-01T10:30:00.000Z",
92
+ email: "a@b.com",
93
+ id: "a1",
94
+ roles: ["RBAC_ROLE_PERMIT_ALL"],
95
+ tfa_status: "enabled",
96
+ verified: true
97
+ };
98
+ var deviceTypes = { qemu: "qemux86-64" };
99
+ var checkInTimeRounded = "2019-01-01T00:00:00.000Z";
100
+ var checkInTimeExact = "2019-01-01T10:25:00.000Z";
101
+ var mockApiResponses = {
102
+ deployments: {
103
+ byId: {
104
+ d1: {
105
+ id: "d1",
106
+ name: "test deployment",
107
+ created: "2019-01-01T12:30:00.000Z",
108
+ devices: {
109
+ a1: {
110
+ id: "a1",
111
+ status: "installing",
112
+ attributes: {},
113
+ image: { size: 123 }
114
+ }
115
+ },
116
+ statistics: {
117
+ status: {
118
+ "already-installed": 0,
119
+ decommissioned: 0,
120
+ downloading: 0,
121
+ failure: 0,
122
+ installing: 1,
123
+ noartifact: 0,
124
+ pending: 0,
125
+ rebooting: 0,
126
+ success: 0
127
+ },
128
+ total_size: 1234
129
+ }
130
+ },
131
+ d2: {
132
+ id: "d2",
133
+ name: "test deployment 2",
134
+ artifact_name: "r1",
135
+ artifacts: ["123"],
136
+ created: "2019-01-01T12:25:00.000Z",
137
+ device_count: 1,
138
+ devices: {
139
+ b1: {
140
+ attributes: {},
141
+ id: "b1",
142
+ status: "pending"
143
+ }
144
+ },
145
+ filter: void 0,
146
+ group: void 0,
147
+ statistics: {
148
+ status: {
149
+ downloading: 0,
150
+ decommissioned: 0,
151
+ failure: 0,
152
+ installing: 0,
153
+ noartifact: 0,
154
+ pending: 1,
155
+ rebooting: 0,
156
+ success: 0,
157
+ "already-installed": 0
158
+ }
159
+ }
160
+ },
161
+ d3: {
162
+ id: "d3",
163
+ name: "Test",
164
+ phases: [
165
+ { id: "0", batch_size: 2, device_count: 2 },
166
+ { id: "1", start_ts: "2019-02-04T11:45:10.002Z", batch_size: 3, device_count: 3 },
167
+ { id: "2", start_ts: "2019-02-05T11:45:10.002Z", batch_size: 5, device_count: 5 },
168
+ { id: "3", start_ts: "2019-02-06T11:45:10.002Z", batch_size: 5, device_count: 5 },
169
+ { id: "4", start_ts: "2019-02-21T11:45:10.002Z", batch_size: 5, device_count: 0 }
170
+ ],
171
+ max_devices: 0,
172
+ created: "2019-01-31T12:59:30.020Z",
173
+ devices: {},
174
+ filter: void 0,
175
+ group: void 0,
176
+ stats: {
177
+ pending: 3,
178
+ decommissioned: 0,
179
+ failure: 23,
180
+ pause_before_committing: 0,
181
+ pause_before_rebooting: 0,
182
+ installing: 0,
183
+ rebooting: 0,
184
+ "already-installed": 0,
185
+ pause_before_installing: 0,
186
+ downloading: 0,
187
+ success: 6,
188
+ aborted: 0,
189
+ noartifact: 0
190
+ },
191
+ statistics: { total_size: "1234" },
192
+ status: "inprogress",
193
+ active: true,
194
+ device_count: 100,
195
+ retries: "0",
196
+ type: "software"
197
+ }
198
+ },
199
+ byStatus: {
200
+ pending: { deploymentIds: ["d2"] },
201
+ inprogress: { deploymentIds: ["d3"] }
202
+ }
203
+ },
204
+ devices: {
205
+ byId: {
206
+ a1: {
207
+ id: "a1",
208
+ auth_sets: [
209
+ {
210
+ id: "auth1",
211
+ identity_data: { mac: defaultMacAddress },
212
+ pubkey: "-----BEGIN PUBLIC KEY-----\nMIIBojWELzgJ62hcXIhAfqfoNiaB1326XZByZwcnHr5BuSPAgMBAAE=\n-----END PUBLIC KEY-----\n",
213
+ status: "accepted",
214
+ ts: defaultCreationDate
215
+ }
216
+ ],
217
+ updated_ts: "2019-01-01T09:25:00.000Z"
218
+ },
219
+ b1: {
220
+ id: "b1",
221
+ attributes: {
222
+ ipv4_wlan0: "192.168.10.141/24",
223
+ device_type: [deviceTypes.qemu]
224
+ },
225
+ system: {
226
+ check_in_time: checkInTimeRounded
227
+ },
228
+ check_in_time: checkInTimeExact,
229
+ check_in_time_exact: checkInTimeExact,
230
+ check_in_time_rounded: checkInTimeRounded,
231
+ identity_data: { mac: defaultMacAddress },
232
+ status: "accepted",
233
+ decommissioning: false,
234
+ created_ts: defaultCreationDate,
235
+ updated_ts: "2019-01-01T09:25:00.000Z",
236
+ auth_sets: [
237
+ {
238
+ id: "auth1",
239
+ identity_data: { mac: defaultMacAddress },
240
+ pubkey: "-----BEGIN PUBLIC KEY-----\nMIIBojWELzgJ62hcXIhAfqfoNiaB1326XZByZwcnHr5BuSPAgMBAAE=\n-----END PUBLIC KEY-----\n",
241
+ ts: defaultCreationDate,
242
+ status: "accepted"
243
+ }
244
+ ]
245
+ }
246
+ },
247
+ groups: {
248
+ byId: {
249
+ testGroup: {
250
+ deviceIds: ["a1", "b1"],
251
+ filters: [],
252
+ total: 2
253
+ },
254
+ testGroupDynamic: {
255
+ id: "filter1",
256
+ name: "filter1",
257
+ filters: [{ scope: "system", key: "group", operator: "$eq", value: "things" }]
258
+ }
259
+ }
260
+ },
261
+ limits: { standard: 500, micro: 0, system: 0 },
262
+ byStatus: {
263
+ accepted: { deviceIds: ["a1", "b1"], total: 2 },
264
+ active: { deviceIds: [], total: 0 },
265
+ inactive: { deviceIds: [], total: 0 },
266
+ pending: { deviceIds: ["c1"], total: 1 },
267
+ preauthorized: { deviceIds: [], total: 0 },
268
+ rejected: { deviceIds: [], total: 0 }
269
+ }
270
+ },
271
+ organization: {
272
+ organization: {
273
+ id: "1",
274
+ addons: [],
275
+ name: "test",
276
+ plan: "os",
277
+ trial: false
278
+ },
279
+ products: [
280
+ {
281
+ name: "mender_standard",
282
+ billing_unit: "devices",
283
+ prices: [
284
+ {
285
+ plan: "os",
286
+ constraints: {
287
+ min: 50,
288
+ max: 1e3,
289
+ div: 50
290
+ }
291
+ },
292
+ {
293
+ plan: "professional",
294
+ constraints: {
295
+ min: 250,
296
+ max: 1e4,
297
+ div: 50
298
+ }
299
+ }
300
+ ],
301
+ addons: [
302
+ {
303
+ name: "troubleshoot",
304
+ prices: [{ plan: "os" }, { plan: "professional" }]
305
+ },
306
+ {
307
+ name: "configure",
308
+ prices: [{ plan: "os" }, { plan: "professional" }]
309
+ },
310
+ {
311
+ name: "monitor",
312
+ prices: [{ plan: "professional" }]
313
+ }
314
+ ]
315
+ },
316
+ {
317
+ name: "mender_micro",
318
+ billing_unit: "devices",
319
+ prices: [
320
+ {
321
+ plan: "os",
322
+ constraints: {
323
+ min: 50,
324
+ max: 5e3,
325
+ div: 50
326
+ }
327
+ },
328
+ {
329
+ plan: "professional",
330
+ constraints: {
331
+ min: 500,
332
+ max: 1e5,
333
+ div: 50
334
+ }
335
+ }
336
+ ]
337
+ }
338
+ ],
339
+ intentId: "testIntent",
340
+ auditlog: {
341
+ events: [
342
+ {
343
+ actor: {
344
+ id: "string",
345
+ type: "user",
346
+ email: "string@example.com"
347
+ },
348
+ time: "2019-01-01T12:10:22.667Z",
349
+ action: "create",
350
+ object: {
351
+ id: "string",
352
+ type: "user",
353
+ user: {
354
+ email: "user@acme.com"
355
+ }
356
+ },
357
+ change: "change1"
358
+ },
359
+ {
360
+ actor: {
361
+ id: "string",
362
+ type: "user",
363
+ email: "string",
364
+ identity_data: "string"
365
+ },
366
+ time: "2019-01-01T12:16:22.667Z",
367
+ action: "create",
368
+ object: {
369
+ id: "string",
370
+ type: "deployment",
371
+ deployment: {
372
+ name: "production",
373
+ artifact_name: "Application 0.0.1"
374
+ }
375
+ },
376
+ change: "change2"
377
+ },
378
+ {
379
+ actor: {
380
+ id: "string",
381
+ type: "user",
382
+ email: "string@example.com"
383
+ },
384
+ time: "2019-01-01T12:10:22.669Z",
385
+ action: "open_terminal",
386
+ meta: {
387
+ session_id: ["abd313a8-ee88-48ab-9c99-fbcd80048e6e"]
388
+ },
389
+ object: {
390
+ id: "a1",
391
+ type: "device"
392
+ },
393
+ change: "change3"
394
+ }
395
+ ]
396
+ }
397
+ },
398
+ releases: {
399
+ byId: {
400
+ r1: {
401
+ name: "r1",
402
+ artifacts: [
403
+ {
404
+ id: "art1",
405
+ description: "test description",
406
+ device_types_compatible: [deviceTypes.qemu],
407
+ modified: "2020-09-10T12:16:22.667Z",
408
+ updates: [{ type_info: { type: "testtype" } }],
409
+ artifact_depends: {
410
+ device_type: [deviceTypes.qemu]
411
+ },
412
+ artifact_provides: {
413
+ artifact_name: "myapp",
414
+ "data-partition.myapp.version": "v2020.10",
415
+ list_of_fancy: [deviceTypes.qemu, "x172"]
416
+ },
417
+ clears_artifact_provides: ["data-partition.myapp.*"]
418
+ }
419
+ ],
420
+ device_types_compatible: [deviceTypes.qemu],
421
+ modified: "2020-09-10T12:16:22.667Z",
422
+ metaData: {}
423
+ }
424
+ }
425
+ },
426
+ users: {
427
+ byId: {
428
+ a1: defaultUser,
429
+ [userId]: { ...defaultUser, id: userId, email: "a2@b.com", created_ts: "2019-01-01T12:30:00.000Z" }
430
+ },
431
+ rolesById: {
432
+ admin: {
433
+ name: "admin",
434
+ description: "Administrator role",
435
+ permissions: []
436
+ },
437
+ test: { name: "test", description: "test description", permissions: [] }
438
+ },
439
+ globalSettings: {
440
+ "2fa": "enabled",
441
+ id_attribute: void 0,
442
+ previousFilters: []
443
+ },
444
+ userSettings: {
445
+ "2fa": "disabled",
446
+ columnSelection: [],
447
+ onboarding: { something: "here" },
448
+ tooltips: {},
449
+ previousFilters: []
450
+ }
451
+ }
452
+ };
453
+ var releasesList = Array.from({ length: 5e3 }, (x, i) => ({
454
+ artifacts: [
455
+ {
456
+ id: "art1",
457
+ description: "test description",
458
+ device_types_compatible: [deviceTypes.qemu],
459
+ modified: "2020-09-10T12:16:22.667Z",
460
+ updates: [{ type_info: { type: "testtype" } }],
461
+ artifact_depends: {
462
+ device_type: [deviceTypes.qemu]
463
+ },
464
+ artifact_provides: {
465
+ artifact_name: "myapp",
466
+ "data-partition.myapp.version": "v2020.10",
467
+ list_of_fancy: [deviceTypes.qemu, "x172"]
468
+ },
469
+ clears_artifact_provides: ["data-partition.myapp.*"]
470
+ }
471
+ ],
472
+ device_types_compatible: [deviceTypes.qemu],
473
+ metaData: {},
474
+ name: `release-${i + 1}`,
475
+ modified: i
476
+ }));
477
+ var permissionSets = [
478
+ {
479
+ ...import_constants.defaultPermissionSets.Basic,
480
+ object: permissionSetObjectTypes.empty,
481
+ description: "Set containing basic permissions.",
482
+ permissions: [
483
+ { action: "http", object: { type: "any", value: "^/api/management/v1/useradm/settings$" } },
484
+ { action: "http", object: { type: "any", value: "^/api/management/v1/useradm/users/me$" } },
485
+ { action: "http", object: { type: "any", value: "^/api/management/1.0/auth/verify$" } },
486
+ { action: "http", object: { type: "PUT", value: "^/api/management/v1/useradm/2faverify$" } },
487
+ { action: "http", object: { type: "POST", value: "^/api/management/v1/useradm/users/me/2fa/(enable|disable)$" } },
488
+ { action: "http", object: { type: "GET", value: "^/api/management/(v[1-9])/useradm/roles" } },
489
+ { action: "http", object: { type: "GET", value: "^/api/management/(v[1-9])/tenantadm/user/tenant" } }
490
+ ]
491
+ },
492
+ {
493
+ ...import_constants.defaultPermissionSets.ManageReleases,
494
+ action: import_constants.uiPermissionsById.manage.title,
495
+ object: permissionSetObjectTypes.releases,
496
+ description: "Set of permissions which allows user to manage releases",
497
+ permissions: [
498
+ { action: "http", object: { type: "GET", value: commonEndpoints.artifacts } },
499
+ { action: "http", object: { type: "GET", value: commonEndpoints.artifactDetails } },
500
+ { action: "http", object: { type: "PUT", value: commonEndpoints.artifactDetails } },
501
+ { action: "http", object: { type: "DELETE", value: commonEndpoints.artifactDetails } },
502
+ { action: "http", object: { type: "GET", value: "^/api/management/v1/deployments/artifacts/[^/]+/download" } }
503
+ ]
504
+ },
505
+ {
506
+ ...import_constants.defaultPermissionSets.ReadUsers,
507
+ action: import_constants.uiPermissionsById.read.title,
508
+ object: permissionSetObjectTypes.userManagement,
509
+ description: "Set of permissions which allows user to view other users",
510
+ permissions: [{ action: "http", object: { type: "GET", value: "^/api/management/(v[1-9])/useradm/" } }]
511
+ },
512
+ {
513
+ ...import_constants.defaultPermissionSets.ManageUsers,
514
+ action: import_constants.uiPermissionsById.manage.title,
515
+ object: permissionSetObjectTypes.userManagement,
516
+ description: "Set of permissions which allows user manage other user accounts",
517
+ permissions: [{ action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/useradm/" } }]
518
+ },
519
+ {
520
+ ...import_constants.defaultPermissionSets.ReadTenants,
521
+ action: import_constants.uiPermissionsById.read.title,
522
+ object: permissionSetObjectTypes.tenantManagement,
523
+ description: "Set of permissions which allows user to list other tenants and their config",
524
+ permissions: [
525
+ { action: "http", object: { type: "GET", value: "^/api/management/(v[1-9])/tenantadm/" } },
526
+ { action: "http", object: { type: "POST", value: "^/api/management/(v[1-9])/tenantadm/" } }
527
+ ]
528
+ },
529
+ {
530
+ ...import_constants.defaultPermissionSets.ManageTenants,
531
+ action: import_constants.uiPermissionsById.manage.title,
532
+ object: permissionSetObjectTypes.tenantManagement,
533
+ description: "Set of permissions which allows user to manage other tenants and their config",
534
+ permissions: [
535
+ { action: "http", object: { type: "GET", value: "^/api/management/(v[1-9])/tenantadm/" } },
536
+ { action: "http", object: { type: "POST", value: "^/api/management/(v[1-9])/tenantadm/" } },
537
+ { action: "http", object: { type: "PUT", value: "^/api/management/(v[1-9])/tenantadm/" } }
538
+ ]
539
+ },
540
+ {
541
+ ...import_constants.defaultPermissionSets.ReadAuditLogs,
542
+ action: import_constants.uiPermissionsById.read.title,
543
+ object: "System Audit Log",
544
+ description: "Set of permissions which allows user to view system audit log",
545
+ permissions: [{ action: "http", object: { type: "GET", value: "^/api/management/(v[1-9]|0.1.0)/auditlogs/logs" } }]
546
+ },
547
+ {
548
+ ...import_constants.defaultPermissionSets.DeployToDevices,
549
+ action: "Deploy",
550
+ object: permissionSetObjectTypes.groups,
551
+ description: "Set of permissions which allows user to deploy to devices",
552
+ permissions: [{ action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/(deployments|deviceconfig)/" } }],
553
+ supported_scope_types: [import_constants.scopedPermissionAreas.groups.scopeType]
554
+ },
555
+ {
556
+ ...import_constants.defaultPermissionSets.ConfigureDevices,
557
+ action: "Configure",
558
+ object: permissionSetObjectTypes.groups,
559
+ description: "Set of permissions which allows user to manage configuration of the devices",
560
+ permissions: [{ action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/deviceconfig/" } }],
561
+ supported_scope_types: [import_constants.scopedPermissionAreas.groups.scopeType]
562
+ },
563
+ {
564
+ ...import_constants.defaultPermissionSets.ConnectToDevices,
565
+ action: "Connect",
566
+ object: permissionSetObjectTypes.groups,
567
+ description: "Set of permissions which allows user to use remote terminal and file transfer",
568
+ permissions: [
569
+ { action: "http", object: { type: "GET", value: "^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/connect$" } },
570
+ { action: "http", object: { type: "GET", value: "^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/download\\?path=[^&]+$" } },
571
+ { action: "http", object: { type: "PUT", value: "^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/upload$" } }
572
+ ],
573
+ supported_scope_types: [import_constants.scopedPermissionAreas.groups.scopeType]
574
+ },
575
+ {
576
+ ...import_constants.defaultPermissionSets.SuperUser,
577
+ action: "Any",
578
+ object: permissionSetObjectTypes.any,
579
+ description: "Set of permissions which allows user to do anything",
580
+ permissions: [{ action: "any", object: { type: "any", value: "any" } }]
581
+ },
582
+ {
583
+ ...import_constants.defaultPermissionSets.UploadArtifacts,
584
+ action: "Upload",
585
+ object: permissionSetObjectTypes.artifacts,
586
+ description: "Set of permissions which allows user to upload artifacts",
587
+ permissions: [
588
+ { action: "http", object: { type: "POST", value: commonEndpoints.artifacts } },
589
+ { action: "http", object: { type: "POST", value: "^/api/management/v1/deployments/artifacts/generate" } }
590
+ ]
591
+ },
592
+ {
593
+ ...import_constants.defaultPermissionSets.ReadDevices,
594
+ action: import_constants.uiPermissionsById.read.title,
595
+ object: permissionSetObjectTypes.groups,
596
+ description: "Set of permissions which allows user to view devices",
597
+ permissions: [
598
+ { action: "http", object: { type: "POST", value: "^/api/management/v2/inventory/filters/search" } },
599
+ { action: "http", object: { type: "GET", value: "^/api/management/(v[1-9])/(deployments|devauth|inventory|deviceconfig|devicemonitor)/" } },
600
+ { action: "http", object: { type: "GET", value: "^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+$" } }
601
+ ],
602
+ supported_scope_types: [import_constants.scopedPermissionAreas.groups.scopeType]
603
+ },
604
+ {
605
+ ...import_constants.defaultPermissionSets.ManageDevices,
606
+ action: import_constants.uiPermissionsById.manage.title,
607
+ object: permissionSetObjectTypes.groups,
608
+ description: "Set of permissions which allows user to manage devices",
609
+ permissions: [
610
+ { action: "http", object: { type: "POST", value: commonEndpoints.deviceManagement } },
611
+ { action: "http", object: { type: "PUT", value: commonEndpoints.deviceManagement } },
612
+ { action: "http", object: { type: "DELETE", value: commonEndpoints.deviceManagement } }
613
+ ],
614
+ supported_scope_types: [import_constants.scopedPermissionAreas.groups.scopeType]
615
+ },
616
+ {
617
+ ...import_constants.defaultPermissionSets.ReadReleases,
618
+ action: import_constants.uiPermissionsById.read.title,
619
+ object: permissionSetObjectTypes.releases,
620
+ description: "Set of permissions which allows user to view releases",
621
+ permissions: [
622
+ { action: "http", object: { type: "GET", value: commonEndpoints.artifacts } },
623
+ { action: "http", object: { type: "GET", value: commonEndpoints.artifactDetails } },
624
+ { action: "http", object: { type: "GET", value: "^/api/management/v1/deployments/artifacts/[^/]+/download" } }
625
+ ]
626
+ },
627
+ {
628
+ name: "almostAdmin",
629
+ object: permissionSetObjectTypes.empty,
630
+ description: "Set containing all the permissions.",
631
+ permissions: [
632
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/auditlogs/.*" } },
633
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/deployments/.*" } },
634
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/deployments/config/.*" } },
635
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/deployments/deployments/.*" } },
636
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/deployments/deployments/releases/.*" } },
637
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/devauth/.*" } },
638
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/deviceconfig/.*" } },
639
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/deviceconnect/.*" } },
640
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/deviceconnect/devices" } },
641
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/inventory/.*" } },
642
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/iot-manager/.*" } },
643
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/monitor/.*" } },
644
+ { action: "http", object: { type: "any", value: "^/api/management/(v[1-9])/useradm/.*" } }
645
+ ]
646
+ }
647
+ ];
648
+ var rbacRoles = [
649
+ {
650
+ name: "dyn",
651
+ description: "",
652
+ permissions: [
653
+ { action: "CREATE_DEPLOYMENT", object: { type: "DEVICE_GROUP", value: "dyn" } },
654
+ { action: "VIEW_DEVICE", object: { type: "DEVICE_GROUP", value: "dyn" } }
655
+ ]
656
+ },
657
+ { name: "asdasd", description: "123", permissions: [{ action: "http", object: { type: "any", value: "/api/management/v1/useradm/.*" } }] },
658
+ {
659
+ name: "141sasd",
660
+ description: "1313adg",
661
+ permission_sets_with_scope: [
662
+ { ...import_constants.defaultPermissionSets.ReadDevices, scope: { type: import_constants.scopedPermissionAreas.groups.scopeType, value: ["bestgroup"] } },
663
+ { ...import_constants.defaultPermissionSets.ConnectToDevices, scope: { type: import_constants.scopedPermissionAreas.groups.scopeType, value: ["bestgroup"] } },
664
+ { ...import_constants.defaultPermissionSets.ManageUsers }
665
+ ]
666
+ },
667
+ {
668
+ name: "kljlkk",
669
+ description: "lkl",
670
+ permission_sets_with_scope: [{ ...import_constants.defaultPermissionSets.ConnectToDevices, scope: { type: import_constants.scopedPermissionAreas.groups.scopeType, value: ["bestgroup"] } }]
671
+ },
672
+ {
673
+ name: "yyyyy",
674
+ description: "asd",
675
+ permission_sets_with_scope: [
676
+ { ...import_constants.defaultPermissionSets.ManageDevices, scope: { type: import_constants.scopedPermissionAreas.groups.scopeType, value: ["dockerclient"] } },
677
+ { ...import_constants.defaultPermissionSets.ManageReleases }
678
+ ]
679
+ },
680
+ {
681
+ name: "RBAC_ROLE_DEPLOYMENTS_MANAGER",
682
+ description: "Intended for users responsible for managing deployments, this role can create and abort deployments",
683
+ permission_sets_with_scope: [{ ...import_constants.defaultPermissionSets.DeployToDevices }]
684
+ },
685
+ {
686
+ name: "RBAC_ROLE_REMOTE_TERMINAL",
687
+ description: `Intended for tech support accounts, this role can access the devices' Remote Terminal.`,
688
+ permission_sets_with_scope: [{ ...import_constants.defaultPermissionSets.ConnectToDevices }]
689
+ },
690
+ { name: "RBAC_ROLE_PERMIT_ALL", description: "", permission_sets_with_scope: [{ ...import_constants.defaultPermissionSets.SuperUser }] },
691
+ {
692
+ name: "RBAC_ROLE_OBSERVER",
693
+ description: "Intended for team leaders or limited tech support accounts, this role can see all Devices, Artifacts and Deployment reports but not make any changes.",
694
+ permission_sets_with_scope: [{ ...import_constants.defaultPermissionSets.ReadReleases }, { ...import_constants.defaultPermissionSets.ReadDevices }]
695
+ },
696
+ {
697
+ name: "RBAC_ROLE_CI",
698
+ description: "Intended for automation accounts building software (e.g. CI/CD systems), this role can only manage Artifacts, including upload new Artifacts and delete Artifacts. It does not have access to Devices or Deployments.",
699
+ permission_sets_with_scope: [
700
+ { ...import_constants.defaultPermissionSets.ReadReleases },
701
+ { ...import_constants.defaultPermissionSets.ManageReleases },
702
+ { ...import_constants.defaultPermissionSets.UploadArtifacts }
703
+ ]
704
+ },
705
+ {
706
+ name: "almostAdmin",
707
+ description: "almost admin rights",
708
+ permissions: permissionSets.find((item) => item.name === "almostAdmin")?.permissions
709
+ },
710
+ {
711
+ name: "almostAdminNew",
712
+ description: "almost admin rights",
713
+ permission_sets_with_scope: Object.values(import_constants.defaultPermissionSets)
714
+ }
715
+ ];
716
+ var expectedParsedRoles = {
717
+ "141sasd": {
718
+ editable: true,
719
+ isCustom: void 0,
720
+ uiPermissions: {
721
+ ...import_constants.emptyUiPermissions,
722
+ groups: { bestgroup: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.connect.value] },
723
+ userManagement: [import_constants.uiPermissionsById.manage.value]
724
+ }
725
+ },
726
+ asdasd: {
727
+ editable: false,
728
+ isCustom: true,
729
+ uiPermissions: { ...import_constants.emptyUiPermissions, userManagement: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.manage.value] }
730
+ },
731
+ dyn: {
732
+ editable: false,
733
+ isCustom: true,
734
+ uiPermissions: {
735
+ ...import_constants.emptyUiPermissions,
736
+ deployments: [import_constants.uiPermissionsById.deploy.value],
737
+ groups: { dyn: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.deploy.value] }
738
+ }
739
+ },
740
+ kljlkk: {
741
+ editable: true,
742
+ isCustom: false,
743
+ uiPermissions: { ...import_constants.emptyUiPermissions, groups: { bestgroup: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.connect.value] } }
744
+ },
745
+ yyyyy: {
746
+ editable: true,
747
+ isCustom: void 0,
748
+ uiPermissions: {
749
+ ...import_constants.emptyUiPermissions,
750
+ groups: { dockerclient: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.manage.value] },
751
+ releases: { [import_constants.ALL_RELEASES]: [import_constants.uiPermissionsById.manage.value] }
752
+ }
753
+ },
754
+ almostAdmin: {
755
+ editable: false,
756
+ isCustom: true,
757
+ uiPermissions: {
758
+ ...import_constants.emptyUiPermissions,
759
+ auditlog: [import_constants.uiPermissionsById.read.value],
760
+ deployments: [import_constants.uiPermissionsById.manage.value, import_constants.uiPermissionsById.deploy.value, import_constants.uiPermissionsById.read.value],
761
+ groups: {
762
+ [import_constants.ALL_DEVICES]: [
763
+ import_constants.uiPermissionsById.read.value,
764
+ // we can't assign deployment permissions to devices here, since the old path based rbac controls don't allow the scoped permissions
765
+ // uiPermissionsById.deploy.value,
766
+ import_constants.uiPermissionsById.manage.value,
767
+ import_constants.uiPermissionsById.connect.value,
768
+ import_constants.uiPermissionsById.configure.value
769
+ ]
770
+ },
771
+ releases: {
772
+ [import_constants.ALL_RELEASES]: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.upload.value, import_constants.uiPermissionsById.manage.value]
773
+ },
774
+ userManagement: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.manage.value]
775
+ }
776
+ },
777
+ almostAdminNew: {
778
+ editable: true,
779
+ isCustom: void 0,
780
+ uiPermissions: {
781
+ ...import_constants.emptyUiPermissions,
782
+ auditlog: [import_constants.uiPermissionsById.read.value],
783
+ deployments: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.deploy.value, import_constants.uiPermissionsById.manage.value],
784
+ groups: {
785
+ [import_constants.ALL_DEVICES]: [
786
+ import_constants.uiPermissionsById.read.value,
787
+ import_constants.uiPermissionsById.manage.value,
788
+ import_constants.uiPermissionsById.deploy.value,
789
+ import_constants.uiPermissionsById.connect.value,
790
+ import_constants.uiPermissionsById.configure.value
791
+ ]
792
+ },
793
+ releases: {
794
+ [import_constants.ALL_RELEASES]: [import_constants.uiPermissionsById.manage.value, import_constants.uiPermissionsById.upload.value, import_constants.uiPermissionsById.read.value]
795
+ },
796
+ tenantManagement: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.manage.value],
797
+ userManagement: [import_constants.uiPermissionsById.read.value, import_constants.uiPermissionsById.manage.value]
798
+ }
799
+ }
800
+ };
801
+ var defaultRolesById = {
802
+ ...import_constants.rolesById,
803
+ test: {
804
+ ...import_constants.emptyRole,
805
+ name: "test",
806
+ description: "test description",
807
+ editable: true,
808
+ uiPermissions: {
809
+ ...import_constants.emptyUiPermissions,
810
+ groups: { testGroup: [import_constants.uiPermissionsById.read.value] },
811
+ releases: { bar: [import_constants.uiPermissionsById.read.value] }
812
+ }
813
+ }
814
+ };
815
+ var receivedRoles = rbacRoles.reduce(
816
+ (accu, role) => {
817
+ const { name, description, ...roleRemainder } = role;
818
+ if (name.startsWith("RBAC")) {
819
+ accu[name] = {
820
+ ...defaultRolesById[name],
821
+ ...roleRemainder,
822
+ editable: false,
823
+ isCustom: false,
824
+ description: defaultRolesById[name].description ? defaultRolesById[name].description : description
825
+ };
826
+ } else {
827
+ const result = expectedParsedRoles[name] ?? {};
828
+ accu[name] = {
829
+ ...import_constants.emptyRole,
830
+ ...role,
831
+ ...result,
832
+ name
833
+ };
834
+ }
835
+ return accu;
836
+ },
837
+ { ...defaultRolesById }
838
+ );
839
+ var receivedPermissionSets = permissionSets.reduce((accu, set) => {
840
+ const result = import_constants.defaultPermissionSets[set.name]?.result ?? {};
841
+ accu[set.name] = {
842
+ ...set,
843
+ result: {
844
+ ...import_constants.emptyUiPermissions,
845
+ ...result
846
+ }
847
+ };
848
+ return accu;
849
+ }, {});
850
+
851
+ // src/utils.tsx
852
+ var import_react_redux = require("react-redux");
853
+ var import_react_router_dom = require("react-router-dom");
854
+ var import_styles = require("@mui/material/styles");
855
+ var import_react = require("@testing-library/react");
856
+ var import_react2 = require("@testing-library/react");
857
+ var import_vitest = require("vitest");
858
+
859
+ // src/theme/light.ts
860
+ var palette = {
861
+ border: {
862
+ main: "#e3e3e3"
863
+ },
864
+ tooltip: {
865
+ tierTipBackground: "#f7fafb"
866
+ }
867
+ };
868
+ var light = {
869
+ palette
870
+ };
871
+
872
+ // src/utils.tsx
873
+ var import_jsx_runtime = require("react/jsx-runtime");
874
+ var theme = (0, import_styles.createTheme)(light);
875
+
876
+ // src/setupTests.tsx
877
+ __reExport(setupTests_exports, require("@testing-library/react"), module.exports);
878
+ var import_jsx_runtime2 = require("react/jsx-runtime");
879
+ import_vitest2.expect.addSnapshotSerializer((0, import_jest.createSerializer)({ includeStyles: true }));
880
+ var TEST_LOCATION = "localhost";
881
+ var mockAbortController = {
882
+ abort: import_vitest2.vi.fn(),
883
+ signal: { addEventListener: () => {
884
+ }, removeEventListener: () => {
885
+ } }
886
+ };
887
+ var oldWindowLocalStorage = window.localStorage;
888
+ var oldWindowLocation = window.location;
889
+ var oldWindowSessionStorage = window.sessionStorage;
890
+ import_vitest2.vi.mock("uuid", () => ({ v4: () => "mock-uuid" }));
891
+ var storage = {};
892
+ global.HTMLCanvasElement.prototype.getContext = import_vitest2.vi.fn();
893
+ var beforeAll = async () => {
894
+ delete window.location;
895
+ window.location = {
896
+ ...oldWindowLocation,
897
+ hostname: TEST_LOCATION,
898
+ origin: "http://localhost",
899
+ assign: import_vitest2.vi.fn(),
900
+ replace: import_vitest2.vi.fn(),
901
+ reload: import_vitest2.vi.fn()
902
+ };
903
+ delete window.sessionStorage;
904
+ window.sessionStorage = {
905
+ ...oldWindowSessionStorage,
906
+ getItem: import_vitest2.vi.fn(import_helpers.yes),
907
+ setItem: import_vitest2.vi.fn(),
908
+ removeItem: import_vitest2.vi.fn()
909
+ };
910
+ delete window.localStorage;
911
+ window.localStorage = {
912
+ ...oldWindowLocalStorage,
913
+ getItem: import_vitest2.vi.fn((name) => {
914
+ if (name === "JWT") {
915
+ return JSON.stringify({ token });
916
+ }
917
+ return storage[name];
918
+ }),
919
+ setItem: import_vitest2.vi.fn((name) => storage[name]),
920
+ removeItem: import_vitest2.vi.fn()
921
+ };
922
+ window.mender_environment = menderEnvironment;
923
+ window.ENV = "test";
924
+ global.AbortController = import_vitest2.vi.fn().mockImplementation(function() {
925
+ return mockAbortController;
926
+ });
927
+ global.MessageChannel = import_worker_threads.MessageChannel;
928
+ global.ResizeObserver = import_vitest2.vi.fn().mockImplementation(function() {
929
+ return {
930
+ observe: import_vitest2.vi.fn(),
931
+ unobserve: import_vitest2.vi.fn(),
932
+ disconnect: import_vitest2.vi.fn()
933
+ };
934
+ });
935
+ window.RTCPeerConnection = () => ({
936
+ createOffer: () => {
937
+ },
938
+ setLocalDescription: () => {
939
+ },
940
+ createDataChannel: () => {
941
+ }
942
+ });
943
+ Object.defineProperty(navigator, "appVersion", { value: "Test", writable: true });
944
+ const intersectionObserverMock = function() {
945
+ return {
946
+ observe: import_vitest2.vi.fn(),
947
+ disconnect: import_vitest2.vi.fn()
948
+ };
949
+ };
950
+ window.prompt = import_vitest2.vi.fn();
951
+ window.IntersectionObserver = import_vitest2.vi.fn().mockImplementation(intersectionObserverMock);
952
+ import_vitest2.vi.spyOn(import_react3.default, "useEffect").mockImplementation(import_react3.default.useLayoutEffect);
953
+ const _jest = globalThis.jest;
954
+ globalThis.jest = {
955
+ ...globalThis.jest
956
+ };
957
+ import_vitest2.vi.stubGlobal("jest", {
958
+ advanceTimersByTime: import_vitest2.vi.advanceTimersByTime.bind(import_vitest2.vi)
959
+ });
960
+ return () => void (globalThis.jest = _jest);
961
+ };
962
+ var beforeEach = () => {
963
+ import_vitest2.vi.useFakeTimers({ now: mockDate });
964
+ import_vitest2.vi.setSystemTime(mockDate);
965
+ };
966
+ var afterEach = async () => {
967
+ (0, import_react4.cleanup)();
968
+ import_vitest2.vi.runOnlyPendingTimers();
969
+ import_vitest2.vi.useRealTimers();
970
+ };
971
+ var afterAll = async () => {
972
+ window.localStorage = oldWindowLocalStorage;
973
+ window.location = oldWindowLocation;
974
+ window.sessionStorage = oldWindowSessionStorage;
975
+ import_react3.default.useEffect.mockRestore();
976
+ import_vitest2.vi.unstubAllGlobals();
977
+ };
978
+ var customRender = (ui, options = {}) => {
979
+ const { preloadedState = { users: { currentSession: { token, expiresAt: void 0 } } }, ...remainder } = options;
980
+ const store = options.store ?? (0, import_toolkit.configureStore)({ preloadedState });
981
+ const AllTheProviders = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_styles2.ThemeProvider, { theme, children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_router_dom2.MemoryRouter, { children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react_redux2.Provider, { store, children }) }) });
982
+ return { store, ...(0, import_react4.render)(ui, { wrapper: AllTheProviders, ...remainder }) };
983
+ };
984
+ // Annotate the CommonJS export names for ESM import in node:
985
+ 0 && (module.exports = {
986
+ TEST_LOCATION,
987
+ afterAll,
988
+ afterEach,
989
+ beforeAll,
990
+ beforeEach,
991
+ mockAbortController,
992
+ render,
993
+ ...require("@testing-library/react")
994
+ });
995
+ //# sourceMappingURL=setupTests.cjs.map