@northern.tech/testing 0.5.0 → 0.6.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 (56) hide show
  1. package/dist/{chunk-CRMYLM3A.js → chunk-24ZPE7FS.js} +2 -2
  2. package/dist/{chunk-BQWC5XUR.js → chunk-3CBI7S4M.js} +2 -2
  3. package/dist/{chunk-TSEPVEAH.js → chunk-CQTA2RKB.js} +2 -2
  4. package/dist/{chunk-EJBCG5EQ.js → chunk-D3ZH3LQV.js} +2 -2
  5. package/dist/{chunk-QUUHQVEX.js → chunk-JTUHEXXT.js} +2 -2
  6. package/dist/{chunk-YFZT7CID.js → chunk-PZMMQUL4.js} +3 -3
  7. package/dist/chunk-PZMMQUL4.js.map +1 -0
  8. package/dist/chunk-RG3ICJW5.js +34 -0
  9. package/dist/chunk-RG3ICJW5.js.map +1 -0
  10. package/dist/{chunk-ISTNP33N.js → chunk-WFVQV6M5.js} +2 -2
  11. package/dist/mockData.cjs +2 -2
  12. package/dist/mockData.cjs.map +1 -1
  13. package/dist/mockData.d.cts +6 -2
  14. package/dist/mockData.d.ts +6 -2
  15. package/dist/mockData.js +1 -1
  16. package/dist/requestHandlers/deploymentHandlers.cjs +2 -2
  17. package/dist/requestHandlers/deploymentHandlers.cjs.map +1 -1
  18. package/dist/requestHandlers/deploymentHandlers.js +2 -2
  19. package/dist/requestHandlers/deviceHandlers.cjs +2 -2
  20. package/dist/requestHandlers/deviceHandlers.cjs.map +1 -1
  21. package/dist/requestHandlers/deviceHandlers.js +2 -2
  22. package/dist/requestHandlers/monitorHandlers.cjs +2 -2
  23. package/dist/requestHandlers/monitorHandlers.cjs.map +1 -1
  24. package/dist/requestHandlers/monitorHandlers.js +2 -2
  25. package/dist/requestHandlers/organizationHandlers.cjs +2 -2
  26. package/dist/requestHandlers/organizationHandlers.cjs.map +1 -1
  27. package/dist/requestHandlers/organizationHandlers.js +2 -2
  28. package/dist/requestHandlers/releaseHandlers.cjs +2 -2
  29. package/dist/requestHandlers/releaseHandlers.cjs.map +1 -1
  30. package/dist/requestHandlers/releaseHandlers.js +2 -2
  31. package/dist/requestHandlers/requestHandlers.cjs +2 -2
  32. package/dist/requestHandlers/requestHandlers.cjs.map +1 -1
  33. package/dist/requestHandlers/requestHandlers.js +7 -7
  34. package/dist/requestHandlers/userHandlers.cjs +2 -2
  35. package/dist/requestHandlers/userHandlers.cjs.map +1 -1
  36. package/dist/requestHandlers/userHandlers.js +2 -2
  37. package/dist/setupTests.cjs +60 -46
  38. package/dist/setupTests.cjs.map +1 -1
  39. package/dist/setupTests.d.cts +1 -0
  40. package/dist/setupTests.d.ts +1 -0
  41. package/dist/setupTests.js +11 -8
  42. package/dist/setupTests.js.map +1 -1
  43. package/dist/utils.cjs +37 -7
  44. package/dist/utils.cjs.map +1 -1
  45. package/dist/utils.d.cts +67 -1
  46. package/dist/utils.d.ts +67 -1
  47. package/dist/utils.js +9 -13
  48. package/dist/utils.js.map +1 -1
  49. package/package.json +1 -1
  50. package/dist/chunk-YFZT7CID.js.map +0 -1
  51. /package/dist/{chunk-CRMYLM3A.js.map → chunk-24ZPE7FS.js.map} +0 -0
  52. /package/dist/{chunk-BQWC5XUR.js.map → chunk-3CBI7S4M.js.map} +0 -0
  53. /package/dist/{chunk-TSEPVEAH.js.map → chunk-CQTA2RKB.js.map} +0 -0
  54. /package/dist/{chunk-EJBCG5EQ.js.map → chunk-D3ZH3LQV.js.map} +0 -0
  55. /package/dist/{chunk-QUUHQVEX.js.map → chunk-JTUHEXXT.js.map} +0 -0
  56. /package/dist/{chunk-ISTNP33N.js.map → chunk-WFVQV6M5.js.map} +0 -0
