@northern.tech/testing 0.5.1 → 0.7.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.
Files changed (57) hide show
  1. package/dist/{chunk-CQTA2RKB.js → chunk-4UV4MWUU.js} +2 -2
  2. package/dist/{chunk-JTUHEXXT.js → chunk-5GIOT4M6.js} +2 -2
  3. package/dist/{chunk-24ZPE7FS.js → chunk-AUOSTYBM.js} +2 -2
  4. package/dist/{chunk-PZMMQUL4.js → chunk-CT35JRBC.js} +61 -1
  5. package/dist/chunk-CT35JRBC.js.map +1 -0
  6. package/dist/chunk-RG3ICJW5.js +34 -0
  7. package/dist/chunk-RG3ICJW5.js.map +1 -0
  8. package/dist/{chunk-WFVQV6M5.js → chunk-ROSMRKMF.js} +3 -2
  9. package/dist/chunk-ROSMRKMF.js.map +1 -0
  10. package/dist/{chunk-3CBI7S4M.js → chunk-TVJ6K2KG.js} +2 -2
  11. package/dist/{chunk-D3ZH3LQV.js → chunk-WFNPT672.js} +2 -2
  12. package/dist/mockData.cjs +60 -0
  13. package/dist/mockData.cjs.map +1 -1
  14. package/dist/mockData.d.cts +30 -0
  15. package/dist/mockData.d.ts +30 -0
  16. package/dist/mockData.js +1 -1
  17. package/dist/requestHandlers/deploymentHandlers.cjs +60 -0
  18. package/dist/requestHandlers/deploymentHandlers.cjs.map +1 -1
  19. package/dist/requestHandlers/deploymentHandlers.js +2 -2
  20. package/dist/requestHandlers/deviceHandlers.cjs +60 -0
  21. package/dist/requestHandlers/deviceHandlers.cjs.map +1 -1
  22. package/dist/requestHandlers/deviceHandlers.js +2 -2
  23. package/dist/requestHandlers/monitorHandlers.cjs +60 -0
  24. package/dist/requestHandlers/monitorHandlers.cjs.map +1 -1
  25. package/dist/requestHandlers/monitorHandlers.js +2 -2
  26. package/dist/requestHandlers/organizationHandlers.cjs +61 -0
  27. package/dist/requestHandlers/organizationHandlers.cjs.map +1 -1
  28. package/dist/requestHandlers/organizationHandlers.js +2 -2
  29. package/dist/requestHandlers/releaseHandlers.cjs +60 -0
  30. package/dist/requestHandlers/releaseHandlers.cjs.map +1 -1
  31. package/dist/requestHandlers/releaseHandlers.js +2 -2
  32. package/dist/requestHandlers/requestHandlers.cjs +61 -0
  33. package/dist/requestHandlers/requestHandlers.cjs.map +1 -1
  34. package/dist/requestHandlers/requestHandlers.js +7 -7
  35. package/dist/requestHandlers/userHandlers.cjs +60 -0
  36. package/dist/requestHandlers/userHandlers.cjs.map +1 -1
  37. package/dist/requestHandlers/userHandlers.js +2 -2
  38. package/dist/setupTests.cjs +118 -44
  39. package/dist/setupTests.cjs.map +1 -1
  40. package/dist/setupTests.d.cts +1 -0
  41. package/dist/setupTests.d.ts +1 -0
  42. package/dist/setupTests.js +11 -8
  43. package/dist/setupTests.js.map +1 -1
  44. package/dist/utils.cjs +37 -7
  45. package/dist/utils.cjs.map +1 -1
  46. package/dist/utils.d.cts +67 -1
  47. package/dist/utils.d.ts +67 -1
  48. package/dist/utils.js +9 -13
  49. package/dist/utils.js.map +1 -1
  50. package/package.json +1 -1
  51. package/dist/chunk-PZMMQUL4.js.map +0 -1
  52. package/dist/chunk-WFVQV6M5.js.map +0 -1
  53. /package/dist/{chunk-CQTA2RKB.js.map → chunk-4UV4MWUU.js.map} +0 -0
  54. /package/dist/{chunk-JTUHEXXT.js.map → chunk-5GIOT4M6.js.map} +0 -0
  55. /package/dist/{chunk-24ZPE7FS.js.map → chunk-AUOSTYBM.js.map} +0 -0
  56. /package/dist/{chunk-3CBI7S4M.js.map → chunk-TVJ6K2KG.js.map} +0 -0
  57. /package/dist/{chunk-D3ZH3LQV.js.map → chunk-WFNPT672.js.map} +0 -0
@@ -40,15 +40,15 @@ __export(setupTests_exports, {
40
40
  render: () => customRender
41
41
  });
42
42
  module.exports = __toCommonJS(setupTests_exports);
43
- var import_react = __toESM(require("react"), 1);
44
- var import_react_redux = require("react-redux");
45
- var import_react_router_dom = require("react-router-dom");
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
46
  var import_jest = require("@emotion/jest");
47
- var import_styles = require("@mui/material/styles");
47
+ var import_styles2 = require("@mui/material/styles");
48
48
  var import_helpers = require("@northern.tech/utils/helpers");
49
49
  var import_toolkit = require("@reduxjs/toolkit");
50
- var import_react2 = require("@testing-library/react");
51
- var import_vitest = require("vitest");
50
+ var import_react4 = require("@testing-library/react");
51
+ var import_vitest2 = require("vitest");
52
52
  var import_worker_threads = require("worker_threads");
53
53
 
54
54
  // src/mockData.ts
@@ -276,6 +276,66 @@ var mockApiResponses = {
276
276
  plan: "os",
277
277
  trial: false
278
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
+ ],
279
339
  intentId: "testIntent",
280
340
  auditlog: {
281
341
  events: [
@@ -789,6 +849,14 @@ var receivedPermissionSets = permissionSets.reduce((accu, set) => {
789
849
  return accu;
790
850
  }, {});
791
851
 
852
+ // src/utils.tsx
853
+ var import_react_redux = require("react-redux");
854
+ var import_react_router_dom = require("react-router-dom");
855
+ var import_styles = require("@mui/material/styles");
856
+ var import_react = require("@testing-library/react");
857
+ var import_react2 = require("@testing-library/react");
858
+ var import_vitest = require("vitest");
859
+
792
860
  // src/theme/light.ts
793
861
  var palette = {
794
862
  border: {
@@ -802,60 +870,67 @@ var light = {
802
870
  palette
803
871
  };
804
872
 
873
+ // src/utils.tsx
874
+ var import_jsx_runtime = require("react/jsx-runtime");
875
+ var theme = (0, import_styles.createTheme)(light);
876
+
805
877
  // src/setupTests.tsx
806
878
  __reExport(setupTests_exports, require("@testing-library/react"), module.exports);
807
- var import_jsx_runtime = require("react/jsx-runtime");
808
- import_vitest.expect.addSnapshotSerializer((0, import_jest.createSerializer)({ includeStyles: true }));
879
+ var import_jsx_runtime2 = require("react/jsx-runtime");
880
+ import_vitest2.expect.addSnapshotSerializer((0, import_jest.createSerializer)({ includeStyles: true }));
809
881
  var TEST_LOCATION = "localhost";
810
- var mockAbortController = { signal: { addEventListener: () => {
811
- }, removeEventListener: () => {
812
- } } };
882
+ var mockAbortController = {
883
+ abort: import_vitest2.vi.fn(),
884
+ signal: { addEventListener: () => {
885
+ }, removeEventListener: () => {
886
+ } }
887
+ };
813
888
  var oldWindowLocalStorage = window.localStorage;
814
889
  var oldWindowLocation = window.location;
815
890
  var oldWindowSessionStorage = window.sessionStorage;
816
- import_vitest.vi.mock("uuid", () => ({ v4: () => "mock-uuid" }));
891
+ import_vitest2.vi.mock("uuid", () => ({ v4: () => "mock-uuid" }));
817
892
  var storage = {};
818
- global.HTMLCanvasElement.prototype.getContext = import_vitest.vi.fn();
893
+ global.HTMLCanvasElement.prototype.getContext = import_vitest2.vi.fn();
819
894
  var beforeAll = async () => {
820
895
  delete window.location;
821
896
  window.location = {
822
897
  ...oldWindowLocation,
823
898
  hostname: TEST_LOCATION,
824
899
  origin: "http://localhost",
825
- assign: import_vitest.vi.fn(),
826
- replace: import_vitest.vi.fn(),
827
- reload: import_vitest.vi.fn()
900
+ assign: import_vitest2.vi.fn(),
901
+ replace: import_vitest2.vi.fn(),
902
+ reload: import_vitest2.vi.fn()
828
903
  };
829
904
  delete window.sessionStorage;
830
905
  window.sessionStorage = {
831
906
  ...oldWindowSessionStorage,
832
- getItem: import_vitest.vi.fn(import_helpers.yes),
833
- setItem: import_vitest.vi.fn(),
834
- removeItem: import_vitest.vi.fn()
907
+ getItem: import_vitest2.vi.fn(import_helpers.yes),
908
+ setItem: import_vitest2.vi.fn(),
909
+ removeItem: import_vitest2.vi.fn()
835
910
  };
836
911
  delete window.localStorage;
837
912
  window.localStorage = {
838
913
  ...oldWindowLocalStorage,
839
- getItem: import_vitest.vi.fn((name) => {
914
+ getItem: import_vitest2.vi.fn((name) => {
840
915
  if (name === "JWT") {
841
916
  return JSON.stringify({ token });
842
917
  }
843
918
  return storage[name];
844
919
  }),
845
- setItem: import_vitest.vi.fn((name) => storage[name]),
846
- removeItem: import_vitest.vi.fn()
920
+ setItem: import_vitest2.vi.fn((name) => storage[name]),
921
+ removeItem: import_vitest2.vi.fn()
847
922
  };
848
923
  window.mender_environment = menderEnvironment;
849
924
  window.ENV = "test";
850
- global.AbortController = import_vitest.vi.fn().mockImplementation(function() {
925
+ global.AbortController = import_vitest2.vi.fn().mockImplementation(function() {
851
926
  return mockAbortController;
852
927
  });
853
928
  global.MessageChannel = import_worker_threads.MessageChannel;
854
- global.ResizeObserver = import_vitest.vi.fn().mockImplementation(function() {
929
+ global.ResizeObserver = import_vitest2.vi.fn().mockImplementation(function() {
855
930
  return {
856
- observe: import_vitest.vi.fn(),
857
- unobserve: import_vitest.vi.fn(),
858
- disconnect: import_vitest.vi.fn()
931
+ observe: import_vitest2.vi.fn(),
932
+ unobserve: import_vitest2.vi.fn(),
933
+ disconnect: import_vitest2.vi.fn()
859
934
  };
860
935
  });
861
936
  window.RTCPeerConnection = () => ({
@@ -869,44 +944,43 @@ var beforeAll = async () => {
869
944
  Object.defineProperty(navigator, "appVersion", { value: "Test", writable: true });
870
945
  const intersectionObserverMock = function() {
871
946
  return {
872
- observe: import_vitest.vi.fn(),
873
- disconnect: import_vitest.vi.fn()
947
+ observe: import_vitest2.vi.fn(),
948
+ disconnect: import_vitest2.vi.fn()
874
949
  };
875
950
  };
876
- window.prompt = import_vitest.vi.fn();
877
- window.IntersectionObserver = import_vitest.vi.fn().mockImplementation(intersectionObserverMock);
878
- import_vitest.vi.spyOn(import_react.default, "useEffect").mockImplementation(import_react.default.useLayoutEffect);
951
+ window.prompt = import_vitest2.vi.fn();
952
+ window.IntersectionObserver = import_vitest2.vi.fn().mockImplementation(intersectionObserverMock);
953
+ import_vitest2.vi.spyOn(import_react3.default, "useEffect").mockImplementation(import_react3.default.useLayoutEffect);
879
954
  const _jest = globalThis.jest;
880
955
  globalThis.jest = {
881
956
  ...globalThis.jest
882
957
  };
883
- import_vitest.vi.stubGlobal("jest", {
884
- advanceTimersByTime: import_vitest.vi.advanceTimersByTime.bind(import_vitest.vi)
958
+ import_vitest2.vi.stubGlobal("jest", {
959
+ advanceTimersByTime: import_vitest2.vi.advanceTimersByTime.bind(import_vitest2.vi)
885
960
  });
886
961
  return () => void (globalThis.jest = _jest);
887
962
  };
888
963
  var beforeEach = () => {
889
- import_vitest.vi.useFakeTimers({ now: mockDate });
890
- import_vitest.vi.setSystemTime(mockDate);
964
+ import_vitest2.vi.useFakeTimers({ now: mockDate });
965
+ import_vitest2.vi.setSystemTime(mockDate);
891
966
  };
892
967
  var afterEach = async () => {
893
- (0, import_react2.cleanup)();
894
- import_vitest.vi.runOnlyPendingTimers();
895
- import_vitest.vi.useRealTimers();
968
+ (0, import_react4.cleanup)();
969
+ import_vitest2.vi.runOnlyPendingTimers();
970
+ import_vitest2.vi.useRealTimers();
896
971
  };
897
972
  var afterAll = async () => {
898
973
  window.localStorage = oldWindowLocalStorage;
899
974
  window.location = oldWindowLocation;
900
975
  window.sessionStorage = oldWindowSessionStorage;
901
- import_react.default.useEffect.mockRestore();
902
- import_vitest.vi.unstubAllGlobals();
976
+ import_react3.default.useEffect.mockRestore();
977
+ import_vitest2.vi.unstubAllGlobals();
903
978
  };
904
- var theme = (0, import_styles.createTheme)(light);
905
979
  var customRender = (ui, options = {}) => {
906
980
  const { preloadedState = { users: { currentSession: { token, expiresAt: void 0 } } }, ...remainder } = options;
907
981
  const store = options.store ?? (0, import_toolkit.configureStore)({ preloadedState });
908
- const AllTheProviders = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.ThemeProvider, { theme, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.MemoryRouter, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_redux.Provider, { store, children }) }) });
909
- return { store, ...(0, import_react2.render)(ui, { wrapper: AllTheProviders, ...remainder }) };
982
+ 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 }) }) });
983
+ return { store, ...(0, import_react4.render)(ui, { wrapper: AllTheProviders, ...remainder }) };
910
984
  };
911
985
  // Annotate the CommonJS export names for ESM import in node:
912
986
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/setupTests.tsx","../src/mockData.ts","../src/theme/light.ts"],"sourcesContent":["// Copyright 2025 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//@ts-nocheck\nimport React from 'react';\nimport { Provider } from 'react-redux';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { createSerializer } from '@emotion/jest';\nimport { ThemeProvider, createTheme } from '@mui/material/styles';\n\nimport { yes } from '@northern.tech/utils/helpers';\nimport { configureStore } from '@reduxjs/toolkit';\nimport { cleanup, render } from '@testing-library/react';\nimport { expect, vi } from 'vitest';\nimport { MessageChannel } from 'worker_threads';\n\nimport { menderEnvironment, mockDate, token as mockToken } from './mockData';\nimport { light } from './theme/light';\n\nexpect.addSnapshotSerializer(createSerializer({ includeStyles: true }));\n\nexport const TEST_LOCATION = 'localhost';\n\nexport const mockAbortController = { signal: { addEventListener: () => {}, removeEventListener: () => {} } };\n\nconst oldWindowLocalStorage = window.localStorage;\nconst oldWindowLocation = window.location;\nconst oldWindowSessionStorage = window.sessionStorage;\n\nvi.mock('uuid', () => ({ v4: () => 'mock-uuid' }));\n\nconst storage = {};\nglobal.HTMLCanvasElement.prototype.getContext = vi.fn();\n\nexport const beforeAll = async () => {\n // Temporarily workaround for bug in @testing-library/react when use user-event with `vi.useFakeTimers()`\n\n // Enable the mocking in tests.\n delete window.location;\n window.location = {\n ...oldWindowLocation,\n hostname: TEST_LOCATION,\n origin: 'http://localhost',\n assign: vi.fn(),\n replace: vi.fn(),\n reload: vi.fn()\n };\n delete window.sessionStorage;\n window.sessionStorage = {\n ...oldWindowSessionStorage,\n getItem: vi.fn(yes),\n setItem: vi.fn(),\n removeItem: vi.fn()\n };\n delete window.localStorage;\n window.localStorage = {\n ...oldWindowLocalStorage,\n getItem: vi.fn(name => {\n if (name === 'JWT') {\n return JSON.stringify({ token: mockToken });\n }\n return storage[name];\n }),\n setItem: vi.fn(name => storage[name]),\n removeItem: vi.fn()\n };\n window.mender_environment = menderEnvironment;\n window.ENV = 'test';\n global.AbortController = vi.fn().mockImplementation(function () {\n return mockAbortController;\n });\n global.MessageChannel = MessageChannel;\n global.ResizeObserver = vi.fn().mockImplementation(function () {\n return {\n observe: vi.fn(),\n unobserve: vi.fn(),\n disconnect: vi.fn()\n };\n });\n window.RTCPeerConnection = () => ({\n createOffer: () => {},\n setLocalDescription: () => {},\n createDataChannel: () => {}\n });\n\n Object.defineProperty(navigator, 'appVersion', { value: 'Test', writable: true });\n const intersectionObserverMock = function () {\n return {\n observe: vi.fn(),\n disconnect: vi.fn()\n };\n };\n window.prompt = vi.fn();\n window.IntersectionObserver = vi.fn().mockImplementation(intersectionObserverMock);\n vi.spyOn(React, 'useEffect').mockImplementation(React.useLayoutEffect);\n\n //TODO: remove, once https://github.com/testing-library/react-testing-library/issues/1197 resolved\n const _jest = globalThis.jest;\n\n globalThis.jest = {\n ...globalThis.jest\n };\n\n vi.stubGlobal('jest', {\n advanceTimersByTime: vi.advanceTimersByTime.bind(vi)\n });\n return () => void (globalThis.jest = _jest);\n};\n\nexport const beforeEach = () => {\n vi.useFakeTimers({ now: mockDate });\n vi.setSystemTime(mockDate);\n};\n\nexport const afterEach = async () => {\n cleanup();\n vi.runOnlyPendingTimers();\n vi.useRealTimers();\n};\n\nexport const afterAll = async () => {\n // restore `window.location` etc. to the original `jsdom` `Location` object\n window.localStorage = oldWindowLocalStorage;\n window.location = oldWindowLocation;\n window.sessionStorage = oldWindowSessionStorage;\n React.useEffect.mockRestore();\n vi.unstubAllGlobals();\n};\n\nconst theme = createTheme(light);\n\nconst customRender = (ui, options = {}) => {\n const { preloadedState = { users: { currentSession: { token: mockToken, expiresAt: undefined } } }, ...remainder } = options;\n const store = options.store ?? configureStore({ preloadedState });\n const AllTheProviders = ({ children }) => (\n <ThemeProvider theme={theme}>\n <MemoryRouter>\n <Provider store={store}>{children}</Provider>\n </MemoryRouter>\n </ThemeProvider>\n );\n return { store, ...render(ui, { wrapper: AllTheProviders, ...remainder }) };\n};\n\nexport * from '@testing-library/react';\n// override render method\n\nexport { customRender as render };\n","// Copyright 2020 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport {\n ALL_DEVICES,\n ALL_RELEASES,\n defaultPermissionSets,\n emptyRole,\n emptyUiPermissions,\n maxSessionAge,\n rolesById,\n scopedPermissionAreas,\n uiPermissionsById\n} from '@northern.tech/utils/constants';\n\nexport const undefineds = /undefined|\\[object Object\\]/;\nexport const menderEnvironment = {\n features: {\n hasMultitenancy: true\n },\n integrationVersion: 'saas-123.34',\n menderVersion: 'next',\n metaMenderVersion: 'saas-123.34',\n services: {\n deploymentsVersion: '1.2.3',\n deviceauthVersion: null,\n inventoryVersion: null\n }\n};\nexport const TEST_SESSION_DATETIME = '2019-01-13T13:00:00.000Z';\nconst testDate = new Date(TEST_SESSION_DATETIME);\nexport const mockDate = new Date(testDate.setMilliseconds(testDate.getMilliseconds() + maxSessionAge));\n\nexport const defaultPassword = 'mysecretpassword!123';\nexport const defaultCreationDate = '2019-01-13T06:25:00.000Z';\nexport const defaultMacAddress = 'dc:a6:32:12:ad:bf';\n\nexport const testSsoId = 'sso_id';\n\nconst permissionSetObjectTypes = {\n any: 'Any',\n artifacts: 'Artifacts',\n empty: '',\n groups: 'Device groups',\n releases: 'Releases',\n tenantManagement: 'Tenant management',\n userManagement: 'User management'\n};\n\nconst commonEndpoints = {\n artifacts: '^/api/management/v1/deployments/artifacts',\n artifactDetails: '^/api/management/v1/deployments/artifacts/[^/]+',\n deviceManagement: '^/api/management/(v[1-9])/(devauth|inventory)/'\n};\n\nexport const token =\n 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjZTNkMGY4Yy1hZWRlLTQwMzAtYjM5MS03ZDUwMjBlYjg3M2UiLCJzdWIiOiJhMzBhNzgwYi1iODQzLTUzNDQtODBlMy0wZmQ5NWE0ZjZmYzMiLCJleHAiOjE2MDY4MTUzNjksImlhdCI6MTYwNjIxMDU2OSwibWVuZGVyLnRlbmFudCI6IjVmODVjMTdiY2U2MmI3ZmE3ZjVmNzA0MCIsIm1lbmRlci51c2VyIjp0cnVlLCJpc3MiOiJNZW5kZXIgVXNlcnMiLCJzY3AiOiJtZW5kZXIuKiIsIm1lbmRlci5wbGFuIjoicHJvZmVzc2lvbmFsIiwibmJmIjoxNjA2MjEwNTY5fQ.qVgYdCzLTf8OdK9uUctqqaY_HWkIiwpekuGvuGQAXCEgOv4bRNDlZRN_ZRSbxQoARG3pquhScbQrjBV9tcF4irTUPlTn3yrsXNO17DpcbTVeKRkb88RDtIKiRw3orVZ_GlIb-ckTQ5dS-Nqlyyf3Fmrhca-gwt6m_xv2UrmJK6eYYTMfggdRRWb-4u7mEkBI_pHPMTQrT8kJ2BeX-vHgazH9AoH0k85LHtFZQXD7pXHlDZRnLxJXukncwMGDmF17374gavYAIyDIzcC8sEBMDnVXgpikeA1sauzirqix6mAVs6XmxdQO7aF0wfXO1_PTYUA3Nk1oQfMYNlEI3U9uLRJRZIq2L8fmrrBryhstKd4y0KlBbGAQrx8NtRkgajjd1ljMfPBUEZrb7uSerVjneiO-aIBO76CuH0zdklphIjpGJeogkBhe8pAYNggp1XsZHgpZfl7IE5faKaDkMGnutaea--Czor6bhqUNCuY4tR0cpQJbNwy6LS9o1CFy4Log';\n\nexport const accessTokens = [\n { id: 'some-id-1', expiration_date: '2022-06-02T11:11:21.725Z', name: 'some-name-1' },\n { id: 'some-id-2', expiration_date: '2022-06-02T11:11:21.725Z', last_used: '2022-06-02T11:05:21.725Z', name: 'some-name-2' }\n];\n\nexport const webhookEvents = [\n {\n id: '1',\n type: 'device-status-changed',\n data: { id: '1', status: 'accepted' },\n time: '2020-09-01T12:00:00.000Z',\n delivery_statuses: [{ integration_id: '1', success: true, status_code: 200 }]\n },\n {\n id: '2',\n type: 'device-status-changed',\n data: { id: '3', status: 'accepted' },\n time: '2020-09-01T12:00:05.000Z',\n delivery_statuses: [{ integration_id: '1', success: true, status_code: 200 }]\n }\n];\nexport const tenants = [\n {\n id: '671a0f1dd58c813118fe8622',\n parent_tenant_id: '6718de64b42e08dea2a2065d',\n name: 'child2',\n tenant_token: 'mQDYRCr-tGbDuJhPp7fArbfTA5htVTWE9G204AzhDUM',\n status: 'active',\n additional_info: {\n marketing: false,\n campaign: ''\n },\n plan: 'enterprise',\n trial: false,\n trial_expiration: null,\n service_provider: false,\n created_at: '2024-10-24T09:10:53.281Z',\n cancelled_at: null,\n children_tenants: null,\n max_child_tenants: 0,\n device_count: 0,\n device_limit: 100,\n binary_delta: true\n }\n];\n\nexport const adminUserCapabilities = {\n canAuditlog: true,\n canConfigure: true,\n canDeploy: true,\n canManageDevices: true,\n canManageReleases: true,\n canManageUsers: true,\n canReadDeployments: true,\n canReadDevices: true,\n canReadReleases: true,\n canReadUsers: true,\n canTroubleshoot: true,\n canUploadReleases: true,\n canWriteDevices: true\n};\n\nexport const userId = 'a30a780b-b843-5344-80e3-0fd95a4f6fc3';\n\nconst defaultUser = {\n created_ts: '2019-01-01T10:30:00.000Z',\n email: 'a@b.com',\n id: 'a1',\n roles: ['RBAC_ROLE_PERMIT_ALL'],\n tfa_status: 'enabled',\n verified: true\n};\n\nconst deviceTypes = { qemu: 'qemux86-64' };\n\nconst checkInTimeRounded = '2019-01-01T00:00:00.000Z';\nconst checkInTimeExact = '2019-01-01T10:25:00.000Z';\n\nexport const mockApiResponses = {\n deployments: {\n byId: {\n d1: {\n id: 'd1',\n name: 'test deployment',\n created: '2019-01-01T12:30:00.000Z',\n devices: {\n a1: {\n id: 'a1',\n status: 'installing',\n attributes: {},\n image: { size: 123 }\n }\n },\n statistics: {\n status: {\n 'already-installed': 0,\n decommissioned: 0,\n downloading: 0,\n failure: 0,\n installing: 1,\n noartifact: 0,\n pending: 0,\n rebooting: 0,\n success: 0\n },\n total_size: 1234\n }\n },\n d2: {\n id: 'd2',\n name: 'test deployment 2',\n artifact_name: 'r1',\n artifacts: ['123'],\n created: '2019-01-01T12:25:00.000Z',\n device_count: 1,\n devices: {\n b1: {\n attributes: {},\n id: 'b1',\n status: 'pending'\n }\n },\n filter: undefined,\n group: undefined,\n statistics: {\n status: {\n downloading: 0,\n decommissioned: 0,\n failure: 0,\n installing: 0,\n noartifact: 0,\n pending: 1,\n rebooting: 0,\n success: 0,\n 'already-installed': 0\n }\n }\n },\n d3: {\n id: 'd3',\n name: 'Test',\n phases: [\n { id: '0', batch_size: 2, device_count: 2 },\n { id: '1', start_ts: '2019-02-04T11:45:10.002Z', batch_size: 3, device_count: 3 },\n { id: '2', start_ts: '2019-02-05T11:45:10.002Z', batch_size: 5, device_count: 5 },\n { id: '3', start_ts: '2019-02-06T11:45:10.002Z', batch_size: 5, device_count: 5 },\n { id: '4', start_ts: '2019-02-21T11:45:10.002Z', batch_size: 5, device_count: 0 }\n ],\n max_devices: 0,\n created: '2019-01-31T12:59:30.020Z',\n devices: {},\n filter: undefined,\n group: undefined,\n stats: {\n pending: 3,\n decommissioned: 0,\n failure: 23,\n pause_before_committing: 0,\n pause_before_rebooting: 0,\n installing: 0,\n rebooting: 0,\n 'already-installed': 0,\n pause_before_installing: 0,\n downloading: 0,\n success: 6,\n aborted: 0,\n noartifact: 0\n },\n statistics: { total_size: '1234' },\n status: 'inprogress',\n active: true,\n device_count: 100,\n retries: '0',\n type: 'software'\n }\n },\n byStatus: {\n pending: { deploymentIds: ['d2'] },\n inprogress: { deploymentIds: ['d3'] }\n }\n },\n devices: {\n byId: {\n a1: {\n id: 'a1',\n auth_sets: [\n {\n id: 'auth1',\n identity_data: { mac: defaultMacAddress },\n pubkey: '-----BEGIN PUBLIC KEY-----\\nMIIBojWELzgJ62hcXIhAfqfoNiaB1326XZByZwcnHr5BuSPAgMBAAE=\\n-----END PUBLIC KEY-----\\n',\n status: 'accepted',\n ts: defaultCreationDate\n }\n ],\n updated_ts: '2019-01-01T09:25:00.000Z'\n },\n b1: {\n id: 'b1',\n attributes: {\n ipv4_wlan0: '192.168.10.141/24',\n device_type: [deviceTypes.qemu]\n },\n system: {\n check_in_time: checkInTimeRounded\n },\n check_in_time: checkInTimeExact,\n check_in_time_exact: checkInTimeExact,\n check_in_time_rounded: checkInTimeRounded,\n identity_data: { mac: defaultMacAddress },\n status: 'accepted',\n decommissioning: false,\n created_ts: defaultCreationDate,\n updated_ts: '2019-01-01T09:25:00.000Z',\n auth_sets: [\n {\n id: 'auth1',\n identity_data: { mac: defaultMacAddress },\n pubkey: '-----BEGIN PUBLIC KEY-----\\nMIIBojWELzgJ62hcXIhAfqfoNiaB1326XZByZwcnHr5BuSPAgMBAAE=\\n-----END PUBLIC KEY-----\\n',\n ts: defaultCreationDate,\n status: 'accepted'\n }\n ]\n }\n },\n groups: {\n byId: {\n testGroup: {\n deviceIds: ['a1', 'b1'],\n filters: [],\n total: 2\n },\n testGroupDynamic: {\n id: 'filter1',\n name: 'filter1',\n filters: [{ scope: 'system', key: 'group', operator: '$eq', value: 'things' }]\n }\n }\n },\n limits: { standard: 500, micro: 0, system: 0 },\n byStatus: {\n accepted: { deviceIds: ['a1', 'b1'], total: 2 },\n active: { deviceIds: [], total: 0 },\n inactive: { deviceIds: [], total: 0 },\n pending: { deviceIds: ['c1'], total: 1 },\n preauthorized: { deviceIds: [], total: 0 },\n rejected: { deviceIds: [], total: 0 }\n }\n },\n organization: {\n organization: {\n id: '1',\n addons: [],\n name: 'test',\n plan: 'os',\n trial: false\n },\n intentId: 'testIntent',\n auditlog: {\n events: [\n {\n actor: {\n id: 'string',\n type: 'user',\n email: 'string@example.com'\n },\n time: '2019-01-01T12:10:22.667Z',\n action: 'create',\n object: {\n id: 'string',\n type: 'user',\n user: {\n email: 'user@acme.com'\n }\n },\n change: 'change1'\n },\n {\n actor: {\n id: 'string',\n type: 'user',\n email: 'string',\n identity_data: 'string'\n },\n time: '2019-01-01T12:16:22.667Z',\n action: 'create',\n object: {\n id: 'string',\n type: 'deployment',\n deployment: {\n name: 'production',\n artifact_name: 'Application 0.0.1'\n }\n },\n change: 'change2'\n },\n {\n actor: {\n id: 'string',\n type: 'user',\n email: 'string@example.com'\n },\n time: '2019-01-01T12:10:22.669Z',\n action: 'open_terminal',\n meta: {\n session_id: ['abd313a8-ee88-48ab-9c99-fbcd80048e6e']\n },\n object: {\n id: 'a1',\n type: 'device'\n },\n change: 'change3'\n }\n ]\n }\n },\n releases: {\n byId: {\n r1: {\n name: 'r1',\n artifacts: [\n {\n id: 'art1',\n description: 'test description',\n device_types_compatible: [deviceTypes.qemu],\n modified: '2020-09-10T12:16:22.667Z',\n updates: [{ type_info: { type: 'testtype' } }],\n artifact_depends: {\n device_type: [deviceTypes.qemu]\n },\n artifact_provides: {\n artifact_name: 'myapp',\n 'data-partition.myapp.version': 'v2020.10',\n list_of_fancy: [deviceTypes.qemu, 'x172']\n },\n clears_artifact_provides: ['data-partition.myapp.*']\n }\n ],\n device_types_compatible: [deviceTypes.qemu],\n modified: '2020-09-10T12:16:22.667Z',\n metaData: {}\n }\n }\n },\n users: {\n byId: {\n a1: defaultUser,\n [userId]: { ...defaultUser, id: userId, email: 'a2@b.com', created_ts: '2019-01-01T12:30:00.000Z' }\n },\n rolesById: {\n admin: {\n name: 'admin',\n description: 'Administrator role',\n permissions: []\n },\n test: { name: 'test', description: 'test description', permissions: [] }\n },\n globalSettings: {\n '2fa': 'enabled',\n id_attribute: undefined,\n previousFilters: []\n },\n userSettings: {\n '2fa': 'disabled',\n columnSelection: [],\n onboarding: { something: 'here' },\n tooltips: {},\n previousFilters: []\n }\n }\n};\n\nexport const releasesList = Array.from({ length: 5000 }, (x, i) => ({\n artifacts: [\n {\n id: 'art1',\n description: 'test description',\n device_types_compatible: [deviceTypes.qemu],\n modified: '2020-09-10T12:16:22.667Z',\n updates: [{ type_info: { type: 'testtype' } }],\n artifact_depends: {\n device_type: [deviceTypes.qemu]\n },\n artifact_provides: {\n artifact_name: 'myapp',\n 'data-partition.myapp.version': 'v2020.10',\n list_of_fancy: [deviceTypes.qemu, 'x172']\n },\n clears_artifact_provides: ['data-partition.myapp.*']\n }\n ],\n device_types_compatible: [deviceTypes.qemu],\n metaData: {},\n name: `release-${i + 1}`,\n modified: i\n}));\n\nexport const permissionSets = [\n {\n ...defaultPermissionSets.Basic,\n object: permissionSetObjectTypes.empty,\n description: 'Set containing basic permissions.',\n permissions: [\n { action: 'http', object: { type: 'any', value: '^/api/management/v1/useradm/settings$' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/v1/useradm/users/me$' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/1.0/auth/verify$' } },\n { action: 'http', object: { type: 'PUT', value: '^/api/management/v1/useradm/2faverify$' } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/v1/useradm/users/me/2fa/(enable|disable)$' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/useradm/roles' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/tenantadm/user/tenant' } }\n ]\n },\n {\n ...defaultPermissionSets.ManageReleases,\n action: uiPermissionsById.manage.title,\n object: permissionSetObjectTypes.releases,\n description: 'Set of permissions which allows user to manage releases',\n permissions: [\n { action: 'http', object: { type: 'GET', value: commonEndpoints.artifacts } },\n { action: 'http', object: { type: 'GET', value: commonEndpoints.artifactDetails } },\n { action: 'http', object: { type: 'PUT', value: commonEndpoints.artifactDetails } },\n { action: 'http', object: { type: 'DELETE', value: commonEndpoints.artifactDetails } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/v1/deployments/artifacts/[^/]+/download' } }\n ]\n },\n {\n ...defaultPermissionSets.ReadUsers,\n action: uiPermissionsById.read.title,\n object: permissionSetObjectTypes.userManagement,\n description: 'Set of permissions which allows user to view other users',\n permissions: [{ action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/useradm/' } }]\n },\n {\n ...defaultPermissionSets.ManageUsers,\n action: uiPermissionsById.manage.title,\n object: permissionSetObjectTypes.userManagement,\n description: 'Set of permissions which allows user manage other user accounts',\n permissions: [{ action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/useradm/' } }]\n },\n {\n ...defaultPermissionSets.ReadTenants,\n action: uiPermissionsById.read.title,\n object: permissionSetObjectTypes.tenantManagement,\n description: 'Set of permissions which allows user to list other tenants and their config',\n permissions: [\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/tenantadm/' } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/(v[1-9])/tenantadm/' } }\n ]\n },\n {\n ...defaultPermissionSets.ManageTenants,\n action: uiPermissionsById.manage.title,\n object: permissionSetObjectTypes.tenantManagement,\n description: 'Set of permissions which allows user to manage other tenants and their config',\n permissions: [\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/tenantadm/' } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/(v[1-9])/tenantadm/' } },\n { action: 'http', object: { type: 'PUT', value: '^/api/management/(v[1-9])/tenantadm/' } }\n ]\n },\n {\n ...defaultPermissionSets.ReadAuditLogs,\n action: uiPermissionsById.read.title,\n object: 'System Audit Log',\n description: 'Set of permissions which allows user to view system audit log',\n permissions: [{ action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9]|0.1.0)/auditlogs/logs' } }]\n },\n {\n ...defaultPermissionSets.DeployToDevices,\n action: 'Deploy',\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to deploy to devices',\n permissions: [{ action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/(deployments|deviceconfig)/' } }],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.ConfigureDevices,\n action: 'Configure',\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to manage configuration of the devices',\n permissions: [{ action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deviceconfig/' } }],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.ConnectToDevices,\n action: 'Connect',\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to use remote terminal and file transfer',\n permissions: [\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/connect$' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/download\\\\?path=[^\\u0026]+$' } },\n { action: 'http', object: { type: 'PUT', value: '^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/upload$' } }\n ],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.SuperUser,\n action: 'Any',\n object: permissionSetObjectTypes.any,\n description: 'Set of permissions which allows user to do anything',\n permissions: [{ action: 'any', object: { type: 'any', value: 'any' } }]\n },\n {\n ...defaultPermissionSets.UploadArtifacts,\n action: 'Upload',\n object: permissionSetObjectTypes.artifacts,\n description: 'Set of permissions which allows user to upload artifacts',\n permissions: [\n { action: 'http', object: { type: 'POST', value: commonEndpoints.artifacts } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/v1/deployments/artifacts/generate' } }\n ]\n },\n {\n ...defaultPermissionSets.ReadDevices,\n action: uiPermissionsById.read.title,\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to view devices',\n permissions: [\n { action: 'http', object: { type: 'POST', value: '^/api/management/v2/inventory/filters/search' } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/v1/reporting/devices/search' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/(deployments|devauth|inventory|deviceconfig|devicemonitor)/' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+$' } }\n ],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.ManageDevices,\n action: uiPermissionsById.manage.title,\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to manage devices',\n permissions: [\n { action: 'http', object: { type: 'POST', value: commonEndpoints.deviceManagement } },\n { action: 'http', object: { type: 'PUT', value: commonEndpoints.deviceManagement } },\n { action: 'http', object: { type: 'DELETE', value: commonEndpoints.deviceManagement } }\n ],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.ReadReleases,\n action: uiPermissionsById.read.title,\n object: permissionSetObjectTypes.releases,\n description: 'Set of permissions which allows user to view releases',\n permissions: [\n { action: 'http', object: { type: 'GET', value: commonEndpoints.artifacts } },\n { action: 'http', object: { type: 'GET', value: commonEndpoints.artifactDetails } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/v1/deployments/artifacts/[^/]+/download' } }\n ]\n },\n {\n name: 'almostAdmin',\n object: permissionSetObjectTypes.empty,\n description: 'Set containing all the permissions.',\n permissions: [\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/auditlogs/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deployments/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deployments/config/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deployments/deployments/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deployments/deployments/releases/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/devauth/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deviceconfig/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deviceconnect/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deviceconnect/devices' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/inventory/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/iot-manager/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/monitor/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/useradm/.*' } }\n ]\n }\n];\n\nexport const rbacRoles = [\n {\n name: 'dyn',\n description: '',\n permissions: [\n { action: 'CREATE_DEPLOYMENT', object: { type: 'DEVICE_GROUP', value: 'dyn' } },\n { action: 'VIEW_DEVICE', object: { type: 'DEVICE_GROUP', value: 'dyn' } }\n ]\n },\n { name: 'asdasd', description: '123', permissions: [{ action: 'http', object: { type: 'any', value: '/api/management/v1/useradm/.*' } }] },\n {\n name: '141sasd',\n description: '1313adg',\n permission_sets_with_scope: [\n { ...defaultPermissionSets.ReadDevices, scope: { type: scopedPermissionAreas.groups.scopeType, value: ['bestgroup'] } },\n { ...defaultPermissionSets.ConnectToDevices, scope: { type: scopedPermissionAreas.groups.scopeType, value: ['bestgroup'] } },\n { ...defaultPermissionSets.ManageUsers }\n ]\n },\n {\n name: 'kljlkk',\n description: 'lkl',\n permission_sets_with_scope: [{ ...defaultPermissionSets.ConnectToDevices, scope: { type: scopedPermissionAreas.groups.scopeType, value: ['bestgroup'] } }]\n },\n {\n name: 'yyyyy',\n description: 'asd',\n permission_sets_with_scope: [\n { ...defaultPermissionSets.ManageDevices, scope: { type: scopedPermissionAreas.groups.scopeType, value: ['dockerclient'] } },\n { ...defaultPermissionSets.ManageReleases }\n ]\n },\n {\n name: 'RBAC_ROLE_DEPLOYMENTS_MANAGER',\n description: 'Intended for users responsible for managing deployments, this role can create and abort deployments',\n permission_sets_with_scope: [{ ...defaultPermissionSets.DeployToDevices }]\n },\n {\n name: 'RBAC_ROLE_REMOTE_TERMINAL',\n description: `Intended for tech support accounts, this role can access the devices' Remote Terminal.`,\n permission_sets_with_scope: [{ ...defaultPermissionSets.ConnectToDevices }]\n },\n { name: 'RBAC_ROLE_PERMIT_ALL', description: '', permission_sets_with_scope: [{ ...defaultPermissionSets.SuperUser }] },\n {\n name: 'RBAC_ROLE_OBSERVER',\n description:\n 'Intended for team leaders or limited tech support accounts, this role can see all Devices, Artifacts and Deployment reports but not make any changes.',\n permission_sets_with_scope: [{ ...defaultPermissionSets.ReadReleases }, { ...defaultPermissionSets.ReadDevices }]\n },\n {\n name: 'RBAC_ROLE_CI',\n description:\n '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.',\n permission_sets_with_scope: [\n { ...defaultPermissionSets.ReadReleases },\n { ...defaultPermissionSets.ManageReleases },\n { ...defaultPermissionSets.UploadArtifacts }\n ]\n },\n {\n name: 'almostAdmin',\n description: 'almost admin rights',\n permissions: permissionSets.find(item => item.name === 'almostAdmin')?.permissions\n },\n {\n name: 'almostAdminNew',\n description: 'almost admin rights',\n permission_sets_with_scope: Object.values(defaultPermissionSets)\n }\n];\n\nconst expectedParsedRoles = {\n '141sasd': {\n editable: true,\n isCustom: undefined,\n uiPermissions: {\n ...emptyUiPermissions,\n groups: { bestgroup: [uiPermissionsById.read.value, uiPermissionsById.connect.value] },\n userManagement: [uiPermissionsById.manage.value]\n }\n },\n asdasd: {\n editable: false,\n isCustom: true,\n uiPermissions: { ...emptyUiPermissions, userManagement: [uiPermissionsById.read.value, uiPermissionsById.manage.value] }\n },\n dyn: {\n editable: false,\n isCustom: true,\n uiPermissions: {\n ...emptyUiPermissions,\n deployments: [uiPermissionsById.deploy.value],\n groups: { dyn: [uiPermissionsById.read.value, uiPermissionsById.deploy.value] }\n }\n },\n kljlkk: {\n editable: true,\n isCustom: false,\n uiPermissions: { ...emptyUiPermissions, groups: { bestgroup: [uiPermissionsById.read.value, uiPermissionsById.connect.value] } }\n },\n yyyyy: {\n editable: true,\n isCustom: undefined,\n uiPermissions: {\n ...emptyUiPermissions,\n groups: { dockerclient: [uiPermissionsById.read.value, uiPermissionsById.manage.value] },\n releases: { [ALL_RELEASES]: [uiPermissionsById.manage.value] }\n }\n },\n almostAdmin: {\n editable: false,\n isCustom: true,\n uiPermissions: {\n ...emptyUiPermissions,\n auditlog: [uiPermissionsById.read.value],\n deployments: [uiPermissionsById.manage.value, uiPermissionsById.deploy.value, uiPermissionsById.read.value],\n groups: {\n [ALL_DEVICES]: [\n uiPermissionsById.read.value,\n // we can't assign deployment permissions to devices here, since the old path based rbac controls don't allow the scoped permissions\n // uiPermissionsById.deploy.value,\n uiPermissionsById.manage.value,\n uiPermissionsById.connect.value,\n uiPermissionsById.configure.value\n ]\n },\n releases: {\n [ALL_RELEASES]: [uiPermissionsById.read.value, uiPermissionsById.upload.value, uiPermissionsById.manage.value]\n },\n userManagement: [uiPermissionsById.read.value, uiPermissionsById.manage.value]\n }\n },\n almostAdminNew: {\n editable: true,\n isCustom: undefined,\n uiPermissions: {\n ...emptyUiPermissions,\n auditlog: [uiPermissionsById.read.value],\n deployments: [uiPermissionsById.read.value, uiPermissionsById.deploy.value, uiPermissionsById.manage.value],\n groups: {\n [ALL_DEVICES]: [\n uiPermissionsById.read.value,\n uiPermissionsById.manage.value,\n uiPermissionsById.deploy.value,\n uiPermissionsById.connect.value,\n uiPermissionsById.configure.value\n ]\n },\n releases: {\n [ALL_RELEASES]: [uiPermissionsById.manage.value, uiPermissionsById.upload.value, uiPermissionsById.read.value]\n },\n tenantManagement: [uiPermissionsById.read.value, uiPermissionsById.manage.value],\n userManagement: [uiPermissionsById.read.value, uiPermissionsById.manage.value]\n }\n }\n};\n\nconst defaultRolesById = {\n ...rolesById,\n test: {\n ...emptyRole,\n name: 'test',\n description: 'test description',\n editable: true,\n uiPermissions: {\n ...emptyUiPermissions,\n groups: { testGroup: [uiPermissionsById.read.value] },\n releases: { bar: [uiPermissionsById.read.value] }\n }\n }\n};\n\nexport const receivedRoles = rbacRoles.reduce(\n (accu, role) => {\n const { name, description, ...roleRemainder } = role;\n if (name.startsWith('RBAC')) {\n accu[name] = {\n ...defaultRolesById[name],\n ...roleRemainder,\n editable: false,\n isCustom: false,\n description: defaultRolesById[name].description ? defaultRolesById[name].description : description\n };\n } else {\n const result = expectedParsedRoles[name] ?? {};\n accu[name] = {\n ...emptyRole,\n ...role,\n ...result,\n name\n };\n }\n return accu;\n },\n { ...defaultRolesById }\n);\n\nexport const receivedPermissionSets = permissionSets.reduce((accu, set) => {\n const result = defaultPermissionSets[set.name]?.result ?? {};\n accu[set.name] = {\n ...set,\n result: {\n ...emptyUiPermissions,\n ...result\n }\n };\n return accu;\n}, {});\n","// Copyright 2022 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nconst palette = {\n border: {\n main: '#e3e3e3'\n },\n tooltip: {\n tierTipBackground: '#f7fafb'\n }\n};\n\nexport const light = {\n palette\n};\n"],"mappings":"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","names":["import_react","React"]}
1
+ {"version":3,"sources":["../src/setupTests.tsx","../src/mockData.ts","../src/utils.tsx","../src/theme/light.ts"],"sourcesContent":["// Copyright 2025 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//@ts-nocheck\nimport React from 'react';\nimport { Provider } from 'react-redux';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { createSerializer } from '@emotion/jest';\nimport { ThemeProvider, createTheme } from '@mui/material/styles';\n\nimport { yes } from '@northern.tech/utils/helpers';\nimport { configureStore } from '@reduxjs/toolkit';\nimport { cleanup, render } from '@testing-library/react';\nimport { expect, vi } from 'vitest';\nimport { MessageChannel } from 'worker_threads';\n\nimport { menderEnvironment, mockDate, token as mockToken } from './mockData';\nimport { theme } from './utils';\n\nexpect.addSnapshotSerializer(createSerializer({ includeStyles: true }));\n\nexport const TEST_LOCATION = 'localhost';\n\nexport const mockAbortController: { abort: () => void; signal: { addEventListener: () => void; removeEventListener: () => void } } = {\n abort: vi.fn(),\n signal: { addEventListener: () => {}, removeEventListener: () => {} }\n};\n\nconst oldWindowLocalStorage = window.localStorage;\nconst oldWindowLocation = window.location;\nconst oldWindowSessionStorage = window.sessionStorage;\n\nvi.mock('uuid', () => ({ v4: () => 'mock-uuid' }));\n\nconst storage = {};\nglobal.HTMLCanvasElement.prototype.getContext = vi.fn();\n\nexport const beforeAll = async () => {\n // Temporarily workaround for bug in @testing-library/react when use user-event with `vi.useFakeTimers()`\n\n // Enable the mocking in tests.\n delete window.location;\n window.location = {\n ...oldWindowLocation,\n hostname: TEST_LOCATION,\n origin: 'http://localhost',\n assign: vi.fn(),\n replace: vi.fn(),\n reload: vi.fn()\n };\n delete window.sessionStorage;\n window.sessionStorage = {\n ...oldWindowSessionStorage,\n getItem: vi.fn(yes),\n setItem: vi.fn(),\n removeItem: vi.fn()\n };\n delete window.localStorage;\n window.localStorage = {\n ...oldWindowLocalStorage,\n getItem: vi.fn(name => {\n if (name === 'JWT') {\n return JSON.stringify({ token: mockToken });\n }\n return storage[name];\n }),\n setItem: vi.fn(name => storage[name]),\n removeItem: vi.fn()\n };\n window.mender_environment = menderEnvironment;\n window.ENV = 'test';\n global.AbortController = vi.fn().mockImplementation(function () {\n return mockAbortController;\n });\n global.MessageChannel = MessageChannel;\n global.ResizeObserver = vi.fn().mockImplementation(function () {\n return {\n observe: vi.fn(),\n unobserve: vi.fn(),\n disconnect: vi.fn()\n };\n });\n window.RTCPeerConnection = () => ({\n createOffer: () => {},\n setLocalDescription: () => {},\n createDataChannel: () => {}\n });\n\n Object.defineProperty(navigator, 'appVersion', { value: 'Test', writable: true });\n const intersectionObserverMock = function () {\n return {\n observe: vi.fn(),\n disconnect: vi.fn()\n };\n };\n window.prompt = vi.fn();\n window.IntersectionObserver = vi.fn().mockImplementation(intersectionObserverMock);\n vi.spyOn(React, 'useEffect').mockImplementation(React.useLayoutEffect);\n\n //TODO: remove, once https://github.com/testing-library/react-testing-library/issues/1197 resolved\n const _jest = globalThis.jest;\n\n globalThis.jest = {\n ...globalThis.jest\n };\n\n vi.stubGlobal('jest', {\n advanceTimersByTime: vi.advanceTimersByTime.bind(vi)\n });\n return () => void (globalThis.jest = _jest);\n};\n\nexport const beforeEach = () => {\n vi.useFakeTimers({ now: mockDate });\n vi.setSystemTime(mockDate);\n};\n\nexport const afterEach = async () => {\n cleanup();\n vi.runOnlyPendingTimers();\n vi.useRealTimers();\n};\n\nexport const afterAll = async () => {\n // restore `window.location` etc. to the original `jsdom` `Location` object\n window.localStorage = oldWindowLocalStorage;\n window.location = oldWindowLocation;\n window.sessionStorage = oldWindowSessionStorage;\n React.useEffect.mockRestore();\n vi.unstubAllGlobals();\n};\n\nconst customRender = (ui, options = {}) => {\n const { preloadedState = { users: { currentSession: { token: mockToken, expiresAt: undefined } } }, ...remainder } = options;\n const store = options.store ?? configureStore({ preloadedState });\n const AllTheProviders = ({ children }) => (\n <ThemeProvider theme={theme}>\n <MemoryRouter>\n <Provider store={store}>{children}</Provider>\n </MemoryRouter>\n </ThemeProvider>\n );\n return { store, ...render(ui, { wrapper: AllTheProviders, ...remainder }) };\n};\n\nexport * from '@testing-library/react';\n// override render method\n\nexport { customRender as render };\n","// Copyright 2020 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nimport {\n ALL_DEVICES,\n ALL_RELEASES,\n defaultPermissionSets,\n emptyRole,\n emptyUiPermissions,\n maxSessionAge,\n rolesById,\n scopedPermissionAreas,\n uiPermissionsById\n} from '@northern.tech/utils/constants';\n\nexport const undefineds = /undefined|\\[object Object\\]/;\nexport const menderEnvironment = {\n features: {\n hasMultitenancy: true\n },\n integrationVersion: 'saas-123.34',\n menderVersion: 'next',\n metaMenderVersion: 'saas-123.34',\n services: {\n deploymentsVersion: '1.2.3',\n deviceauthVersion: null,\n inventoryVersion: null\n }\n};\nexport const TEST_SESSION_DATETIME = '2019-01-13T13:00:00.000Z';\nconst testDate = new Date(TEST_SESSION_DATETIME);\nexport const mockDate = new Date(testDate.setMilliseconds(testDate.getMilliseconds() + maxSessionAge));\n\nexport const defaultPassword = 'mysecretpassword!123';\nexport const defaultCreationDate = '2019-01-13T06:25:00.000Z';\nexport const defaultMacAddress = 'dc:a6:32:12:ad:bf';\n\nexport const testSsoId = 'sso_id';\n\nconst permissionSetObjectTypes = {\n any: 'Any',\n artifacts: 'Artifacts',\n empty: '',\n groups: 'Device groups',\n releases: 'Releases',\n tenantManagement: 'Tenant management',\n userManagement: 'User management'\n};\n\nconst commonEndpoints = {\n artifacts: '^/api/management/v1/deployments/artifacts',\n artifactDetails: '^/api/management/v1/deployments/artifacts/[^/]+',\n deviceManagement: '^/api/management/(v[1-9])/(devauth|inventory)/'\n};\n\nexport const token =\n 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJjZTNkMGY4Yy1hZWRlLTQwMzAtYjM5MS03ZDUwMjBlYjg3M2UiLCJzdWIiOiJhMzBhNzgwYi1iODQzLTUzNDQtODBlMy0wZmQ5NWE0ZjZmYzMiLCJleHAiOjE2MDY4MTUzNjksImlhdCI6MTYwNjIxMDU2OSwibWVuZGVyLnRlbmFudCI6IjVmODVjMTdiY2U2MmI3ZmE3ZjVmNzA0MCIsIm1lbmRlci51c2VyIjp0cnVlLCJpc3MiOiJNZW5kZXIgVXNlcnMiLCJzY3AiOiJtZW5kZXIuKiIsIm1lbmRlci5wbGFuIjoicHJvZmVzc2lvbmFsIiwibmJmIjoxNjA2MjEwNTY5fQ.qVgYdCzLTf8OdK9uUctqqaY_HWkIiwpekuGvuGQAXCEgOv4bRNDlZRN_ZRSbxQoARG3pquhScbQrjBV9tcF4irTUPlTn3yrsXNO17DpcbTVeKRkb88RDtIKiRw3orVZ_GlIb-ckTQ5dS-Nqlyyf3Fmrhca-gwt6m_xv2UrmJK6eYYTMfggdRRWb-4u7mEkBI_pHPMTQrT8kJ2BeX-vHgazH9AoH0k85LHtFZQXD7pXHlDZRnLxJXukncwMGDmF17374gavYAIyDIzcC8sEBMDnVXgpikeA1sauzirqix6mAVs6XmxdQO7aF0wfXO1_PTYUA3Nk1oQfMYNlEI3U9uLRJRZIq2L8fmrrBryhstKd4y0KlBbGAQrx8NtRkgajjd1ljMfPBUEZrb7uSerVjneiO-aIBO76CuH0zdklphIjpGJeogkBhe8pAYNggp1XsZHgpZfl7IE5faKaDkMGnutaea--Czor6bhqUNCuY4tR0cpQJbNwy6LS9o1CFy4Log';\n\nexport const accessTokens = [\n { id: 'some-id-1', expiration_date: '2022-06-02T11:11:21.725Z', name: 'some-name-1' },\n { id: 'some-id-2', expiration_date: '2022-06-02T11:11:21.725Z', last_used: '2022-06-02T11:05:21.725Z', name: 'some-name-2' }\n];\n\nexport const webhookEvents = [\n {\n id: '1',\n type: 'device-status-changed',\n data: { id: '1', status: 'accepted' },\n time: '2020-09-01T12:00:00.000Z',\n delivery_statuses: [{ integration_id: '1', success: true, status_code: 200 }]\n },\n {\n id: '2',\n type: 'device-status-changed',\n data: { id: '3', status: 'accepted' },\n time: '2020-09-01T12:00:05.000Z',\n delivery_statuses: [{ integration_id: '1', success: true, status_code: 200 }]\n }\n];\nexport const tenants = [\n {\n id: '671a0f1dd58c813118fe8622',\n parent_tenant_id: '6718de64b42e08dea2a2065d',\n name: 'child2',\n tenant_token: 'mQDYRCr-tGbDuJhPp7fArbfTA5htVTWE9G204AzhDUM',\n status: 'active',\n additional_info: {\n marketing: false,\n campaign: ''\n },\n plan: 'enterprise',\n trial: false,\n trial_expiration: null,\n service_provider: false,\n created_at: '2024-10-24T09:10:53.281Z',\n cancelled_at: null,\n children_tenants: null,\n max_child_tenants: 0,\n device_count: 0,\n device_limit: 100,\n binary_delta: true\n }\n];\n\nexport const adminUserCapabilities = {\n canAuditlog: true,\n canConfigure: true,\n canDeploy: true,\n canManageDevices: true,\n canManageReleases: true,\n canManageUsers: true,\n canReadDeployments: true,\n canReadDevices: true,\n canReadReleases: true,\n canReadUsers: true,\n canTroubleshoot: true,\n canUploadReleases: true,\n canWriteDevices: true\n};\n\nexport const userId = 'a30a780b-b843-5344-80e3-0fd95a4f6fc3';\n\nconst defaultUser = {\n created_ts: '2019-01-01T10:30:00.000Z',\n email: 'a@b.com',\n id: 'a1',\n roles: ['RBAC_ROLE_PERMIT_ALL'],\n tfa_status: 'enabled',\n verified: true\n};\n\nconst deviceTypes = { qemu: 'qemux86-64' };\n\nconst checkInTimeRounded = '2019-01-01T00:00:00.000Z';\nconst checkInTimeExact = '2019-01-01T10:25:00.000Z';\n\nexport const mockApiResponses = {\n deployments: {\n byId: {\n d1: {\n id: 'd1',\n name: 'test deployment',\n created: '2019-01-01T12:30:00.000Z',\n devices: {\n a1: {\n id: 'a1',\n status: 'installing',\n attributes: {},\n image: { size: 123 }\n }\n },\n statistics: {\n status: {\n 'already-installed': 0,\n decommissioned: 0,\n downloading: 0,\n failure: 0,\n installing: 1,\n noartifact: 0,\n pending: 0,\n rebooting: 0,\n success: 0\n },\n total_size: 1234\n }\n },\n d2: {\n id: 'd2',\n name: 'test deployment 2',\n artifact_name: 'r1',\n artifacts: ['123'],\n created: '2019-01-01T12:25:00.000Z',\n device_count: 1,\n devices: {\n b1: {\n attributes: {},\n id: 'b1',\n status: 'pending'\n }\n },\n filter: undefined,\n group: undefined,\n statistics: {\n status: {\n downloading: 0,\n decommissioned: 0,\n failure: 0,\n installing: 0,\n noartifact: 0,\n pending: 1,\n rebooting: 0,\n success: 0,\n 'already-installed': 0\n }\n }\n },\n d3: {\n id: 'd3',\n name: 'Test',\n phases: [\n { id: '0', batch_size: 2, device_count: 2 },\n { id: '1', start_ts: '2019-02-04T11:45:10.002Z', batch_size: 3, device_count: 3 },\n { id: '2', start_ts: '2019-02-05T11:45:10.002Z', batch_size: 5, device_count: 5 },\n { id: '3', start_ts: '2019-02-06T11:45:10.002Z', batch_size: 5, device_count: 5 },\n { id: '4', start_ts: '2019-02-21T11:45:10.002Z', batch_size: 5, device_count: 0 }\n ],\n max_devices: 0,\n created: '2019-01-31T12:59:30.020Z',\n devices: {},\n filter: undefined,\n group: undefined,\n stats: {\n pending: 3,\n decommissioned: 0,\n failure: 23,\n pause_before_committing: 0,\n pause_before_rebooting: 0,\n installing: 0,\n rebooting: 0,\n 'already-installed': 0,\n pause_before_installing: 0,\n downloading: 0,\n success: 6,\n aborted: 0,\n noartifact: 0\n },\n statistics: { total_size: '1234' },\n status: 'inprogress',\n active: true,\n device_count: 100,\n retries: '0',\n type: 'software'\n }\n },\n byStatus: {\n pending: { deploymentIds: ['d2'] },\n inprogress: { deploymentIds: ['d3'] }\n }\n },\n devices: {\n byId: {\n a1: {\n id: 'a1',\n auth_sets: [\n {\n id: 'auth1',\n identity_data: { mac: defaultMacAddress },\n pubkey: '-----BEGIN PUBLIC KEY-----\\nMIIBojWELzgJ62hcXIhAfqfoNiaB1326XZByZwcnHr5BuSPAgMBAAE=\\n-----END PUBLIC KEY-----\\n',\n status: 'accepted',\n ts: defaultCreationDate\n }\n ],\n updated_ts: '2019-01-01T09:25:00.000Z'\n },\n b1: {\n id: 'b1',\n attributes: {\n ipv4_wlan0: '192.168.10.141/24',\n device_type: [deviceTypes.qemu]\n },\n system: {\n check_in_time: checkInTimeRounded\n },\n check_in_time: checkInTimeExact,\n check_in_time_exact: checkInTimeExact,\n check_in_time_rounded: checkInTimeRounded,\n identity_data: { mac: defaultMacAddress },\n status: 'accepted',\n decommissioning: false,\n created_ts: defaultCreationDate,\n updated_ts: '2019-01-01T09:25:00.000Z',\n auth_sets: [\n {\n id: 'auth1',\n identity_data: { mac: defaultMacAddress },\n pubkey: '-----BEGIN PUBLIC KEY-----\\nMIIBojWELzgJ62hcXIhAfqfoNiaB1326XZByZwcnHr5BuSPAgMBAAE=\\n-----END PUBLIC KEY-----\\n',\n ts: defaultCreationDate,\n status: 'accepted'\n }\n ]\n }\n },\n groups: {\n byId: {\n testGroup: {\n deviceIds: ['a1', 'b1'],\n filters: [],\n total: 2\n },\n testGroupDynamic: {\n id: 'filter1',\n name: 'filter1',\n filters: [{ scope: 'system', key: 'group', operator: '$eq', value: 'things' }]\n }\n }\n },\n limits: { standard: 500, micro: 0, system: 0 },\n byStatus: {\n accepted: { deviceIds: ['a1', 'b1'], total: 2 },\n active: { deviceIds: [], total: 0 },\n inactive: { deviceIds: [], total: 0 },\n pending: { deviceIds: ['c1'], total: 1 },\n preauthorized: { deviceIds: [], total: 0 },\n rejected: { deviceIds: [], total: 0 }\n }\n },\n organization: {\n organization: {\n id: '1',\n addons: [],\n name: 'test',\n plan: 'os',\n trial: false\n },\n products: [\n {\n name: 'mender_standard',\n billing_unit: 'devices',\n prices: [\n {\n plan: 'os',\n constraints: {\n min: 50,\n max: 1000,\n div: 50\n }\n },\n {\n plan: 'professional',\n constraints: {\n min: 250,\n max: 10000,\n div: 50\n }\n }\n ],\n addons: [\n {\n name: 'troubleshoot',\n prices: [{ plan: 'os' }, { plan: 'professional' }]\n },\n {\n name: 'configure',\n prices: [{ plan: 'os' }, { plan: 'professional' }]\n },\n {\n name: 'monitor',\n prices: [{ plan: 'professional' }]\n }\n ]\n },\n {\n name: 'mender_micro',\n billing_unit: 'devices',\n prices: [\n {\n plan: 'os',\n constraints: {\n min: 50,\n max: 5000,\n div: 50\n }\n },\n {\n plan: 'professional',\n constraints: {\n min: 500,\n max: 100000,\n div: 50\n }\n }\n ]\n }\n ],\n intentId: 'testIntent',\n auditlog: {\n events: [\n {\n actor: {\n id: 'string',\n type: 'user',\n email: 'string@example.com'\n },\n time: '2019-01-01T12:10:22.667Z',\n action: 'create',\n object: {\n id: 'string',\n type: 'user',\n user: {\n email: 'user@acme.com'\n }\n },\n change: 'change1'\n },\n {\n actor: {\n id: 'string',\n type: 'user',\n email: 'string',\n identity_data: 'string'\n },\n time: '2019-01-01T12:16:22.667Z',\n action: 'create',\n object: {\n id: 'string',\n type: 'deployment',\n deployment: {\n name: 'production',\n artifact_name: 'Application 0.0.1'\n }\n },\n change: 'change2'\n },\n {\n actor: {\n id: 'string',\n type: 'user',\n email: 'string@example.com'\n },\n time: '2019-01-01T12:10:22.669Z',\n action: 'open_terminal',\n meta: {\n session_id: ['abd313a8-ee88-48ab-9c99-fbcd80048e6e']\n },\n object: {\n id: 'a1',\n type: 'device'\n },\n change: 'change3'\n }\n ]\n }\n },\n releases: {\n byId: {\n r1: {\n name: 'r1',\n artifacts: [\n {\n id: 'art1',\n description: 'test description',\n device_types_compatible: [deviceTypes.qemu],\n modified: '2020-09-10T12:16:22.667Z',\n updates: [{ type_info: { type: 'testtype' } }],\n artifact_depends: {\n device_type: [deviceTypes.qemu]\n },\n artifact_provides: {\n artifact_name: 'myapp',\n 'data-partition.myapp.version': 'v2020.10',\n list_of_fancy: [deviceTypes.qemu, 'x172']\n },\n clears_artifact_provides: ['data-partition.myapp.*']\n }\n ],\n device_types_compatible: [deviceTypes.qemu],\n modified: '2020-09-10T12:16:22.667Z',\n metaData: {}\n }\n }\n },\n users: {\n byId: {\n a1: defaultUser,\n [userId]: { ...defaultUser, id: userId, email: 'a2@b.com', created_ts: '2019-01-01T12:30:00.000Z' }\n },\n rolesById: {\n admin: {\n name: 'admin',\n description: 'Administrator role',\n permissions: []\n },\n test: { name: 'test', description: 'test description', permissions: [] }\n },\n globalSettings: {\n '2fa': 'enabled',\n id_attribute: undefined,\n previousFilters: []\n },\n userSettings: {\n '2fa': 'disabled',\n columnSelection: [],\n onboarding: { something: 'here' },\n tooltips: {},\n previousFilters: []\n }\n }\n};\n\nexport const releasesList = Array.from({ length: 5000 }, (x, i) => ({\n artifacts: [\n {\n id: 'art1',\n description: 'test description',\n device_types_compatible: [deviceTypes.qemu],\n modified: '2020-09-10T12:16:22.667Z',\n updates: [{ type_info: { type: 'testtype' } }],\n artifact_depends: {\n device_type: [deviceTypes.qemu]\n },\n artifact_provides: {\n artifact_name: 'myapp',\n 'data-partition.myapp.version': 'v2020.10',\n list_of_fancy: [deviceTypes.qemu, 'x172']\n },\n clears_artifact_provides: ['data-partition.myapp.*']\n }\n ],\n device_types_compatible: [deviceTypes.qemu],\n metaData: {},\n name: `release-${i + 1}`,\n modified: i\n}));\n\nexport const permissionSets = [\n {\n ...defaultPermissionSets.Basic,\n object: permissionSetObjectTypes.empty,\n description: 'Set containing basic permissions.',\n permissions: [\n { action: 'http', object: { type: 'any', value: '^/api/management/v1/useradm/settings$' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/v1/useradm/users/me$' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/1.0/auth/verify$' } },\n { action: 'http', object: { type: 'PUT', value: '^/api/management/v1/useradm/2faverify$' } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/v1/useradm/users/me/2fa/(enable|disable)$' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/useradm/roles' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/tenantadm/user/tenant' } }\n ]\n },\n {\n ...defaultPermissionSets.ManageReleases,\n action: uiPermissionsById.manage.title,\n object: permissionSetObjectTypes.releases,\n description: 'Set of permissions which allows user to manage releases',\n permissions: [\n { action: 'http', object: { type: 'GET', value: commonEndpoints.artifacts } },\n { action: 'http', object: { type: 'GET', value: commonEndpoints.artifactDetails } },\n { action: 'http', object: { type: 'PUT', value: commonEndpoints.artifactDetails } },\n { action: 'http', object: { type: 'DELETE', value: commonEndpoints.artifactDetails } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/v1/deployments/artifacts/[^/]+/download' } }\n ]\n },\n {\n ...defaultPermissionSets.ReadUsers,\n action: uiPermissionsById.read.title,\n object: permissionSetObjectTypes.userManagement,\n description: 'Set of permissions which allows user to view other users',\n permissions: [{ action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/useradm/' } }]\n },\n {\n ...defaultPermissionSets.ManageUsers,\n action: uiPermissionsById.manage.title,\n object: permissionSetObjectTypes.userManagement,\n description: 'Set of permissions which allows user manage other user accounts',\n permissions: [{ action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/useradm/' } }]\n },\n {\n ...defaultPermissionSets.ReadTenants,\n action: uiPermissionsById.read.title,\n object: permissionSetObjectTypes.tenantManagement,\n description: 'Set of permissions which allows user to list other tenants and their config',\n permissions: [\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/tenantadm/' } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/(v[1-9])/tenantadm/' } }\n ]\n },\n {\n ...defaultPermissionSets.ManageTenants,\n action: uiPermissionsById.manage.title,\n object: permissionSetObjectTypes.tenantManagement,\n description: 'Set of permissions which allows user to manage other tenants and their config',\n permissions: [\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/tenantadm/' } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/(v[1-9])/tenantadm/' } },\n { action: 'http', object: { type: 'PUT', value: '^/api/management/(v[1-9])/tenantadm/' } }\n ]\n },\n {\n ...defaultPermissionSets.ReadAuditLogs,\n action: uiPermissionsById.read.title,\n object: 'System Audit Log',\n description: 'Set of permissions which allows user to view system audit log',\n permissions: [{ action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9]|0.1.0)/auditlogs/logs' } }]\n },\n {\n ...defaultPermissionSets.DeployToDevices,\n action: 'Deploy',\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to deploy to devices',\n permissions: [{ action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/(deployments|deviceconfig)/' } }],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.ConfigureDevices,\n action: 'Configure',\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to manage configuration of the devices',\n permissions: [{ action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deviceconfig/' } }],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.ConnectToDevices,\n action: 'Connect',\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to use remote terminal and file transfer',\n permissions: [\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/connect$' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/download\\\\?path=[^\\u0026]+$' } },\n { action: 'http', object: { type: 'PUT', value: '^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+/upload$' } }\n ],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.SuperUser,\n action: 'Any',\n object: permissionSetObjectTypes.any,\n description: 'Set of permissions which allows user to do anything',\n permissions: [{ action: 'any', object: { type: 'any', value: 'any' } }]\n },\n {\n ...defaultPermissionSets.UploadArtifacts,\n action: 'Upload',\n object: permissionSetObjectTypes.artifacts,\n description: 'Set of permissions which allows user to upload artifacts',\n permissions: [\n { action: 'http', object: { type: 'POST', value: commonEndpoints.artifacts } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/v1/deployments/artifacts/generate' } }\n ]\n },\n {\n ...defaultPermissionSets.ReadDevices,\n action: uiPermissionsById.read.title,\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to view devices',\n permissions: [\n { action: 'http', object: { type: 'POST', value: '^/api/management/v2/inventory/filters/search' } },\n { action: 'http', object: { type: 'POST', value: '^/api/management/v1/reporting/devices/search' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9])/(deployments|devauth|inventory|deviceconfig|devicemonitor)/' } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/(v[1-9]|0.1.0)/deviceconnect/devices/[^/]+$' } }\n ],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.ManageDevices,\n action: uiPermissionsById.manage.title,\n object: permissionSetObjectTypes.groups,\n description: 'Set of permissions which allows user to manage devices',\n permissions: [\n { action: 'http', object: { type: 'POST', value: commonEndpoints.deviceManagement } },\n { action: 'http', object: { type: 'PUT', value: commonEndpoints.deviceManagement } },\n { action: 'http', object: { type: 'DELETE', value: commonEndpoints.deviceManagement } }\n ],\n supported_scope_types: [scopedPermissionAreas.groups.scopeType]\n },\n {\n ...defaultPermissionSets.ReadReleases,\n action: uiPermissionsById.read.title,\n object: permissionSetObjectTypes.releases,\n description: 'Set of permissions which allows user to view releases',\n permissions: [\n { action: 'http', object: { type: 'GET', value: commonEndpoints.artifacts } },\n { action: 'http', object: { type: 'GET', value: commonEndpoints.artifactDetails } },\n { action: 'http', object: { type: 'GET', value: '^/api/management/v1/deployments/artifacts/[^/]+/download' } }\n ]\n },\n {\n name: 'almostAdmin',\n object: permissionSetObjectTypes.empty,\n description: 'Set containing all the permissions.',\n permissions: [\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/auditlogs/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deployments/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deployments/config/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deployments/deployments/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deployments/deployments/releases/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/devauth/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deviceconfig/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deviceconnect/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/deviceconnect/devices' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/inventory/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/iot-manager/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/monitor/.*' } },\n { action: 'http', object: { type: 'any', value: '^/api/management/(v[1-9])/useradm/.*' } }\n ]\n }\n];\n\nexport const rbacRoles = [\n {\n name: 'dyn',\n description: '',\n permissions: [\n { action: 'CREATE_DEPLOYMENT', object: { type: 'DEVICE_GROUP', value: 'dyn' } },\n { action: 'VIEW_DEVICE', object: { type: 'DEVICE_GROUP', value: 'dyn' } }\n ]\n },\n { name: 'asdasd', description: '123', permissions: [{ action: 'http', object: { type: 'any', value: '/api/management/v1/useradm/.*' } }] },\n {\n name: '141sasd',\n description: '1313adg',\n permission_sets_with_scope: [\n { ...defaultPermissionSets.ReadDevices, scope: { type: scopedPermissionAreas.groups.scopeType, value: ['bestgroup'] } },\n { ...defaultPermissionSets.ConnectToDevices, scope: { type: scopedPermissionAreas.groups.scopeType, value: ['bestgroup'] } },\n { ...defaultPermissionSets.ManageUsers }\n ]\n },\n {\n name: 'kljlkk',\n description: 'lkl',\n permission_sets_with_scope: [{ ...defaultPermissionSets.ConnectToDevices, scope: { type: scopedPermissionAreas.groups.scopeType, value: ['bestgroup'] } }]\n },\n {\n name: 'yyyyy',\n description: 'asd',\n permission_sets_with_scope: [\n { ...defaultPermissionSets.ManageDevices, scope: { type: scopedPermissionAreas.groups.scopeType, value: ['dockerclient'] } },\n { ...defaultPermissionSets.ManageReleases }\n ]\n },\n {\n name: 'RBAC_ROLE_DEPLOYMENTS_MANAGER',\n description: 'Intended for users responsible for managing deployments, this role can create and abort deployments',\n permission_sets_with_scope: [{ ...defaultPermissionSets.DeployToDevices }]\n },\n {\n name: 'RBAC_ROLE_REMOTE_TERMINAL',\n description: `Intended for tech support accounts, this role can access the devices' Remote Terminal.`,\n permission_sets_with_scope: [{ ...defaultPermissionSets.ConnectToDevices }]\n },\n { name: 'RBAC_ROLE_PERMIT_ALL', description: '', permission_sets_with_scope: [{ ...defaultPermissionSets.SuperUser }] },\n {\n name: 'RBAC_ROLE_OBSERVER',\n description:\n 'Intended for team leaders or limited tech support accounts, this role can see all Devices, Artifacts and Deployment reports but not make any changes.',\n permission_sets_with_scope: [{ ...defaultPermissionSets.ReadReleases }, { ...defaultPermissionSets.ReadDevices }]\n },\n {\n name: 'RBAC_ROLE_CI',\n description:\n '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.',\n permission_sets_with_scope: [\n { ...defaultPermissionSets.ReadReleases },\n { ...defaultPermissionSets.ManageReleases },\n { ...defaultPermissionSets.UploadArtifacts }\n ]\n },\n {\n name: 'almostAdmin',\n description: 'almost admin rights',\n permissions: permissionSets.find(item => item.name === 'almostAdmin')?.permissions\n },\n {\n name: 'almostAdminNew',\n description: 'almost admin rights',\n permission_sets_with_scope: Object.values(defaultPermissionSets)\n }\n];\n\nconst expectedParsedRoles = {\n '141sasd': {\n editable: true,\n isCustom: undefined,\n uiPermissions: {\n ...emptyUiPermissions,\n groups: { bestgroup: [uiPermissionsById.read.value, uiPermissionsById.connect.value] },\n userManagement: [uiPermissionsById.manage.value]\n }\n },\n asdasd: {\n editable: false,\n isCustom: true,\n uiPermissions: { ...emptyUiPermissions, userManagement: [uiPermissionsById.read.value, uiPermissionsById.manage.value] }\n },\n dyn: {\n editable: false,\n isCustom: true,\n uiPermissions: {\n ...emptyUiPermissions,\n deployments: [uiPermissionsById.deploy.value],\n groups: { dyn: [uiPermissionsById.read.value, uiPermissionsById.deploy.value] }\n }\n },\n kljlkk: {\n editable: true,\n isCustom: false,\n uiPermissions: { ...emptyUiPermissions, groups: { bestgroup: [uiPermissionsById.read.value, uiPermissionsById.connect.value] } }\n },\n yyyyy: {\n editable: true,\n isCustom: undefined,\n uiPermissions: {\n ...emptyUiPermissions,\n groups: { dockerclient: [uiPermissionsById.read.value, uiPermissionsById.manage.value] },\n releases: { [ALL_RELEASES]: [uiPermissionsById.manage.value] }\n }\n },\n almostAdmin: {\n editable: false,\n isCustom: true,\n uiPermissions: {\n ...emptyUiPermissions,\n auditlog: [uiPermissionsById.read.value],\n deployments: [uiPermissionsById.manage.value, uiPermissionsById.deploy.value, uiPermissionsById.read.value],\n groups: {\n [ALL_DEVICES]: [\n uiPermissionsById.read.value,\n // we can't assign deployment permissions to devices here, since the old path based rbac controls don't allow the scoped permissions\n // uiPermissionsById.deploy.value,\n uiPermissionsById.manage.value,\n uiPermissionsById.connect.value,\n uiPermissionsById.configure.value\n ]\n },\n releases: {\n [ALL_RELEASES]: [uiPermissionsById.read.value, uiPermissionsById.upload.value, uiPermissionsById.manage.value]\n },\n userManagement: [uiPermissionsById.read.value, uiPermissionsById.manage.value]\n }\n },\n almostAdminNew: {\n editable: true,\n isCustom: undefined,\n uiPermissions: {\n ...emptyUiPermissions,\n auditlog: [uiPermissionsById.read.value],\n deployments: [uiPermissionsById.read.value, uiPermissionsById.deploy.value, uiPermissionsById.manage.value],\n groups: {\n [ALL_DEVICES]: [\n uiPermissionsById.read.value,\n uiPermissionsById.manage.value,\n uiPermissionsById.deploy.value,\n uiPermissionsById.connect.value,\n uiPermissionsById.configure.value\n ]\n },\n releases: {\n [ALL_RELEASES]: [uiPermissionsById.manage.value, uiPermissionsById.upload.value, uiPermissionsById.read.value]\n },\n tenantManagement: [uiPermissionsById.read.value, uiPermissionsById.manage.value],\n userManagement: [uiPermissionsById.read.value, uiPermissionsById.manage.value]\n }\n }\n};\n\nconst defaultRolesById = {\n ...rolesById,\n test: {\n ...emptyRole,\n name: 'test',\n description: 'test description',\n editable: true,\n uiPermissions: {\n ...emptyUiPermissions,\n groups: { testGroup: [uiPermissionsById.read.value] },\n releases: { bar: [uiPermissionsById.read.value] }\n }\n }\n};\n\nexport const receivedRoles = rbacRoles.reduce(\n (accu, role) => {\n const { name, description, ...roleRemainder } = role;\n if (name.startsWith('RBAC')) {\n accu[name] = {\n ...defaultRolesById[name],\n ...roleRemainder,\n editable: false,\n isCustom: false,\n description: defaultRolesById[name].description ? defaultRolesById[name].description : description\n };\n } else {\n const result = expectedParsedRoles[name] ?? {};\n accu[name] = {\n ...emptyRole,\n ...role,\n ...result,\n name\n };\n }\n return accu;\n },\n { ...defaultRolesById }\n);\n\nexport const receivedPermissionSets = permissionSets.reduce((accu, set) => {\n const result = defaultPermissionSets[set.name]?.result ?? {};\n accu[set.name] = {\n ...set,\n result: {\n ...emptyUiPermissions,\n ...result\n }\n };\n return accu;\n}, {});\n","// Copyright 2025 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n//@ts-nocheck\nimport React from 'react';\nimport { Provider } from 'react-redux';\nimport { MemoryRouter } from 'react-router-dom';\n\nimport { createSerializer } from '@emotion/jest';\nimport { ThemeProvider, createTheme } from '@mui/material/styles';\n\nimport { yes } from '@northern.tech/utils/helpers';\nimport { configureStore } from '@reduxjs/toolkit';\nimport { cleanup, render } from '@testing-library/react';\nimport { act, queryByRole, waitFor, within } from '@testing-library/react';\nimport { expect } from 'vitest';\n\nimport { light } from './theme/light';\n\nexport const selectMaterialUiSelectOption = async (element, optionText, user) => {\n // The button that opens the dropdown, which is a sibling of the input\n const selectButton = element.parentNode.querySelector('[role=combobox]');\n // Open the select dropdown\n await act(async () => await user.click(selectButton));\n // Get the dropdown element. We don't use getByRole() because it includes <select>s too.\n const listbox = queryByRole(document.documentElement, 'listbox');\n // Click the list item\n const listItem = within(listbox!).getByText(optionText);\n await user.click(listItem);\n // Wait for the listbox to be removed, so it isn't visible in subsequent calls\n await waitFor(() => expect(queryByRole(document.documentElement, 'listbox')).not.toBeInTheDocument());\n return Promise.resolve();\n};\n\nexport const theme = createTheme(light);\n\nexport const renderWithRouter = (ui: React.ReactElement, { route = '/', preloadedState } = {}) => {\n const store = getConfiguredStore({ preloadedState });\n const Wrapper = ({ children }) => (\n <ThemeProvider theme={theme}>\n <MemoryRouter initialEntries={[route]}>\n <Provider store={store}>{children}</Provider>\n </MemoryRouter>\n </ThemeProvider>\n );\n return { store, ...render(ui, { wrapper: Wrapper }) };\n};\n","// Copyright 2022 Northern.tech AS\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nconst palette = {\n border: {\n main: '#e3e3e3'\n },\n tooltip: {\n tierTipBackground: '#f7fafb'\n }\n};\n\nexport const light = {\n palette\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,IAAAA,gBAAkB;AAClB,IAAAC,sBAAyB;AACzB,IAAAC,2BAA6B;AAE7B,kBAAiC;AACjC,IAAAC,iBAA2C;AAE3C,qBAAoB;AACpB,qBAA+B;AAC/B,IAAAH,gBAAgC;AAChC,IAAAI,iBAA2B;AAC3B,4BAA+B;;;ACZ/B,uBAUO;AAGA,IAAM,oBAAoB;AAAA,EAC/B,UAAU;AAAA,IACR,iBAAiB;AAAA,EACnB;AAAA,EACA,oBAAoB;AAAA,EACpB,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,UAAU;AAAA,IACR,oBAAoB;AAAA,IACpB,mBAAmB;AAAA,IACnB,kBAAkB;AAAA,EACpB;AACF;AACO,IAAM,wBAAwB;AACrC,IAAM,WAAW,IAAI,KAAK,qBAAqB;AACxC,IAAM,WAAW,IAAI,KAAK,SAAS,gBAAgB,SAAS,gBAAgB,IAAI,8BAAa,CAAC;AAG9F,IAAM,sBAAsB;AAC5B,IAAM,oBAAoB;AAIjC,IAAM,2BAA2B;AAAA,EAC/B,KAAK;AAAA,EACL,WAAW;AAAA,EACX,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,gBAAgB;AAClB;AAEA,IAAM,kBAAkB;AAAA,EACtB,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,kBAAkB;AACpB;AAEO,IAAM,QACX;AAgEK,IAAM,SAAS;AAEtB,IAAM,cAAc;AAAA,EAClB,YAAY;AAAA,EACZ,OAAO;AAAA,EACP,IAAI;AAAA,EACJ,OAAO,CAAC,sBAAsB;AAAA,EAC9B,YAAY;AAAA,EACZ,UAAU;AACZ;AAEA,IAAM,cAAc,EAAE,MAAM,aAAa;AAEzC,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AAElB,IAAM,mBAAmB;AAAA,EAC9B,aAAa;AAAA,IACX,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,SAAS;AAAA,QACT,SAAS;AAAA,UACP,IAAI;AAAA,YACF,IAAI;AAAA,YACJ,QAAQ;AAAA,YACR,YAAY,CAAC;AAAA,YACb,OAAO,EAAE,MAAM,IAAI;AAAA,UACrB;AAAA,QACF;AAAA,QACA,YAAY;AAAA,UACV,QAAQ;AAAA,YACN,qBAAqB;AAAA,YACrB,gBAAgB;AAAA,YAChB,aAAa;AAAA,YACb,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,SAAS;AAAA,YACT,WAAW;AAAA,YACX,SAAS;AAAA,UACX;AAAA,UACA,YAAY;AAAA,QACd;AAAA,MACF;AAAA,MACA,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,eAAe;AAAA,QACf,WAAW,CAAC,KAAK;AAAA,QACjB,SAAS;AAAA,QACT,cAAc;AAAA,QACd,SAAS;AAAA,UACP,IAAI;AAAA,YACF,YAAY,CAAC;AAAA,YACb,IAAI;AAAA,YACJ,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,YAAY;AAAA,UACV,QAAQ;AAAA,YACN,aAAa;AAAA,YACb,gBAAgB;AAAA,YAChB,SAAS;AAAA,YACT,YAAY;AAAA,YACZ,YAAY;AAAA,YACZ,SAAS;AAAA,YACT,WAAW;AAAA,YACX,SAAS;AAAA,YACT,qBAAqB;AAAA,UACvB;AAAA,QACF;AAAA,MACF;AAAA,MACA,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,EAAE,IAAI,KAAK,YAAY,GAAG,cAAc,EAAE;AAAA,UAC1C,EAAE,IAAI,KAAK,UAAU,4BAA4B,YAAY,GAAG,cAAc,EAAE;AAAA,UAChF,EAAE,IAAI,KAAK,UAAU,4BAA4B,YAAY,GAAG,cAAc,EAAE;AAAA,UAChF,EAAE,IAAI,KAAK,UAAU,4BAA4B,YAAY,GAAG,cAAc,EAAE;AAAA,UAChF,EAAE,IAAI,KAAK,UAAU,4BAA4B,YAAY,GAAG,cAAc,EAAE;AAAA,QAClF;AAAA,QACA,aAAa;AAAA,QACb,SAAS;AAAA,QACT,SAAS,CAAC;AAAA,QACV,QAAQ;AAAA,QACR,OAAO;AAAA,QACP,OAAO;AAAA,UACL,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,SAAS;AAAA,UACT,yBAAyB;AAAA,UACzB,wBAAwB;AAAA,UACxB,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,qBAAqB;AAAA,UACrB,yBAAyB;AAAA,UACzB,aAAa;AAAA,UACb,SAAS;AAAA,UACT,SAAS;AAAA,UACT,YAAY;AAAA,QACd;AAAA,QACA,YAAY,EAAE,YAAY,OAAO;AAAA,QACjC,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,cAAc;AAAA,QACd,SAAS;AAAA,QACT,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,SAAS,EAAE,eAAe,CAAC,IAAI,EAAE;AAAA,MACjC,YAAY,EAAE,eAAe,CAAC,IAAI,EAAE;AAAA,IACtC;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,WAAW;AAAA,UACT;AAAA,YACE,IAAI;AAAA,YACJ,eAAe,EAAE,KAAK,kBAAkB;AAAA,YACxC,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,IAAI;AAAA,UACN;AAAA,QACF;AAAA,QACA,YAAY;AAAA,MACd;AAAA,MACA,IAAI;AAAA,QACF,IAAI;AAAA,QACJ,YAAY;AAAA,UACV,YAAY;AAAA,UACZ,aAAa,CAAC,YAAY,IAAI;AAAA,QAChC;AAAA,QACA,QAAQ;AAAA,UACN,eAAe;AAAA,QACjB;AAAA,QACA,eAAe;AAAA,QACf,qBAAqB;AAAA,QACrB,uBAAuB;AAAA,QACvB,eAAe,EAAE,KAAK,kBAAkB;AAAA,QACxC,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,YAAY;AAAA,QACZ,YAAY;AAAA,QACZ,WAAW;AAAA,UACT;AAAA,YACE,IAAI;AAAA,YACJ,eAAe,EAAE,KAAK,kBAAkB;AAAA,YACxC,QAAQ;AAAA,YACR,IAAI;AAAA,YACJ,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,MAAM;AAAA,QACJ,WAAW;AAAA,UACT,WAAW,CAAC,MAAM,IAAI;AAAA,UACtB,SAAS,CAAC;AAAA,UACV,OAAO;AAAA,QACT;AAAA,QACA,kBAAkB;AAAA,UAChB,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,SAAS,CAAC,EAAE,OAAO,UAAU,KAAK,SAAS,UAAU,OAAO,OAAO,SAAS,CAAC;AAAA,QAC/E;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ,EAAE,UAAU,KAAK,OAAO,GAAG,QAAQ,EAAE;AAAA,IAC7C,UAAU;AAAA,MACR,UAAU,EAAE,WAAW,CAAC,MAAM,IAAI,GAAG,OAAO,EAAE;AAAA,MAC9C,QAAQ,EAAE,WAAW,CAAC,GAAG,OAAO,EAAE;AAAA,MAClC,UAAU,EAAE,WAAW,CAAC,GAAG,OAAO,EAAE;AAAA,MACpC,SAAS,EAAE,WAAW,CAAC,IAAI,GAAG,OAAO,EAAE;AAAA,MACvC,eAAe,EAAE,WAAW,CAAC,GAAG,OAAO,EAAE;AAAA,MACzC,UAAU,EAAE,WAAW,CAAC,GAAG,OAAO,EAAE;AAAA,IACtC;AAAA,EACF;AAAA,EACA,cAAc;AAAA,IACZ,cAAc;AAAA,MACZ,IAAI;AAAA,MACJ,QAAQ,CAAC;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,UAAU;AAAA,MACR;AAAA,QACE,MAAM;AAAA,QACN,cAAc;AAAA,QACd,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,cACX,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,YACP;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,cACX,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,EAAE,MAAM,eAAe,CAAC;AAAA,UACnD;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,CAAC,EAAE,MAAM,KAAK,GAAG,EAAE,MAAM,eAAe,CAAC;AAAA,UACnD;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,QAAQ,CAAC,EAAE,MAAM,eAAe,CAAC;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AAAA,MACA;AAAA,QACE,MAAM;AAAA,QACN,cAAc;AAAA,QACd,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,cACX,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,YACP;AAAA,UACF;AAAA,UACA;AAAA,YACE,MAAM;AAAA,YACN,aAAa;AAAA,cACX,KAAK;AAAA,cACL,KAAK;AAAA,cACL,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,MACR,QAAQ;AAAA,QACN;AAAA,UACE,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,OAAO;AAAA,UACT;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,QAAQ;AAAA,YACN,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,OAAO;AAAA,YACT;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,OAAO;AAAA,YACP,eAAe;AAAA,UACjB;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,QAAQ;AAAA,YACN,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,YAAY;AAAA,cACV,MAAM;AAAA,cACN,eAAe;AAAA,YACjB;AAAA,UACF;AAAA,UACA,QAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,MAAM;AAAA,YACN,OAAO;AAAA,UACT;AAAA,UACA,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,MAAM;AAAA,YACJ,YAAY,CAAC,sCAAsC;AAAA,UACrD;AAAA,UACA,QAAQ;AAAA,YACN,IAAI;AAAA,YACJ,MAAM;AAAA,UACR;AAAA,UACA,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,MACJ,IAAI;AAAA,QACF,MAAM;AAAA,QACN,WAAW;AAAA,UACT;AAAA,YACE,IAAI;AAAA,YACJ,aAAa;AAAA,YACb,yBAAyB,CAAC,YAAY,IAAI;AAAA,YAC1C,UAAU;AAAA,YACV,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;AAAA,YAC7C,kBAAkB;AAAA,cAChB,aAAa,CAAC,YAAY,IAAI;AAAA,YAChC;AAAA,YACA,mBAAmB;AAAA,cACjB,eAAe;AAAA,cACf,gCAAgC;AAAA,cAChC,eAAe,CAAC,YAAY,MAAM,MAAM;AAAA,YAC1C;AAAA,YACA,0BAA0B,CAAC,wBAAwB;AAAA,UACrD;AAAA,QACF;AAAA,QACA,yBAAyB,CAAC,YAAY,IAAI;AAAA,QAC1C,UAAU;AAAA,QACV,UAAU,CAAC;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,CAAC,MAAM,GAAG,EAAE,GAAG,aAAa,IAAI,QAAQ,OAAO,YAAY,YAAY,2BAA2B;AAAA,IACpG;AAAA,IACA,WAAW;AAAA,MACT,OAAO;AAAA,QACL,MAAM;AAAA,QACN,aAAa;AAAA,QACb,aAAa,CAAC;AAAA,MAChB;AAAA,MACA,MAAM,EAAE,MAAM,QAAQ,aAAa,oBAAoB,aAAa,CAAC,EAAE;AAAA,IACzE;AAAA,IACA,gBAAgB;AAAA,MACd,OAAO;AAAA,MACP,cAAc;AAAA,MACd,iBAAiB,CAAC;AAAA,IACpB;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,iBAAiB,CAAC;AAAA,MAClB,YAAY,EAAE,WAAW,OAAO;AAAA,MAChC,UAAU,CAAC;AAAA,MACX,iBAAiB,CAAC;AAAA,IACpB;AAAA,EACF;AACF;AAEO,IAAM,eAAe,MAAM,KAAK,EAAE,QAAQ,IAAK,GAAG,CAAC,GAAG,OAAO;AAAA,EAClE,WAAW;AAAA,IACT;AAAA,MACE,IAAI;AAAA,MACJ,aAAa;AAAA,MACb,yBAAyB,CAAC,YAAY,IAAI;AAAA,MAC1C,UAAU;AAAA,MACV,SAAS,CAAC,EAAE,WAAW,EAAE,MAAM,WAAW,EAAE,CAAC;AAAA,MAC7C,kBAAkB;AAAA,QAChB,aAAa,CAAC,YAAY,IAAI;AAAA,MAChC;AAAA,MACA,mBAAmB;AAAA,QACjB,eAAe;AAAA,QACf,gCAAgC;AAAA,QAChC,eAAe,CAAC,YAAY,MAAM,MAAM;AAAA,MAC1C;AAAA,MACA,0BAA0B,CAAC,wBAAwB;AAAA,IACrD;AAAA,EACF;AAAA,EACA,yBAAyB,CAAC,YAAY,IAAI;AAAA,EAC1C,UAAU,CAAC;AAAA,EACX,MAAM,WAAW,IAAI,CAAC;AAAA,EACtB,UAAU;AACZ,EAAE;AAEK,IAAM,iBAAiB;AAAA,EAC5B;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,wCAAwC,EAAE;AAAA,MAC1F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,wCAAwC,EAAE;AAAA,MAC1F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,oCAAoC,EAAE;AAAA,MACtF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,yCAAyC,EAAE;AAAA,MAC3F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,6DAA6D,EAAE;AAAA,MAChH,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,0CAA0C,EAAE;AAAA,MAC5F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,kDAAkD,EAAE;AAAA,IACtG;AAAA,EACF;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,OAAO;AAAA,IACjC,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,gBAAgB,UAAU,EAAE;AAAA,MAC5E,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,gBAAgB,gBAAgB,EAAE;AAAA,MAClF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,gBAAgB,gBAAgB,EAAE;AAAA,MAClF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,UAAU,OAAO,gBAAgB,gBAAgB,EAAE;AAAA,MACrF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,2DAA2D,EAAE;AAAA,IAC/G;AAAA,EACF;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,KAAK;AAAA,IAC/B,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa,CAAC,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,qCAAqC,EAAE,CAAC;AAAA,EACxG;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,OAAO;AAAA,IACjC,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa,CAAC,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,qCAAqC,EAAE,CAAC;AAAA,EACxG;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,KAAK;AAAA,IAC/B,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,uCAAuC,EAAE;AAAA,MACzF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,uCAAuC,EAAE;AAAA,IAC5F;AAAA,EACF;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,OAAO;AAAA,IACjC,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,uCAAuC,EAAE;AAAA,MACzF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,uCAAuC,EAAE;AAAA,MAC1F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,uCAAuC,EAAE;AAAA,IAC3F;AAAA,EACF;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,KAAK;AAAA,IAC/B,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,aAAa,CAAC,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,iDAAiD,EAAE,CAAC;AAAA,EACpH;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ;AAAA,IACR,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa,CAAC,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,wDAAwD,EAAE,CAAC;AAAA,IACzH,uBAAuB,CAAC,uCAAsB,OAAO,SAAS;AAAA,EAChE;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ;AAAA,IACR,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa,CAAC,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,0CAA0C,EAAE,CAAC;AAAA,IAC3G,uBAAuB,CAAC,uCAAsB,OAAO,SAAS;AAAA,EAChE;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ;AAAA,IACR,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,uEAAuE,EAAE;AAAA,MACzH,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,qFAA0F,EAAE;AAAA,MAC5I,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,sEAAsE,EAAE;AAAA,IAC1H;AAAA,IACA,uBAAuB,CAAC,uCAAsB,OAAO,SAAS;AAAA,EAChE;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ;AAAA,IACR,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa,CAAC,EAAE,QAAQ,OAAO,QAAQ,EAAE,MAAM,OAAO,OAAO,MAAM,EAAE,CAAC;AAAA,EACxE;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ;AAAA,IACR,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,gBAAgB,UAAU,EAAE;AAAA,MAC7E,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,qDAAqD,EAAE;AAAA,IAC1G;AAAA,EACF;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,KAAK;AAAA,IAC/B,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,+CAA+C,EAAE;AAAA,MAClG,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,+CAA+C,EAAE;AAAA,MAClG,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,wFAAwF,EAAE;AAAA,MAC1I,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,+DAA+D,EAAE;AAAA,IACnH;AAAA,IACA,uBAAuB,CAAC,uCAAsB,OAAO,SAAS;AAAA,EAChE;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,OAAO;AAAA,IACjC,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,QAAQ,OAAO,gBAAgB,iBAAiB,EAAE;AAAA,MACpF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,gBAAgB,iBAAiB,EAAE;AAAA,MACnF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,UAAU,OAAO,gBAAgB,iBAAiB,EAAE;AAAA,IACxF;AAAA,IACA,uBAAuB,CAAC,uCAAsB,OAAO,SAAS;AAAA,EAChE;AAAA,EACA;AAAA,IACE,GAAG,uCAAsB;AAAA,IACzB,QAAQ,mCAAkB,KAAK;AAAA,IAC/B,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,gBAAgB,UAAU,EAAE;AAAA,MAC5E,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,gBAAgB,gBAAgB,EAAE;AAAA,MAClF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,2DAA2D,EAAE;AAAA,IAC/G;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,QAAQ,yBAAyB;AAAA,IACjC,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,yCAAyC,EAAE;AAAA,MAC3F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,2CAA2C,EAAE;AAAA,MAC7F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,kDAAkD,EAAE;AAAA,MACpG,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,uDAAuD,EAAE;AAAA,MACzG,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,gEAAgE,EAAE;AAAA,MAClH,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,uCAAuC,EAAE;AAAA,MACzF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,4CAA4C,EAAE;AAAA,MAC9F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,6CAA6C,EAAE;AAAA,MAC/F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,kDAAkD,EAAE;AAAA,MACpG,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,yCAAyC,EAAE;AAAA,MAC3F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,2CAA2C,EAAE;AAAA,MAC7F,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,uCAAuC,EAAE;AAAA,MACzF,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,uCAAuC,EAAE;AAAA,IAC3F;AAAA,EACF;AACF;AAEO,IAAM,YAAY;AAAA,EACvB;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa;AAAA,MACX,EAAE,QAAQ,qBAAqB,QAAQ,EAAE,MAAM,gBAAgB,OAAO,MAAM,EAAE;AAAA,MAC9E,EAAE,QAAQ,eAAe,QAAQ,EAAE,MAAM,gBAAgB,OAAO,MAAM,EAAE;AAAA,IAC1E;AAAA,EACF;AAAA,EACA,EAAE,MAAM,UAAU,aAAa,OAAO,aAAa,CAAC,EAAE,QAAQ,QAAQ,QAAQ,EAAE,MAAM,OAAO,OAAO,gCAAgC,EAAE,CAAC,EAAE;AAAA,EACzI;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,4BAA4B;AAAA,MAC1B,EAAE,GAAG,uCAAsB,aAAa,OAAO,EAAE,MAAM,uCAAsB,OAAO,WAAW,OAAO,CAAC,WAAW,EAAE,EAAE;AAAA,MACtH,EAAE,GAAG,uCAAsB,kBAAkB,OAAO,EAAE,MAAM,uCAAsB,OAAO,WAAW,OAAO,CAAC,WAAW,EAAE,EAAE;AAAA,MAC3H,EAAE,GAAG,uCAAsB,YAAY;AAAA,IACzC;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,4BAA4B,CAAC,EAAE,GAAG,uCAAsB,kBAAkB,OAAO,EAAE,MAAM,uCAAsB,OAAO,WAAW,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;AAAA,EAC3J;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,4BAA4B;AAAA,MAC1B,EAAE,GAAG,uCAAsB,eAAe,OAAO,EAAE,MAAM,uCAAsB,OAAO,WAAW,OAAO,CAAC,cAAc,EAAE,EAAE;AAAA,MAC3H,EAAE,GAAG,uCAAsB,eAAe;AAAA,IAC5C;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,4BAA4B,CAAC,EAAE,GAAG,uCAAsB,gBAAgB,CAAC;AAAA,EAC3E;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,4BAA4B,CAAC,EAAE,GAAG,uCAAsB,iBAAiB,CAAC;AAAA,EAC5E;AAAA,EACA,EAAE,MAAM,wBAAwB,aAAa,IAAI,4BAA4B,CAAC,EAAE,GAAG,uCAAsB,UAAU,CAAC,EAAE;AAAA,EACtH;AAAA,IACE,MAAM;AAAA,IACN,aACE;AAAA,IACF,4BAA4B,CAAC,EAAE,GAAG,uCAAsB,aAAa,GAAG,EAAE,GAAG,uCAAsB,YAAY,CAAC;AAAA,EAClH;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aACE;AAAA,IACF,4BAA4B;AAAA,MAC1B,EAAE,GAAG,uCAAsB,aAAa;AAAA,MACxC,EAAE,GAAG,uCAAsB,eAAe;AAAA,MAC1C,EAAE,GAAG,uCAAsB,gBAAgB;AAAA,IAC7C;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,aAAa,eAAe,KAAK,UAAQ,KAAK,SAAS,aAAa,GAAG;AAAA,EACzE;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,aAAa;AAAA,IACb,4BAA4B,OAAO,OAAO,sCAAqB;AAAA,EACjE;AACF;AAEA,IAAM,sBAAsB;AAAA,EAC1B,WAAW;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,MACb,GAAG;AAAA,MACH,QAAQ,EAAE,WAAW,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,QAAQ,KAAK,EAAE;AAAA,MACrF,gBAAgB,CAAC,mCAAkB,OAAO,KAAK;AAAA,IACjD;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe,EAAE,GAAG,qCAAoB,gBAAgB,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,OAAO,KAAK,EAAE;AAAA,EACzH;AAAA,EACA,KAAK;AAAA,IACH,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,MACb,GAAG;AAAA,MACH,aAAa,CAAC,mCAAkB,OAAO,KAAK;AAAA,MAC5C,QAAQ,EAAE,KAAK,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,OAAO,KAAK,EAAE;AAAA,IAChF;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe,EAAE,GAAG,qCAAoB,QAAQ,EAAE,WAAW,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,QAAQ,KAAK,EAAE,EAAE;AAAA,EACjI;AAAA,EACA,OAAO;AAAA,IACL,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,MACb,GAAG;AAAA,MACH,QAAQ,EAAE,cAAc,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,OAAO,KAAK,EAAE;AAAA,MACvF,UAAU,EAAE,CAAC,6BAAY,GAAG,CAAC,mCAAkB,OAAO,KAAK,EAAE;AAAA,IAC/D;AAAA,EACF;AAAA,EACA,aAAa;AAAA,IACX,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,MACb,GAAG;AAAA,MACH,UAAU,CAAC,mCAAkB,KAAK,KAAK;AAAA,MACvC,aAAa,CAAC,mCAAkB,OAAO,OAAO,mCAAkB,OAAO,OAAO,mCAAkB,KAAK,KAAK;AAAA,MAC1G,QAAQ;AAAA,QACN,CAAC,4BAAW,GAAG;AAAA,UACb,mCAAkB,KAAK;AAAA;AAAA;AAAA,UAGvB,mCAAkB,OAAO;AAAA,UACzB,mCAAkB,QAAQ;AAAA,UAC1B,mCAAkB,UAAU;AAAA,QAC9B;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,CAAC,6BAAY,GAAG,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,OAAO,OAAO,mCAAkB,OAAO,KAAK;AAAA,MAC/G;AAAA,MACA,gBAAgB,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,OAAO,KAAK;AAAA,IAC/E;AAAA,EACF;AAAA,EACA,gBAAgB;AAAA,IACd,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe;AAAA,MACb,GAAG;AAAA,MACH,UAAU,CAAC,mCAAkB,KAAK,KAAK;AAAA,MACvC,aAAa,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,OAAO,OAAO,mCAAkB,OAAO,KAAK;AAAA,MAC1G,QAAQ;AAAA,QACN,CAAC,4BAAW,GAAG;AAAA,UACb,mCAAkB,KAAK;AAAA,UACvB,mCAAkB,OAAO;AAAA,UACzB,mCAAkB,OAAO;AAAA,UACzB,mCAAkB,QAAQ;AAAA,UAC1B,mCAAkB,UAAU;AAAA,QAC9B;AAAA,MACF;AAAA,MACA,UAAU;AAAA,QACR,CAAC,6BAAY,GAAG,CAAC,mCAAkB,OAAO,OAAO,mCAAkB,OAAO,OAAO,mCAAkB,KAAK,KAAK;AAAA,MAC/G;AAAA,MACA,kBAAkB,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,OAAO,KAAK;AAAA,MAC/E,gBAAgB,CAAC,mCAAkB,KAAK,OAAO,mCAAkB,OAAO,KAAK;AAAA,IAC/E;AAAA,EACF;AACF;AAEA,IAAM,mBAAmB;AAAA,EACvB,GAAG;AAAA,EACH,MAAM;AAAA,IACJ,GAAG;AAAA,IACH,MAAM;AAAA,IACN,aAAa;AAAA,IACb,UAAU;AAAA,IACV,eAAe;AAAA,MACb,GAAG;AAAA,MACH,QAAQ,EAAE,WAAW,CAAC,mCAAkB,KAAK,KAAK,EAAE;AAAA,MACpD,UAAU,EAAE,KAAK,CAAC,mCAAkB,KAAK,KAAK,EAAE;AAAA,IAClD;AAAA,EACF;AACF;AAEO,IAAM,gBAAgB,UAAU;AAAA,EACrC,CAAC,MAAM,SAAS;AACd,UAAM,EAAE,MAAM,aAAa,GAAG,cAAc,IAAI;AAChD,QAAI,KAAK,WAAW,MAAM,GAAG;AAC3B,WAAK,IAAI,IAAI;AAAA,QACX,GAAG,iBAAiB,IAAI;AAAA,QACxB,GAAG;AAAA,QACH,UAAU;AAAA,QACV,UAAU;AAAA,QACV,aAAa,iBAAiB,IAAI,EAAE,cAAc,iBAAiB,IAAI,EAAE,cAAc;AAAA,MACzF;AAAA,IACF,OAAO;AACL,YAAM,SAAS,oBAAoB,IAAI,KAAK,CAAC;AAC7C,WAAK,IAAI,IAAI;AAAA,QACX,GAAG;AAAA,QACH,GAAG;AAAA,QACH,GAAG;AAAA,QACH;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EACA,EAAE,GAAG,iBAAiB;AACxB;AAEO,IAAM,yBAAyB,eAAe,OAAO,CAAC,MAAM,QAAQ;AACzE,QAAM,SAAS,uCAAsB,IAAI,IAAI,GAAG,UAAU,CAAC;AAC3D,OAAK,IAAI,IAAI,IAAI;AAAA,IACf,GAAG;AAAA,IACH,QAAQ;AAAA,MACN,GAAG;AAAA,MACH,GAAG;AAAA,IACL;AAAA,EACF;AACA,SAAO;AACT,GAAG,CAAC,CAAC;;;ACz3BL,yBAAyB;AACzB,8BAA6B;AAG7B,oBAA2C;AAI3C,mBAAgC;AAChC,IAAAC,gBAAkD;AAClD,oBAAuB;;;ACXvB,IAAM,UAAU;AAAA,EACd,QAAQ;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,SAAS;AAAA,IACP,mBAAmB;AAAA,EACrB;AACF;AAEO,IAAM,QAAQ;AAAA,EACnB;AACF;;;AD0BQ;AAPD,IAAM,YAAQ,2BAAY,KAAK;;;AFgHtC,+BAAc,mCA5Jd;AAqJQ,IAAAC,sBAAA;AAvHR,sBAAO,0BAAsB,8BAAiB,EAAE,eAAe,KAAK,CAAC,CAAC;AAE/D,IAAM,gBAAgB;AAEtB,IAAM,sBAAwH;AAAA,EACnI,OAAO,kBAAG,GAAG;AAAA,EACb,QAAQ,EAAE,kBAAkB,MAAM;AAAA,EAAC,GAAG,qBAAqB,MAAM;AAAA,EAAC,EAAE;AACtE;AAEA,IAAM,wBAAwB,OAAO;AACrC,IAAM,oBAAoB,OAAO;AACjC,IAAM,0BAA0B,OAAO;AAEvC,kBAAG,KAAK,QAAQ,OAAO,EAAE,IAAI,MAAM,YAAY,EAAE;AAEjD,IAAM,UAAU,CAAC;AACjB,OAAO,kBAAkB,UAAU,aAAa,kBAAG,GAAG;AAE/C,IAAM,YAAY,YAAY;AAInC,SAAO,OAAO;AACd,SAAO,WAAW;AAAA,IAChB,GAAG;AAAA,IACH,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,QAAQ,kBAAG,GAAG;AAAA,IACd,SAAS,kBAAG,GAAG;AAAA,IACf,QAAQ,kBAAG,GAAG;AAAA,EAChB;AACA,SAAO,OAAO;AACd,SAAO,iBAAiB;AAAA,IACtB,GAAG;AAAA,IACH,SAAS,kBAAG,GAAG,kBAAG;AAAA,IAClB,SAAS,kBAAG,GAAG;AAAA,IACf,YAAY,kBAAG,GAAG;AAAA,EACpB;AACA,SAAO,OAAO;AACd,SAAO,eAAe;AAAA,IACpB,GAAG;AAAA,IACH,SAAS,kBAAG,GAAG,UAAQ;AACrB,UAAI,SAAS,OAAO;AAClB,eAAO,KAAK,UAAU,EAAE,MAAiB,CAAC;AAAA,MAC5C;AACA,aAAO,QAAQ,IAAI;AAAA,IACrB,CAAC;AAAA,IACD,SAAS,kBAAG,GAAG,UAAQ,QAAQ,IAAI,CAAC;AAAA,IACpC,YAAY,kBAAG,GAAG;AAAA,EACpB;AACA,SAAO,qBAAqB;AAC5B,SAAO,MAAM;AACb,SAAO,kBAAkB,kBAAG,GAAG,EAAE,mBAAmB,WAAY;AAC9D,WAAO;AAAA,EACT,CAAC;AACD,SAAO,iBAAiB;AACxB,SAAO,iBAAiB,kBAAG,GAAG,EAAE,mBAAmB,WAAY;AAC7D,WAAO;AAAA,MACL,SAAS,kBAAG,GAAG;AAAA,MACf,WAAW,kBAAG,GAAG;AAAA,MACjB,YAAY,kBAAG,GAAG;AAAA,IACpB;AAAA,EACF,CAAC;AACD,SAAO,oBAAoB,OAAO;AAAA,IAChC,aAAa,MAAM;AAAA,IAAC;AAAA,IACpB,qBAAqB,MAAM;AAAA,IAAC;AAAA,IAC5B,mBAAmB,MAAM;AAAA,IAAC;AAAA,EAC5B;AAEA,SAAO,eAAe,WAAW,cAAc,EAAE,OAAO,QAAQ,UAAU,KAAK,CAAC;AAChF,QAAM,2BAA2B,WAAY;AAC3C,WAAO;AAAA,MACL,SAAS,kBAAG,GAAG;AAAA,MACf,YAAY,kBAAG,GAAG;AAAA,IACpB;AAAA,EACF;AACA,SAAO,SAAS,kBAAG,GAAG;AACtB,SAAO,uBAAuB,kBAAG,GAAG,EAAE,mBAAmB,wBAAwB;AACjF,oBAAG,MAAM,cAAAC,SAAO,WAAW,EAAE,mBAAmB,cAAAA,QAAM,eAAe;AAGrE,QAAM,QAAQ,WAAW;AAEzB,aAAW,OAAO;AAAA,IAChB,GAAG,WAAW;AAAA,EAChB;AAEA,oBAAG,WAAW,QAAQ;AAAA,IACpB,qBAAqB,kBAAG,oBAAoB,KAAK,iBAAE;AAAA,EACrD,CAAC;AACD,SAAO,MAAM,MAAM,WAAW,OAAO;AACvC;AAEO,IAAM,aAAa,MAAM;AAC9B,oBAAG,cAAc,EAAE,KAAK,SAAS,CAAC;AAClC,oBAAG,cAAc,QAAQ;AAC3B;AAEO,IAAM,YAAY,YAAY;AACnC,6BAAQ;AACR,oBAAG,qBAAqB;AACxB,oBAAG,cAAc;AACnB;AAEO,IAAM,WAAW,YAAY;AAElC,SAAO,eAAe;AACtB,SAAO,WAAW;AAClB,SAAO,iBAAiB;AACxB,gBAAAA,QAAM,UAAU,YAAY;AAC5B,oBAAG,iBAAiB;AACtB;AAEA,IAAM,eAAe,CAAC,IAAI,UAAU,CAAC,MAAM;AACzC,QAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,gBAAgB,EAAE,OAAkB,WAAW,OAAU,EAAE,EAAE,GAAG,GAAG,UAAU,IAAI;AACrH,QAAM,QAAQ,QAAQ,aAAS,+BAAe,EAAE,eAAe,CAAC;AAChE,QAAM,kBAAkB,CAAC,EAAE,SAAS,MAClC,6CAAC,gCAAc,OACb,uDAAC,yCACC,uDAAC,gCAAS,OAAe,UAAS,GACpC,GACF;AAEF,SAAO,EAAE,OAAO,OAAG,sBAAO,IAAI,EAAE,SAAS,iBAAiB,GAAG,UAAU,CAAC,EAAE;AAC5E;","names":["import_react","import_react_redux","import_react_router_dom","import_styles","import_vitest","import_react","import_jsx_runtime","React"]}
@@ -6,6 +6,7 @@ export * from '@testing-library/react';
6
6
 
7
7
  declare const TEST_LOCATION = "localhost";
8
8
  declare const mockAbortController: {
9
+ abort: () => void;
9
10
  signal: {
10
11
  addEventListener: () => void;
11
12
  removeEventListener: () => void;
@@ -6,6 +6,7 @@ export * from '@testing-library/react';
6
6
 
7
7
  declare const TEST_LOCATION = "localhost";
8
8
  declare const mockAbortController: {
9
+ abort: () => void;
9
10
  signal: {
10
11
  addEventListener: () => void;
11
12
  removeEventListener: () => void;
@@ -1,18 +1,19 @@
1
1
  import {
2
- light
3
- } from "./chunk-HRGVXWMH.js";
2
+ theme
3
+ } from "./chunk-RG3ICJW5.js";
4
+ import "./chunk-HRGVXWMH.js";
4
5
  import {
5
6
  menderEnvironment,
6
7
  mockDate,
7
8
  token
8
- } from "./chunk-PZMMQUL4.js";
9
+ } from "./chunk-CT35JRBC.js";
9
10
 
10
11
  // src/setupTests.tsx
11
12
  import React from "react";
12
13
  import { Provider } from "react-redux";
13
14
  import { MemoryRouter } from "react-router-dom";
14
15
  import { createSerializer } from "@emotion/jest";
15
- import { ThemeProvider, createTheme } from "@mui/material/styles";
16
+ import { ThemeProvider } from "@mui/material/styles";
16
17
  import { yes } from "@northern.tech/utils/helpers";
17
18
  import { configureStore } from "@reduxjs/toolkit";
18
19
  import { cleanup, render } from "@testing-library/react";
@@ -22,9 +23,12 @@ export * from "@testing-library/react";
22
23
  import { jsx } from "react/jsx-runtime";
23
24
  expect.addSnapshotSerializer(createSerializer({ includeStyles: true }));
24
25
  var TEST_LOCATION = "localhost";
25
- var mockAbortController = { signal: { addEventListener: () => {
26
- }, removeEventListener: () => {
27
- } } };
26
+ var mockAbortController = {
27
+ abort: vi.fn(),
28
+ signal: { addEventListener: () => {
29
+ }, removeEventListener: () => {
30
+ } }
31
+ };
28
32
  var oldWindowLocalStorage = window.localStorage;
29
33
  var oldWindowLocation = window.location;
30
34
  var oldWindowSessionStorage = window.sessionStorage;
@@ -116,7 +120,6 @@ var afterAll = async () => {
116
120
  React.useEffect.mockRestore();
117
121
  vi.unstubAllGlobals();
118
122
  };
119
- var theme = createTheme(light);
120
123
  var customRender = (ui, options = {}) => {
121
124
  const { preloadedState = { users: { currentSession: { token, expiresAt: void 0 } } }, ...remainder } = options;
122
125
  const store = options.store ?? configureStore({ preloadedState });