@@ -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: '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: '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 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":"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","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-YFZT7CID.js";
9
+ } from "./chunk-PZMMQUL4.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 });
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/setupTests.tsx"],"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"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/setupTests.tsx"],"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"],"mappings":"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","names":[]}
package/dist/utils.cjs CHANGED
@@ -17,25 +17,55 @@ var __copyProps = (to, from, except, desc) => {
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
19
 
20
- // src/utils.ts
20
+ // src/utils.tsx
21
21
  var utils_exports = {};
22
22
  __export(utils_exports, {
23
- selectMaterialUiSelectOption: () => selectMaterialUiSelectOption
23
+ renderWithRouter: () => renderWithRouter,
24
+ selectMaterialUiSelectOption: () => selectMaterialUiSelectOption,
25
+ theme: () => theme
24
26
  });
25
27
  module.exports = __toCommonJS(utils_exports);
28
+ var import_react_redux = require("react-redux");
29
+ var import_react_router_dom = require("react-router-dom");
30
+ var import_styles = require("@mui/material/styles");
26
31
  var import_react = require("@testing-library/react");
32
+ var import_react2 = require("@testing-library/react");
27
33
  var import_vitest = require("vitest");
34
+
35
+ // src/theme/light.ts
36
+ var palette = {
37
+ border: {
38
+ main: "#e3e3e3"
39
+ },
40
+ tooltip: {
41
+ tierTipBackground: "#f7fafb"
42
+ }
43
+ };
44
+ var light = {
45
+ palette
46
+ };
47
+
48
+ // src/utils.tsx
49
+ var import_jsx_runtime = require("react/jsx-runtime");
28
50
  var selectMaterialUiSelectOption = async (element, optionText, user) => {
29
51
  const selectButton = element.parentNode.querySelector("[role=combobox]");
30
- await (0, import_react.act)(async () => await user.click(selectButton));
31
- const listbox = (0, import_react.queryByRole)(document.documentElement, "listbox");
32
- const listItem = (0, import_react.within)(listbox).getByText(optionText);
52
+ await (0, import_react2.act)(async () => await user.click(selectButton));
53
+ const listbox = (0, import_react2.queryByRole)(document.documentElement, "listbox");
54
+ const listItem = (0, import_react2.within)(listbox).getByText(optionText);
33
55
  await user.click(listItem);
34
- await (0, import_react.waitFor)(() => (0, import_vitest.expect)((0, import_react.queryByRole)(document.documentElement, "listbox")).not.toBeInTheDocument());
56
+ await (0, import_react2.waitFor)(() => (0, import_vitest.expect)((0, import_react2.queryByRole)(document.documentElement, "listbox")).not.toBeInTheDocument());
35
57
  return Promise.resolve();
36
58
  };
59
+ var theme = (0, import_styles.createTheme)(light);
60
+ var renderWithRouter = (ui, { route = "/", preloadedState } = {}) => {
61
+ const store = getConfiguredStore({ preloadedState });
62
+ const Wrapper = ({ children }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_styles.ThemeProvider, { theme, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_router_dom.MemoryRouter, { initialEntries: [route], children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_redux.Provider, { store, children }) }) });
63
+ return { store, ...(0, import_react.render)(ui, { wrapper: Wrapper }) };
64
+ };
37
65
  // Annotate the CommonJS export names for ESM import in node:
38
66
  0 && (module.exports = {
39
- selectMaterialUiSelectOption
67
+ renderWithRouter,
68
+ selectMaterialUiSelectOption,
69
+ theme
40
70
  });
41
71
  //# sourceMappingURL=utils.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils.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 { act, queryByRole, waitFor, within } from '@testing-library/react';\nimport { expect } from 'vitest';\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"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,mBAAkD;AAClD,oBAAuB;AAEhB,IAAM,+BAA+B,OAAO,SAAS,YAAY,SAAS;AAE/E,QAAM,eAAe,QAAQ,WAAW,cAAc,iBAAiB;AAEvE,YAAM,kBAAI,YAAY,MAAM,KAAK,MAAM,YAAY,CAAC;AAEpD,QAAM,cAAU,0BAAY,SAAS,iBAAiB,SAAS;AAE/D,QAAM,eAAW,qBAAO,OAAQ,EAAE,UAAU,UAAU;AACtD,QAAM,KAAK,MAAM,QAAQ;AAEzB,YAAM,sBAAQ,UAAM,0BAAO,0BAAY,SAAS,iBAAiB,SAAS,CAAC,EAAE,IAAI,kBAAkB,CAAC;AACpG,SAAO,QAAQ,QAAQ;AACzB;","names":[]}
1
+ {"version":3,"sources":["../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 { 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;AAeA,yBAAyB;AACzB,8BAA6B;AAG7B,oBAA2C;AAI3C,mBAAgC;AAChC,IAAAA,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;AAtBD,IAAM,+BAA+B,OAAO,SAAS,YAAY,SAAS;AAE/E,QAAM,eAAe,QAAQ,WAAW,cAAc,iBAAiB;AAEvE,YAAM,mBAAI,YAAY,MAAM,KAAK,MAAM,YAAY,CAAC;AAEpD,QAAM,cAAU,2BAAY,SAAS,iBAAiB,SAAS;AAE/D,QAAM,eAAW,sBAAO,OAAQ,EAAE,UAAU,UAAU;AACtD,QAAM,KAAK,MAAM,QAAQ;AAEzB,YAAM,uBAAQ,UAAM,0BAAO,2BAAY,SAAS,iBAAiB,SAAS,CAAC,EAAE,IAAI,kBAAkB,CAAC;AACpG,SAAO,QAAQ,QAAQ;AACzB;AAEO,IAAM,YAAQ,2BAAY,KAAK;AAE/B,IAAM,mBAAmB,CAAC,IAAwB,EAAE,QAAQ,KAAK,eAAe,IAAI,CAAC,MAAM;AAChG,QAAM,QAAQ,mBAAmB,EAAE,eAAe,CAAC;AACnD,QAAM,UAAU,CAAC,EAAE,SAAS,MAC1B,4CAAC,+BAAc,OACb,sDAAC,wCAAa,gBAAgB,CAAC,KAAK,GAClC,sDAAC,+BAAS,OAAe,UAAS,GACpC,GACF;AAEF,SAAO,EAAE,OAAO,OAAG,qBAAO,IAAI,EAAE,SAAS,QAAQ,CAAC,EAAE;AACtD;","names":["import_react"]}
package/dist/utils.d.cts CHANGED
@@ -1,3 +1,69 @@
1
+ import * as _testing_library_dom from '@testing-library/dom';
2
+ import * as pretty_format from 'pretty-format';
3
+ import * as react_dom_client from 'react-dom/client';
4
+ import * as _mui_material_styles from '@mui/material/styles';
5
+ import React from 'react';
6
+
1
7
  declare const selectMaterialUiSelectOption: (element: any, optionText: any, user: any) => Promise<void>;
8
+ declare const theme: _mui_material_styles.Theme;
9
+ declare const renderWithRouter: (ui: React.ReactElement, { route, preloadedState }?: {
10
+ route?: string | undefined;
11
+ }) => {
12
+ container: HTMLElement;
13
+ baseElement: HTMLElement;
14
+ debug: (baseElement?: react_dom_client.Container | (Element | Document) | Array<react_dom_client.Container | (Element | Document)> | undefined, maxLength?: number | undefined, options?: pretty_format.OptionsReceived | undefined) => void;
15
+ rerender: (ui: React.ReactNode) => void;
16
+ unmount: () => void;
17
+ asFragment: () => DocumentFragment;
18
+ getByLabelText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined) => HTMLElement;
19
+ getAllByLabelText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined) => HTMLElement[];
20
+ queryByLabelText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined) => HTMLElement | null;
21
+ queryAllByLabelText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined) => HTMLElement[];
22
+ findByLabelText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement>;
23
+ findAllByLabelText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement[]>;
24
+ getByPlaceholderText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement;
25
+ getAllByPlaceholderText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
26
+ queryByPlaceholderText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement | null;
27
+ queryAllByPlaceholderText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
28
+ findByPlaceholderText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement>;
29
+ findAllByPlaceholderText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement[]>;
30
+ getByText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined) => HTMLElement;
31
+ getAllByText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined) => HTMLElement[];
32
+ queryByText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined) => HTMLElement | null;
33
+ queryAllByText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined) => HTMLElement[];
34
+ findByText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement>;
35
+ findAllByText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.SelectorMatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement[]>;
36
+ getByAltText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement;
37
+ getAllByAltText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
38
+ queryByAltText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement | null;
39
+ queryAllByAltText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
40
+ findByAltText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement>;
41
+ findAllByAltText: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement[]>;
42
+ getByTitle: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement;
43
+ getAllByTitle: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
44
+ queryByTitle: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement | null;
45
+ queryAllByTitle: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
46
+ findByTitle: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement>;
47
+ findAllByTitle: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement[]>;
48
+ getByDisplayValue: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement;
49
+ getAllByDisplayValue: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
50
+ queryByDisplayValue: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement | null;
51
+ queryAllByDisplayValue: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
52
+ findByDisplayValue: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement>;
53
+ findAllByDisplayValue: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement[]>;
54
+ getByRole: (role: _testing_library_dom.ByRoleMatcher, options?: _testing_library_dom.ByRoleOptions | undefined) => HTMLElement;
55
+ getAllByRole: (role: _testing_library_dom.ByRoleMatcher, options?: _testing_library_dom.ByRoleOptions | undefined) => HTMLElement[];
56
+ queryByRole: (role: _testing_library_dom.ByRoleMatcher, options?: _testing_library_dom.ByRoleOptions | undefined) => HTMLElement | null;
57
+ queryAllByRole: (role: _testing_library_dom.ByRoleMatcher, options?: _testing_library_dom.ByRoleOptions | undefined) => HTMLElement[];
58
+ findByRole: (role: _testing_library_dom.ByRoleMatcher, options?: _testing_library_dom.ByRoleOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement>;
59
+ findAllByRole: (role: _testing_library_dom.ByRoleMatcher, options?: _testing_library_dom.ByRoleOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement[]>;
60
+ getByTestId: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement;
61
+ getAllByTestId: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
62
+ queryByTestId: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement | null;
63
+ queryAllByTestId: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined) => HTMLElement[];
64
+ findByTestId: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement>;
65
+ findAllByTestId: (id: _testing_library_dom.Matcher, options?: _testing_library_dom.MatcherOptions | undefined, waitForElementOptions?: _testing_library_dom.waitForOptions | undefined) => Promise<HTMLElement[]>;
66
+ store: any;
67
+ };
2
68
 
3
- export { selectMaterialUiSelectOption };
69
+ export { renderWithRouter, selectMaterialUiSelectOption, theme };