From 33bfc4fb1395ad21a62a5ebb75d3daabf3ffde34 Mon Sep 17 00:00:00 2001 From: jwu-fisker Date: Tue, 8 Nov 2022 16:49:10 -0800 Subject: [PATCH] Revert "CEC-2977 Filter portal access based on auth provider (#231)" This reverts commit f2f046968eb722f57f504232d9b86287ff2fdfd8. --- .env.cec-prd | 3 - .env.dev | 5 +- .env.local | 2 - .env.prd | 3 - .env.stg | 5 +- .env.template | 5 +- package-lock.json | 77 +-- package.json | 10 +- src/components/App/App.test.js | 30 +- .../App/__snapshots__/App.test.js.snap | 476 +++--------------- src/components/CANFilter/Add/index.test.jsx | 5 +- .../Table/__snapshots__/index.test.jsx.snap | 51 ++ src/components/CANFilter/Table/index.jsx | 69 ++- src/components/CANFilter/Table/index.test.jsx | 4 +- .../CANFilter/Update/index.test.jsx | 4 +- src/components/Cars/Add/index.test.jsx | 4 +- .../List/__snapshots__/index.test.jsx.snap | 17 +- src/components/Cars/List/index.jsx | 62 +-- src/components/Cars/List/index.test.jsx | 4 +- .../Cars/Status/CANFiltersTab.test.jsx | 4 +- .../Cars/Status/CANSignalsTab.test.jsx | 4 +- .../Cars/Status/CarUpdatesTab.test.jsx | 4 +- .../Details/__snapshots__/index.test.jsx.snap | 17 + src/components/Cars/Status/Details/index.jsx | 109 ++-- .../Cars/Status/Details/index.test.jsx | 4 +- .../Cars/Status/DetailsTab.test.jsx | 4 +- .../Cars/Status/DigitalTwinTab.test.jsx | 4 +- src/components/Cars/Status/FleetsTab.test.jsx | 4 +- .../Cars/Status/RemoteCommandsTab.test.jsx | 4 +- .../__snapshots__/CANFiltersTab.test.jsx.snap | 51 ++ .../__snapshots__/DetailsTab.test.jsx.snap | 17 + .../Status/__snapshots__/index.test.jsx.snap | 22 + src/components/Cars/Status/index.jsx | 76 ++- src/components/Cars/Status/index.test.jsx | 4 +- src/components/Cars/Update/index.test.jsx | 4 +- src/components/Contexts/UserContext.jsx | 6 +- .../Contexts/__mocks__/UserContext.jsx | 6 +- .../CarUpdateStatusTable.test.jsx | 4 +- .../Controls/CarUpdatesTable/index.jsx | 30 +- .../RoleWrap/__snapshots__/index.test.js.snap | 23 - src/components/Controls/RoleWrap/index.js | 19 - .../Controls/RoleWrap/index.test.js | 70 --- src/components/Fleets/Add/index.test.jsx | 4 +- .../Status/CANFilters/Add/index.test.jsx | 4 +- .../Table/__snapshots__/index.test.jsx.snap | 51 ++ .../Fleets/Status/CANFilters/Table/index.jsx | 75 ++- .../Status/CANFilters/Table/index.test.jsx | 4 +- .../Status/CANFilters/Update/index.test.jsx | 4 +- .../Fleets/Status/CANFiltersTab.test.jsx | 4 +- .../Fleets/Status/Details/index.test.jsx | 4 +- .../Fleets/Status/DetailsTab.test.jsx | 4 +- .../Fleets/Status/Vehicles/Add/index.test.jsx | 4 +- .../Table/__snapshots__/index.test.jsx.snap | 63 ++- .../Fleets/Status/Vehicles/Table/index.jsx | 71 +-- .../Status/Vehicles/Table/index.test.jsx | 4 +- .../Fleets/Status/VehiclesTab.test.jsx | 4 +- .../__snapshots__/CANFiltersTab.test.jsx.snap | 51 ++ .../__snapshots__/VehiclesTab.test.jsx.snap | 63 ++- src/components/Fleets/Status/index.test.jsx | 4 +- src/components/Fleets/Table/index.test.jsx | 4 +- src/components/Fleets/Update/index.test.jsx | 4 +- src/components/Layouts/SideMenu.jsx | 63 ++- src/components/Layouts/SideMenu.test.jsx | 21 +- .../__snapshots__/SideMenu.test.jsx.snap | 85 ---- .../Manifest/Details/index.test.jsx | 4 +- src/components/Manifest/List/index.jsx | 57 +-- src/components/Manifest/Status/index.jsx | 43 +- src/components/Manifest/Update/index.jsx | 4 +- src/components/Manifest/Update/index.test.jsx | 6 +- src/components/Routes/AuthRoute.jsx | 7 +- src/components/Routes/SiteRoutes.jsx | 77 +-- .../Suppliers/Details/index.test.js | 4 +- src/components/Suppliers/List/index.test.jsx | 4 +- src/utils/roles.js | 63 +-- src/utils/roles.test.js | 30 +- src/utils/testing.js | 8 - 76 files changed, 912 insertions(+), 1316 deletions(-) delete mode 100644 src/components/Controls/RoleWrap/__snapshots__/index.test.js.snap delete mode 100644 src/components/Controls/RoleWrap/index.js delete mode 100644 src/components/Controls/RoleWrap/index.test.js diff --git a/.env.cec-prd b/.env.cec-prd index 10aaab8..b9a9c92 100644 --- a/.env.cec-prd +++ b/.env.cec-prd @@ -3,6 +3,3 @@ REACT_APP_CERT_SERVICE_URL=https://gw.cec-prd.fiskerinc.com/certificate REACT_APP_UPLOAD_SERVICE_URL=https://gw.cec-prd.fiskerinc.com/ota_update REACT_APP_AUTH_CALLBACK_URL=https://ota-admin.cec-prd.fiskerinc.com REACT_APP_SUPERSET_URL=https://superset.cec-prd.fiskerinc.com -REACT_APP_SUPERSET_KEYS_LIST=0b01ac72-9ef4-4a5f-be34-b1ac0bf972cc -REACT_APP_MAGNA_PROVIDER=Magna -REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe diff --git a/.env.dev b/.env.dev index 53cdbe7..fb00db4 100644 --- a/.env.dev +++ b/.env.dev @@ -2,7 +2,4 @@ REACT_APP_CERT_SERVICE_URL=https://dev-gw.cloud.fiskerinc.com/certificate REACT_APP_AUTH_SERVICE_URL=https://dev-gw.cloud.fiskerinc.com/compute_auth REACT_APP_UPLOAD_SERVICE_URL=https://dev-gw.cloud.fiskerinc.com/ota_update REACT_APP_AUTH_CALLBACK_URL=https://dev-ota-admin.cloud.fiskerinc.com -REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com -REACT_APP_SUPERSET_KEYS_LIST=0b01ac72-9ef4-4a5f-be34-b1ac0bf972cc -REACT_APP_MAGNA_PROVIDER=AzureAD -REACT_APP_MAGNA_GROUP_ID=efcc3025-e2d8-4212-8227-805c7be39d2c +REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com \ No newline at end of file diff --git a/.env.local b/.env.local index b19c9ac..8647c32 100644 --- a/.env.local +++ b/.env.local @@ -4,5 +4,3 @@ REACT_APP_UPLOAD_SERVICE_URL=http://localhost/ota_update REACT_APP_AUTH_CALLBACK_URL=http://localhost:3000 REACT_APP_SUPERSET_URL=https://dev-superset-new.cloud.fiskerinc.com REACT_APP_SUPERSET_KEYS_LIST=0b01ac72-9ef4-4a5f-be34-b1ac0bf972cc -REACT_APP_MAGNA_PROVIDER=AzureAD -REACT_APP_MAGNA_GROUP_ID=efcc3025-e2d8-4212-8227-805c7be39d2c \ No newline at end of file diff --git a/.env.prd b/.env.prd index c48fb52..d8ce7fe 100644 --- a/.env.prd +++ b/.env.prd @@ -3,6 +3,3 @@ REACT_APP_CERT_SERVICE_URL=https://gw.cloud.fiskerinc.com/certificate REACT_APP_UPLOAD_SERVICE_URL=https://gw.cloud.fiskerinc.com/ota_update REACT_APP_AUTH_CALLBACK_URL=https://ota-admin.cloud.fiskerinc.com REACT_APP_SUPERSET_URL=https://superset.cloud.fiskerinc.com -REACT_APP_SUPERSET_KEYS_LIST=0b01ac72-9ef4-4a5f-be34-b1ac0bf972cc -REACT_APP_MAGNA_PROVIDER=Magna -REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe diff --git a/.env.stg b/.env.stg index 6502211..8d545cf 100644 --- a/.env.stg +++ b/.env.stg @@ -2,7 +2,4 @@ REACT_APP_AUTH_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/compute_auth REACT_APP_CERT_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/certificate REACT_APP_UPLOAD_SERVICE_URL=https://stg-gw.cloud.fiskerinc.com/ota_update REACT_APP_AUTH_CALLBACK_URL=https://stg-ota-admin.cloud.fiskerinc.com -REACT_APP_SUPERSET_URL=https://stg-superset.cloud.fiskerinc.com -REACT_APP_SUPERSET_KEYS_LIST=0b01ac72-9ef4-4a5f-be34-b1ac0bf972cc -REACT_APP_MAGNA_PROVIDER=AzureAD -REACT_APP_MAGNA_GROUP_ID=efcc3025-e2d8-4212-8227-805c7be39d2c +REACT_APP_SUPERSET_URL=https://stg-superset.cloud.fiskerinc.com \ No newline at end of file diff --git a/.env.template b/.env.template index fd82389..eb5a173 100644 --- a/.env.template +++ b/.env.template @@ -2,7 +2,4 @@ REACT_APP_AUTH_SERVICE_URL=http://localhost/compute_auth REACT_APP_UPLOAD_SERVICE_URL=http://localhost/ota_update REACT_APP_AUTH_CALLBACK_URL=http://localhost:3000 REACT_APP_SUPERSET_URL=https://dev-superset.cloud.fiskerinc.com -REACT_APP_CERT_SERVICE_URL=http://localhost/certificate -REACT_APP_SUPERSET_KEYS_LIST=0b01ac72-9ef4-4a5f-be34-b1ac0bf972cc -REACT_APP_MAGNA_PROVIDER=Magna -REACT_APP_MAGNA_GROUP_ID=68273225-9da4-4fa7-aea5-38e16ec471fe +REACT_APP_CERT_SERVICE_URL=http://localhost/certificate \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f858b27..7211f78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,8 +37,7 @@ "react-router-hash-link": "^2.4.3", "react-scripts": "5.0.0", "usehooks-ts": "^2.7.1", - "web-vitals": "^2.1.4", - "webpack": "^5.74.0" + "web-vitals": "^2.1.4" }, "devDependencies": { "react-test-renderer": "^17.0.2" @@ -5608,9 +5607,9 @@ } }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "bin": { "acorn": "bin/acorn" }, @@ -8029,9 +8028,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", + "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -11603,6 +11602,11 @@ "node": ">=4" } }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -16631,9 +16635,9 @@ } }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -16664,33 +16668,33 @@ } }, "node_modules/webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", + "acorn": "^8.4.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", + "enhanced-resolve": "^5.9.2", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", + "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", + "watchpack": "^2.3.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -21516,9 +21520,9 @@ } }, "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==" }, "acorn-globals": { "version": "6.0.0", @@ -23300,9 +23304,9 @@ "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, "enhanced-resolve": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.10.0.tgz", - "integrity": "sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==", + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.9.2.tgz", + "integrity": "sha512-GIm3fQfwLJ8YZx2smuHpBKkXC1yOk+OBEmKckVyL0i/ea8mqDEykK3ld5dgH1QYPNyT/lIllxV2LULnxCHaHkA==", "requires": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -25882,6 +25886,11 @@ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -29488,9 +29497,9 @@ } }, "watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "requires": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -29515,33 +29524,33 @@ "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" }, "webpack": { - "version": "5.74.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.74.0.tgz", - "integrity": "sha512-A2InDwnhhGN4LYctJj6M1JEaGL7Luj6LOmyBHjcI8529cm5p6VXiTIW2sn6ffvEAKmveLzvu4jrihwXtPojlAA==", + "version": "5.70.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.70.0.tgz", + "integrity": "sha512-ZMWWy8CeuTTjCxbeaQI21xSswseF2oNOwc70QSKNePvmxE7XW36i7vpBMYZFAUHPwQiEbNGCEYIOOlyRbdGmxw==", "requires": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/wasm-edit": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", + "acorn": "^8.4.1", "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", + "enhanced-resolve": "^5.9.2", "es-module-lexer": "^0.9.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", + "json-parse-better-errors": "^1.0.2", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", + "watchpack": "^2.3.1", "webpack-sources": "^3.2.3" }, "dependencies": { diff --git a/package.json b/package.json index 0ab9581..18caa41 100644 --- a/package.json +++ b/package.json @@ -32,8 +32,7 @@ "react-router-hash-link": "^2.4.3", "react-scripts": "5.0.0", "usehooks-ts": "^2.7.1", - "web-vitals": "^2.1.4", - "webpack": "^5.74.0" + "web-vitals": "^2.1.4" }, "scripts": { "start": "env-cmd -f .env.local react-scripts start", @@ -52,10 +51,7 @@ "extends": [ "react-app", "react-app/jest" - ], - "rules": { - "no-console": "warn" - } + ] }, "browserslist": [ ">0.2%", @@ -86,4 +82,4 @@ "lcov" ] } -} +} \ No newline at end of file diff --git a/src/components/App/App.test.js b/src/components/App/App.test.js index 3346d96..24f282c 100644 --- a/src/components/App/App.test.js +++ b/src/components/App/App.test.js @@ -16,7 +16,7 @@ import { waitForElementToBeRemoved, } from "@testing-library/react"; import { setToken } from "../Contexts/UserContext"; -import {TEST_AUTH_OBJECT, TEST_AUTH_OBJECT_FISKER} from "../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../utils/testing"; import App from "."; import addSnapshotSerializer from "../../utils/snapshot"; @@ -35,7 +35,7 @@ const check = async (path, selector, compare) => { let container await act(async () => { container = await renderRoute(path); - }); + }) expect(container.querySelector(selector).innerHTML).toEqual(compare); expect(container).toMatchSnapshot(); }; @@ -117,57 +117,57 @@ describe("App", () => { await check("/page-not-found", "h1", "Page Not Found"); }); it("Route / authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await sleepAndCheck("/", "h6", "Home"); }); it("Route /home authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await sleepAndCheck("/home", "h6", "Home"); }); it("Route /page-not-found authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await check("/page-not-found", "h1", "Page Not Found"); }); it("Route /packages authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await check("/packages", "h6", "Deployments"); }); it("Route /package-status authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await check("/package-status/1", "h6", "Manifest Test Manifest 1.0"); }); it("Route /package-deploy authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await check("/package-deploy/1", "h6", "Deploy Test Manifest 1.0"); }); it("Route /vehicle-add authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await check("/vehicle-add", "h6", "Add Vehicle"); }); it("Route /vehicles authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await check("/vehicles", "h6", "Vehicles"); }); it("Route /vehicle-status authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); await check("/vehicle-status/FISKER123", "h6", "Vehicle FISKER123 Details"); }); it("Route /tools/certificates/add authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); - await sleepAndCheck("/tools/certificates/add", "h6", "Create Certificate"); + setToken(TEST_AUTH_OBJECT); + await check("/tools/certificates/add", "h6", "Create Certificate"); }); it("Route /tools/sms/send authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); - await sleepAndCheck("/tools/sms/send", "h6", "Send SMS"); + setToken(TEST_AUTH_OBJECT); + await check("/tools/sms/send", "h6", "Send SMS"); }); }); diff --git a/src/components/App/__snapshots__/App.test.js.snap b/src/components/App/__snapshots__/App.test.js.snap index 91462b2..4d7e87c 100644 --- a/src/components/App/__snapshots__/App.test.js.snap +++ b/src/components/App/__snapshots__/App.test.js.snap @@ -35,7 +35,7 @@ exports[`App Route / authenticated 1`] = ` - Anvar + John -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • + + + + + @@ -3890,7 +3729,7 @@ exports[`App Route /page-not-found authenticated 1`] = ` - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • - Anvar + John
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • diff --git a/src/components/CANFilter/Add/index.test.jsx b/src/components/CANFilter/Add/index.test.jsx index 7afca84..6bd1813 100644 --- a/src/components/CANFilter/Add/index.test.jsx +++ b/src/components/CANFilter/Add/index.test.jsx @@ -1,5 +1,3 @@ -import {TEST_AUTH_OBJECT_FISKER} from "../../../utils/testing"; - jest.mock("../../Contexts/CANFiltersContext"); jest.mock("../../Contexts/StatusContext"); jest.mock("../../Contexts/UserContext"); @@ -10,6 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { CANFiltersProvider } from "../../Contexts/CANFiltersContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -36,7 +35,7 @@ describe("CANFiltersAdd", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCANFiltersAdd(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/CANFilter/Table/__snapshots__/index.test.jsx.snap b/src/components/CANFilter/Table/__snapshots__/index.test.jsx.snap index 010dd2a..00fb3e3 100644 --- a/src/components/CANFilter/Table/__snapshots__/index.test.jsx.snap +++ b/src/components/CANFilter/Table/__snapshots__/index.test.jsx.snap @@ -250,6 +250,23 @@ exports[`CANFiltersTable Render 1`] = ` /> + + + + + + + + + diff --git a/src/components/CANFilter/Table/index.jsx b/src/components/CANFilter/Table/index.jsx index 5156f0b..9068090 100644 --- a/src/components/CANFilter/Table/index.jsx +++ b/src/components/CANFilter/Table/index.jsx @@ -1,3 +1,5 @@ +import React, { useEffect, useState } from "react"; +import { Link } from 'react-router-dom'; import { Grid, Table, @@ -10,46 +12,46 @@ import { } from "@material-ui/core"; import AddCircleIcon from "@material-ui/icons/AddCircle"; import DeleteIcon from "@material-ui/icons/Delete"; -import EditIcon from "@material-ui/icons/Edit"; +import EditIcon from '@material-ui/icons/Edit'; import clsx from "clsx"; -import React, { useEffect, useState } from "react"; -import { Link } from "react-router-dom"; -import { logger } from "../../../services/monitoring"; -import { hasRole, Permissions } from "../../../utils/roles"; -import { trimIfMoreThan } from "../../../utils/strings"; import { CANFiltersProvider, useCANFiltersContext, } from "../../Contexts/CANFiltersContext"; -import { useStatusContext } from "../../Contexts/StatusContext"; -import { useUserContext } from "../../Contexts/UserContext"; -import SearchField from "../../Controls/SearchField"; import TableHeaderSortable from "../../Table/HeaderSortable"; -import { useLocalStorage } from "../../useLocalStorage"; +import { + useUserContext +} from "../../Contexts/UserContext" +import { useStatusContext } from "../../Contexts/StatusContext"; import useStyles from "../../useStyles"; +import SearchField from "../../Controls/SearchField"; +import { logger } from "../../../services/monitoring"; +import { Roles, hasRole } from "../../../utils/roles"; +import {useLocalStorage} from "../../useLocalStorage"; +import {trimIfMoreThan} from "../../../utils/strings"; const tableColumns = [ { id: "can_id", - label: "CAN ID", + label: "CAN ID" }, { id: "interval", - label: "Interval (ms)", + label: "Interval (ms)" }, { id: "fleet", - label: "Fleet", + label: "Fleet" }, { id: "edge_mask", - label: "Edge mask", + label: "Edge mask" }, { id: "", - label: "Actions", - }, + label: "Actions" + } ]; const PAGE_SIZE = "CAN_FILTER_TABLE_PAGE_SIZE"; @@ -61,16 +63,9 @@ const MainForm = ({ vin }) => { const [pageIndex, setPageIndex] = useState(0); const [orderBy, setOrderBy] = useState("id"); const [order, setOrder] = useState("desc"); - const { getFilters, deleteFilter, filters, totalFilters } = - useCANFiltersContext(); + const { getFilters, deleteFilter, filters, totalFilters } = useCANFiltersContext(); const { setMessage } = useStatusContext(); - const { - token: { - idToken: { jwtToken: token }, - }, - groups, - providers, - } = useUserContext(); + const { token: { idToken: { jwtToken: token } }, groups } = useUserContext(); useEffect(() => { (async () => { @@ -123,7 +118,7 @@ const MainForm = ({ vin }) => { const onDelete = async (can_id) => { try { await deleteFilter(vin, can_id, token); - setMessage(`Deleted ${can_id}`); + setMessage(`Deleted ${can_id}`) } catch (e) { setMessage(e.message); logger.warn(e.stack); @@ -131,24 +126,24 @@ const MainForm = ({ vin }) => { }; const Actions = (row) => { - if (row.fleet != null) { - return; + if(row.fleet != null) { + return } let actions = []; - if (hasRole(groups, Permissions.FiskerCreate, providers)) { + if (hasRole([Roles.CREATE], groups)) { actions.push({ tip: `Update "${row.can_id}"`, link: `/filter-update?vin=${vin}&can_id=${row.can_id}&interval=${row.interval}`, - icon: , + icon: }); } - if (hasRole(groups, Permissions.FiskerDelete, providers)) { + if (hasRole([Roles.DELETE], groups)) { actions.push({ tip: `Delete "${row.can_id}"`, id: row.can_id, - icon: , - }); + icon: + }) } if (actions.length === 0) return ["No actions"]; @@ -182,7 +177,7 @@ const MainForm = ({ vin }) => { - + @@ -201,9 +196,7 @@ const MainForm = ({ vin }) => { {row.fleet} - - {trimIfMoreThan(row.edge_mask, 15, "...")} - + {trimIfMoreThan(row.edge_mask, 15, "...")}{Actions(row)} ))} @@ -226,7 +219,7 @@ const MainForm = ({ vin }) => {
    -
    + ); }; diff --git a/src/components/CANFilter/Table/index.test.jsx b/src/components/CANFilter/Table/index.test.jsx index 2642dc1..40e3102 100644 --- a/src/components/CANFilter/Table/index.test.jsx +++ b/src/components/CANFilter/Table/index.test.jsx @@ -11,7 +11,7 @@ import { BrowserRouter } from "react-router-dom"; import { CANFiltersProvider } from "../../Contexts/CANFiltersContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import {TEST_AUTH_OBJECT_FISKER} from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -37,7 +37,7 @@ describe("CANFiltersTable", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCANFiltersTable(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/CANFilter/Update/index.test.jsx b/src/components/CANFilter/Update/index.test.jsx index a38cb35..e1e264d 100644 --- a/src/components/CANFilter/Update/index.test.jsx +++ b/src/components/CANFilter/Update/index.test.jsx @@ -8,7 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { CANFiltersProvider } from "../../Contexts/CANFiltersContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -34,7 +34,7 @@ describe("CANFiltersUpdate", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCANFiltersUpdate(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Add/index.test.jsx b/src/components/Cars/Add/index.test.jsx index 1b7e753..bb8c506 100644 --- a/src/components/Cars/Add/index.test.jsx +++ b/src/components/Cars/Add/index.test.jsx @@ -8,7 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { VehicleProvider } from "../../Contexts/VehicleContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -36,7 +36,7 @@ describe("VehicleAddForm", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderVehicleAdd(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/List/__snapshots__/index.test.jsx.snap b/src/components/Cars/List/__snapshots__/index.test.jsx.snap index 50c7849..cc2b5f0 100644 --- a/src/components/Cars/List/__snapshots__/index.test.jsx.snap +++ b/src/components/Cars/List/__snapshots__/index.test.jsx.snap @@ -22,7 +22,22 @@ exports[`VehicleTable Render 1`] = ` >
    + > + + + +
    diff --git a/src/components/Cars/List/index.jsx b/src/components/Cars/List/index.jsx index db72783..0dbc101 100644 --- a/src/components/Cars/List/index.jsx +++ b/src/components/Cars/List/index.jsx @@ -1,18 +1,16 @@ +import React, { useEffect, useState } from "react"; import { Checkbox, FormControlLabel, Grid, MenuItem } from "@material-ui/core"; import AddCircleIcon from "@material-ui/icons/AddCircle"; -import clsx from "clsx"; -import React, { useEffect, useState } from "react"; import { Link } from "react-router-dom"; +import clsx from "clsx"; -import { Permissions } from "../../../utils/roles"; -import { useStatusContext } from "../../Contexts/StatusContext"; -import { useUserContext } from "../../Contexts/UserContext"; import { VehicleProvider } from "../../Contexts/VehicleContext"; +import { useUserContext } from "../../Contexts/UserContext"; +import { useStatusContext } from "../../Contexts/StatusContext"; +import useStyles from "../../useStyles"; +import SearchField from "../../Controls/SearchField"; import CarSelectionTable from "../../Controls/CarSelectionTable"; import OptionsDropdown from "../../Controls/OptionsDropdown"; -import { RoleWrap } from "../../Controls/RoleWrap"; -import SearchField from "../../Controls/SearchField"; -import useStyles from "../../useStyles"; const MainForm = () => { const classes = useStyles(); @@ -24,8 +22,6 @@ const MainForm = () => { token: { idToken: { jwtToken: token }, }, - groups, - providers, } = useUserContext(); const handleSearch = (query) => { @@ -34,11 +30,11 @@ const MainForm = () => { const handleOnline = (event) => { setOnline(event.target.checked); - }; + } const handleOnlineHMI = (event) => { setOnlineHMI(event.target.checked); - }; + } useEffect(() => { setTitle("Vehicles"); @@ -50,34 +46,30 @@ const MainForm = () => {
    - - - - - + + + - + - } - label="Only online" - /> + + } label="Only online" /> - - } - label="Only online HMI" - /> + + } label="Only online HMI" /> @@ -87,11 +79,7 @@ const MainForm = () => { classes={classes} token={token} multiSelect={false} - search={{ - search, - online: online ? true : null, - online_hmi: onlineHMI ? true : null, - }} + search={{ search, online: online? true : null, online_hmi: onlineHMI? true : null }} />
    ); diff --git a/src/components/Cars/List/index.test.jsx b/src/components/Cars/List/index.test.jsx index e45d166..08b6335 100644 --- a/src/components/Cars/List/index.test.jsx +++ b/src/components/Cars/List/index.test.jsx @@ -11,7 +11,7 @@ import { BrowserRouter } from "react-router-dom"; import { VehicleProvider } from "../../Contexts/VehicleContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -39,7 +39,7 @@ describe("VehicleTable", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderVehicleTable(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/CANFiltersTab.test.jsx b/src/components/Cars/Status/CANFiltersTab.test.jsx index 518ff0f..f7ac32d 100644 --- a/src/components/Cars/Status/CANFiltersTab.test.jsx +++ b/src/components/Cars/Status/CANFiltersTab.test.jsx @@ -9,7 +9,7 @@ import { render, waitFor } from "@testing-library/react"; import { BrowserRouter } from "react-router-dom"; import { setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import CANFiltersTab from "./CANFiltersTab"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -31,7 +31,7 @@ describe("CANFiltersTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCANFiltersTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/CANSignalsTab.test.jsx b/src/components/Cars/Status/CANSignalsTab.test.jsx index f50b265..2747b69 100644 --- a/src/components/Cars/Status/CANSignalsTab.test.jsx +++ b/src/components/Cars/Status/CANSignalsTab.test.jsx @@ -11,7 +11,7 @@ import { render, waitFor } from "@testing-library/react"; import { BrowserRouter } from "react-router-dom"; import CANSignalsTab from "./CANSignalsTab"; import {setToken} from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import {TEST_AUTH_OBJECT} from "../../../utils/testing"; const renderCANSignalsTab = async () => { const { container } = render( @@ -31,7 +31,7 @@ describe("CANSignalsTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCANSignalsTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/CarUpdatesTab.test.jsx b/src/components/Cars/Status/CarUpdatesTab.test.jsx index 1251721..291be4b 100644 --- a/src/components/Cars/Status/CarUpdatesTab.test.jsx +++ b/src/components/Cars/Status/CarUpdatesTab.test.jsx @@ -11,7 +11,7 @@ import { BrowserRouter } from "react-router-dom"; import { CANFiltersProvider } from "../../Contexts/CANFiltersContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./CarUpdatesTab"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -39,7 +39,7 @@ describe("CarUpdatesTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCarUpdatesTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/Details/__snapshots__/index.test.jsx.snap b/src/components/Cars/Status/Details/__snapshots__/index.test.jsx.snap index bf46c26..d38148b 100644 --- a/src/components/Cars/Status/Details/__snapshots__/index.test.jsx.snap +++ b/src/components/Cars/Status/Details/__snapshots__/index.test.jsx.snap @@ -101,6 +101,23 @@ exports[`VehicleDetailsTab Render 1`] = ` /> + + +
    diff --git a/src/components/Cars/Status/Details/index.jsx b/src/components/Cars/Status/Details/index.jsx index bfb1c77..7692078 100644 --- a/src/components/Cars/Status/Details/index.jsx +++ b/src/components/Cars/Status/Details/index.jsx @@ -1,36 +1,28 @@ -import { Grid, Tooltip } from "@material-ui/core"; -import DeleteIcon from "@material-ui/icons/Delete"; -import EditIcon from "@material-ui/icons/Edit"; -import clsx from "clsx"; import React, { useEffect, useState } from "react"; import { Redirect } from "react-router"; -import { Link } from "react-router-dom"; - -import { logger } from "../../../../services/monitoring"; -import { Permissions } from "../../../../utils/roles"; -import { useStatusContext } from "../../../Contexts/StatusContext"; -import { useUserContext } from "../../../Contexts/UserContext"; +import { Link } from 'react-router-dom'; import { - useVehicleContext, - VehicleProvider -} from "../../../Contexts/VehicleContext"; -import { RoleWrap } from "../../../Controls/RoleWrap"; -import DeleteConfirmation from "../../../DeleteConfirmation"; + Grid, + Tooltip, +} from "@material-ui/core"; +import EditIcon from "@material-ui/icons/Edit" +import DeleteIcon from "@material-ui/icons/Delete"; +import clsx from "clsx"; + +import { useUserContext } from "../../../Contexts/UserContext" +import { useStatusContext } from "../../../Contexts/StatusContext"; import useStyles from "../../../useStyles"; +import { logger } from "../../../../services/monitoring"; +import { useVehicleContext, VehicleProvider } from "../../../Contexts/VehicleContext"; +import DeleteConfirmation from "../../../DeleteConfirmation"; const MainForm = ({ vin }) => { const classes = useStyles(); const { setMessage } = useStatusContext(); const { vehicle, getVehicle, deleteVehicle } = useVehicleContext(); const [redirect, setRedirect] = useState(null); - const [showDeleteModal, setShowDeleteModal] = useState(false); - const { - token: { - idToken: { jwtToken: token }, - }, - groups, - providers, - } = useUserContext(); + const [showDeleteModal, setShowDeleteModal] = useState(false) + const { token: { idToken: { jwtToken: token } } } = useUserContext(); useEffect(() => { (async () => { @@ -48,7 +40,7 @@ const MainForm = ({ vin }) => { const onDelete = async () => { try { await deleteVehicle(vin, token); - setMessage(`Deleted ${vin}`); + setMessage(`Deleted ${vin}`) setRedirect(`/vehicles`); } catch (e) { setMessage(e.message); @@ -64,67 +56,36 @@ const MainForm = ({ vin }) => {
    -

    - VIN: {vin} -

    +

    VIN: {vin}

    {vehicle.log_level != null && ( -

    - Log Level: {vehicle.log_level} -

    +

    Log Level: {vehicle.log_level}

    )}
    {vehicle.canbus && ( CANBus -

    - Enabled: {vehicle.canbus.enabled.toString()} -

    -

    - Max Memory Buffer Size: {vehicle.canbus.max_mem_buffer_size ?? "Default"} -

    -

    - Enabled: {vehicle.canbus.data_logger_enabled.toString()} -

    -

    - Max Disk Buffer Size: {vehicle.canbus.max_disk_buffer_size ?? "Default"} -

    -

    - Filters: {vehicle.canbus.filters ? vehicle.canbus.filters.length : 0} -

    +

    Enabled: {vehicle.canbus.enabled.toString()}

    +

    Max Memory Buffer Size: {vehicle.canbus.max_mem_buffer_size ?? "Default"}

    +

    Enabled: {vehicle.canbus.data_logger_enabled.toString()}

    +

    Max Disk Buffer Size: {vehicle.canbus.max_disk_buffer_size ?? "Default"}

    +

    Filters: {vehicle.canbus.filters ? vehicle.canbus.filters.length : 0}

    )} - - - - - - - - - - setShowDeleteModal(true)}> - - - - + + + + + + + setShowDeleteModal(true)}> + + +
    - setShowDeleteModal(false)} - deleteFunction={onDelete} - /> -
    + setShowDeleteModal(false)} deleteFunction={onDelete}/> +
    ); }; diff --git a/src/components/Cars/Status/Details/index.test.jsx b/src/components/Cars/Status/Details/index.test.jsx index b571949..708c415 100644 --- a/src/components/Cars/Status/Details/index.test.jsx +++ b/src/components/Cars/Status/Details/index.test.jsx @@ -9,7 +9,7 @@ import routeData from "react-router"; import { VehicleProvider } from "../../../Contexts/VehicleContext"; import { StatusProvider } from "../../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER }from "../../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../../utils/snapshot"; @@ -42,7 +42,7 @@ describe("VehicleDetailsTab", () => { }) it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderVehicleDetailsTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/DetailsTab.test.jsx b/src/components/Cars/Status/DetailsTab.test.jsx index 9ed2660..4057a10 100644 --- a/src/components/Cars/Status/DetailsTab.test.jsx +++ b/src/components/Cars/Status/DetailsTab.test.jsx @@ -11,7 +11,7 @@ import { MemoryRouter, Route } from "react-router-dom"; import { VehicleProvider } from "../../Contexts/VehicleContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./DetailsTab"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -41,7 +41,7 @@ describe("DetailsTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderDetailsTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/DigitalTwinTab.test.jsx b/src/components/Cars/Status/DigitalTwinTab.test.jsx index 3e62c6d..aa9c27a 100644 --- a/src/components/Cars/Status/DigitalTwinTab.test.jsx +++ b/src/components/Cars/Status/DigitalTwinTab.test.jsx @@ -10,7 +10,7 @@ import { render, waitFor } from "@testing-library/react"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import DigitalTwinTab from "./DigitalTwinTab"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -34,7 +34,7 @@ describe("DigitalTwinTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderDetailsTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/FleetsTab.test.jsx b/src/components/Cars/Status/FleetsTab.test.jsx index 283f859..58fad88 100644 --- a/src/components/Cars/Status/FleetsTab.test.jsx +++ b/src/components/Cars/Status/FleetsTab.test.jsx @@ -12,7 +12,7 @@ import { BrowserRouter } from "react-router-dom"; import {StatusProvider} from "../../Contexts/StatusContext"; import {VehicleProvider} from "../../Contexts/VehicleContext"; import {setToken, UserProvider} from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import {TEST_AUTH_OBJECT} from "../../../utils/testing"; import addSnapshotSerializer from "../../../utils/snapshot"; import FleetsTab from "./FleetsTab"; @@ -40,7 +40,7 @@ describe("FleetsTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetsTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/RemoteCommandsTab.test.jsx b/src/components/Cars/Status/RemoteCommandsTab.test.jsx index 1644aa7..c1d7882 100644 --- a/src/components/Cars/Status/RemoteCommandsTab.test.jsx +++ b/src/components/Cars/Status/RemoteCommandsTab.test.jsx @@ -10,7 +10,7 @@ import {StatusProvider} from "../../Contexts/StatusContext"; import {setToken, UserProvider} from "../../Contexts/UserContext"; import RemoteCommandsTab from "./RemoteCommandsTab"; import addSnapshotSerializer from "../../../utils/snapshot"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import {TEST_AUTH_OBJECT} from "../../../utils/testing"; import React from "react"; const renderRemoteCommandsTab = async () => { @@ -33,7 +33,7 @@ describe("RemoteCommandsTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderRemoteCommandsTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Status/__snapshots__/CANFiltersTab.test.jsx.snap b/src/components/Cars/Status/__snapshots__/CANFiltersTab.test.jsx.snap index 77fde3d..da44961 100644 --- a/src/components/Cars/Status/__snapshots__/CANFiltersTab.test.jsx.snap +++ b/src/components/Cars/Status/__snapshots__/CANFiltersTab.test.jsx.snap @@ -249,6 +249,23 @@ exports[`CANFiltersTab Render 1`] = ` /> + + + + + + + + + diff --git a/src/components/Cars/Status/__snapshots__/DetailsTab.test.jsx.snap b/src/components/Cars/Status/__snapshots__/DetailsTab.test.jsx.snap index d23af12..c2a24b3 100644 --- a/src/components/Cars/Status/__snapshots__/DetailsTab.test.jsx.snap +++ b/src/components/Cars/Status/__snapshots__/DetailsTab.test.jsx.snap @@ -109,6 +109,23 @@ exports[`DetailsTab Render 1`] = ` /> + + +
    diff --git a/src/components/Cars/Status/__snapshots__/index.test.jsx.snap b/src/components/Cars/Status/__snapshots__/index.test.jsx.snap index 1954a3f..87bafee 100644 --- a/src/components/Cars/Status/__snapshots__/index.test.jsx.snap +++ b/src/components/Cars/Status/__snapshots__/index.test.jsx.snap @@ -67,6 +67,7 @@ exports[`CarStatus Render 1`] = `
    diff --git a/src/components/Cars/Status/index.jsx b/src/components/Cars/Status/index.jsx index 48c37b9..bed8b79 100644 --- a/src/components/Cars/Status/index.jsx +++ b/src/components/Cars/Status/index.jsx @@ -1,22 +1,19 @@ -import { Box, Tab, Tabs } from "@material-ui/core"; -import clsx from "clsx"; import React, { useEffect } from "react"; import { useParams } from "react-router"; import { useLocation } from "react-router-dom"; +import clsx from "clsx"; +import { Box, Tab, Tabs } from "@material-ui/core"; -import { Permissions } from "../../../utils/roles"; -import { useStatusContext } from "../../Contexts/StatusContext"; -import { useUserContext } from "../../Contexts/UserContext"; -import { RoleWrap } from "../../Controls/RoleWrap"; -import TabPanel from "../../Controls/TabPanel"; -import useStyles from "../../useStyles"; -import CANFiltersTab from "./CANFiltersTab"; -import CANSignalsTab from "./CANSignalsTab"; -import CarUpdatesTab from "./CarUpdatesTab"; import CarDetailsTab from "./DetailsTab"; +import CarUpdatesTab from "./CarUpdatesTab"; +import CANFiltersTab from "./CANFiltersTab"; import DigitalTwinTab from "./DigitalTwinTab"; -import FleetsTab from "./FleetsTab"; +import TabPanel from "../../Controls/TabPanel"; +import { useStatusContext } from "../../Contexts/StatusContext"; +import useStyles from "../../useStyles"; +import CANSignalsTab from "./CANSignalsTab"; import RemoteCommandsTab from "./RemoteCommandsTab"; +import FleetsTab from "./FleetsTab"; const tabHashes = ["details", "updates", "filters"]; @@ -27,8 +24,6 @@ const CarStatus = () => { const { hash } = useLocation(); const [tabIndex, setTabIndex] = React.useState(0); - const { groups, providers } = useUserContext(); - useEffect(() => { const key = hash.replace("#", ""); const index = tabHashes.findIndex((element) => element === key); @@ -68,18 +63,12 @@ const CarStatus = () => { > - - - + + + + + - - - - @@ -91,30 +80,25 @@ const CarStatus = () => { - - - - - - - + + + - - - + + + - - - + + + - - - - + + + + + + +
    ); }; diff --git a/src/components/Cars/Status/index.test.jsx b/src/components/Cars/Status/index.test.jsx index 21a32d6..8083078 100644 --- a/src/components/Cars/Status/index.test.jsx +++ b/src/components/Cars/Status/index.test.jsx @@ -12,7 +12,7 @@ import routeData from "react-router"; import { CANFiltersProvider } from "../../Contexts/CANFiltersContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import CarStatus from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -45,7 +45,7 @@ describe("CarStatus", () => { }) it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCarStatus(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Cars/Update/index.test.jsx b/src/components/Cars/Update/index.test.jsx index c3b680b..9f2bfec 100644 --- a/src/components/Cars/Update/index.test.jsx +++ b/src/components/Cars/Update/index.test.jsx @@ -8,7 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { VehicleProvider } from "../../Contexts/VehicleContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -36,7 +36,7 @@ describe("VehicleUpdate", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderVehicleUpdate(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Contexts/UserContext.jsx b/src/components/Contexts/UserContext.jsx index f6ab06c..3f05b69 100644 --- a/src/components/Contexts/UserContext.jsx +++ b/src/components/Contexts/UserContext.jsx @@ -2,7 +2,7 @@ import React, { useContext, useEffect, useState } from "react"; import auth from "../../services/auth"; import getTimerWorker from "../../services/getTimerWorker"; import { parsePayload } from "../../utils/jwt"; -import {getGroups, getProviders} from "../../utils/roles"; +import { getGroups } from "../../utils/roles"; const UserContext = React.createContext(); @@ -10,7 +10,6 @@ export const UserProvider = ({ children }) => { const [fetching, setFetching] = useState(false); const [token, setToken] = useState(null); const [groups, setGroups] = useState(null); - const [providers, setProviders] = useState(null); const [error, setError] = useState(null); let timer; @@ -74,7 +73,6 @@ export const UserProvider = ({ children }) => { } setGroups(getGroups(idToken)); - setProviders(getProviders(idToken)); startSessionTimer(); } catch (e) { setError(`Verify error. ${e.message}`); @@ -108,7 +106,6 @@ export const UserProvider = ({ children }) => { const signOut = () => { setGroups(null); - setProviders(null); setToken(null); if (localStorage) { localStorage.removeItem("token"); @@ -156,7 +153,6 @@ export const UserProvider = ({ children }) => { error, fetching, groups, - providers, token, getAuthorizeURL, getLogoutURL, diff --git a/src/components/Contexts/__mocks__/UserContext.jsx b/src/components/Contexts/__mocks__/UserContext.jsx index 746fd32..958d515 100644 --- a/src/components/Contexts/__mocks__/UserContext.jsx +++ b/src/components/Contexts/__mocks__/UserContext.jsx @@ -1,10 +1,9 @@ import React from "react"; -import {getGroups, getProviders} from "../../../utils/roles"; +import { getGroups } from "../../../utils/roles"; let token = null; let groups = null; -let providers = null; let fetching = false; let error = null; let signInResp = {}; @@ -21,7 +20,6 @@ export const useUserContext = () => ({ error, fetching, groups, - providers, token, getAuthorizeURL: jest.fn(() => authorizeURL), getLogoutURL: jest.fn(() => logoutURL), @@ -37,10 +35,8 @@ export const setToken = (val) => { token = val; if (!val || !val.idToken || !val.idToken.jwtToken) { groups = null; - providers = null } else { groups = getGroups(val.idToken.jwtToken); - providers = getProviders(val.idToken.jwtToken); } }; diff --git a/src/components/Controls/CarUpdateStatusTable/CarUpdateStatusTable.test.jsx b/src/components/Controls/CarUpdateStatusTable/CarUpdateStatusTable.test.jsx index c49d526..d728be1 100644 --- a/src/components/Controls/CarUpdateStatusTable/CarUpdateStatusTable.test.jsx +++ b/src/components/Controls/CarUpdateStatusTable/CarUpdateStatusTable.test.jsx @@ -6,14 +6,14 @@ import { render, waitFor } from "@testing-library/react"; import { CarUpdatesProvider } from "../../Contexts/CarUpdatesContext"; import CarUpdateStatusTable from "../CarUpdateStatusTable"; import { StatusProvider } from "../../Contexts/StatusContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import addSnapshotSerializer from "../../../utils/snapshot"; const renderCarUpdateStatusTable = async () => { const { container } = render( - + ); diff --git a/src/components/Controls/CarUpdatesTable/index.jsx b/src/components/Controls/CarUpdatesTable/index.jsx index ef60a4b..3750152 100644 --- a/src/components/Controls/CarUpdatesTable/index.jsx +++ b/src/components/Controls/CarUpdatesTable/index.jsx @@ -1,3 +1,4 @@ +import React, { useEffect, useState } from "react"; import { LinearProgress, Table, @@ -8,22 +9,19 @@ import { TableRow, Tooltip, } from "@material-ui/core"; -import CancelIcon from "@material-ui/icons/Cancel"; -import React, { useEffect, useState } from "react"; import { Link } from "react-router-dom"; +import CancelIcon from "@material-ui/icons/Cancel"; -import { logger } from "../../../services/monitoring"; import { LocalDateTimeString } from "../../../utils/dates"; +import TableHeaderSortable from "../../Table/HeaderSortable"; import { CarUpdatesProvider, useCarUpdatesContext, } from "../../Contexts/CarUpdatesContext"; import { useStatusContext } from "../../Contexts/StatusContext"; -import { useUserContext } from "../../Contexts/UserContext"; -import TableHeaderSortable from "../../Table/HeaderSortable"; -import { useLocalStorage } from "../../useLocalStorage"; import useStyles from "../../useStyles"; -import { RoleWrap } from "../RoleWrap"; +import { logger } from "../../../services/monitoring"; +import { useLocalStorage } from "../../useLocalStorage"; const tableColumns = [ { @@ -70,8 +68,6 @@ const MainForm = ({ vin, token }) => { } = useCarUpdatesContext(); const { setMessage } = useStatusContext(); - const { groups, providers } = useUserContext(); - useEffect(() => { (async () => { try { @@ -180,17 +176,11 @@ const MainForm = ({ vin, token }) => { {LocalDateTimeString(row.updated)} - - - sendCancel(row)}> - - - - + + sendCancel(row)}> + + + ))} diff --git a/src/components/Controls/RoleWrap/__snapshots__/index.test.js.snap b/src/components/Controls/RoleWrap/__snapshots__/index.test.js.snap deleted file mode 100644 index 94da114..0000000 --- a/src/components/Controls/RoleWrap/__snapshots__/index.test.js.snap +++ /dev/null @@ -1,23 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`RoleWrap RoleWrap with access, child renders 1`] = ` -
    -
    - Test -
    -
    -`; - -exports[`RoleWrap RoleWrap without access, child does not render 1`] = `
    `; - -exports[`RoleWrap RoleWrap without access, eitherComponent renders 1`] = ` -
    -
    - Either -
    -
    -`; diff --git a/src/components/Controls/RoleWrap/index.js b/src/components/Controls/RoleWrap/index.js deleted file mode 100644 index b91b408..0000000 --- a/src/components/Controls/RoleWrap/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import {hasRole} from "../../../utils/roles"; -import React from "react"; - -export const RoleWrap = (props) => { - const {groups, rolesPerProvider, providers} = props; - - const eitherComponent = props["eitherComponent"] || null; - - if (!hasRole(groups, rolesPerProvider, providers)) { - return eitherComponent != null ? eitherComponent : <>; - } - - return ( - - {props.children} - - ) -} - diff --git a/src/components/Controls/RoleWrap/index.test.js b/src/components/Controls/RoleWrap/index.test.js deleted file mode 100644 index 421caac..0000000 --- a/src/components/Controls/RoleWrap/index.test.js +++ /dev/null @@ -1,70 +0,0 @@ -import { render, screen } from "@testing-library/react"; -import { Permissions, Providers, Roles } from "../../../utils/roles"; -import addSnapshotSerializer from "../../../utils/snapshot"; -import { RoleWrap } from "./index"; - -const selector = "test-role-wrap-child"; - -const renderRoleWrap = async ( - groups, - providers, - rolesPerProvider, - eitherComponent -) => { - const { container } = render( - -
    Test
    -
    - ); - return container; -}; - -describe("RoleWrap", () => { - beforeAll(() => { - addSnapshotSerializer(expect); - }); - - it("RoleWrap with access, child renders", async () => { - const view = await renderRoleWrap( - [Roles.READ], - [Providers.FISKER], - Permissions.FiskerRead, - null - ); - const childComponent = screen.getByTestId(selector); - expect(childComponent).toHaveTextContent("Test"); - - expect(view).toMatchSnapshot(); - }); - - it("RoleWrap without access, child does not render", async () => { - const view = await renderRoleWrap( - [Roles.READ], - [Providers.FISKER], - Permissions.FiskerCreate, - null - ); - const childComponent = screen.queryByTestId(selector); - expect(childComponent).toBeNull(); - - expect(view).toMatchSnapshot(); - }); - - it("RoleWrap without access, eitherComponent renders", async () => { - const view = await renderRoleWrap( - [Roles.READ], - [Providers.FISKER], - Permissions.FiskerCreate, -
    Either
    - ); - const childComponent = screen.getByTestId(selector); - expect(childComponent).toHaveTextContent("Either"); - - expect(view).toMatchSnapshot(); - }); -}); diff --git a/src/components/Fleets/Add/index.test.jsx b/src/components/Fleets/Add/index.test.jsx index b2ba2e4..3806a23 100644 --- a/src/components/Fleets/Add/index.test.jsx +++ b/src/components/Fleets/Add/index.test.jsx @@ -8,7 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { FleetProvider } from "../../Contexts/FleetContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -36,7 +36,7 @@ describe("FleetAddForm", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetAdd(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/CANFilters/Add/index.test.jsx b/src/components/Fleets/Status/CANFilters/Add/index.test.jsx index aaad37b..362ffbf 100644 --- a/src/components/Fleets/Status/CANFilters/Add/index.test.jsx +++ b/src/components/Fleets/Status/CANFilters/Add/index.test.jsx @@ -8,7 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { FleetProvider } from "../../../../Contexts/FleetContext"; import { StatusProvider } from "../../../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER }from "../../../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../../../utils/snapshot"; @@ -34,7 +34,7 @@ describe("FleetCANFilterAdd", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetCANFilterAdd(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/CANFilters/Table/__snapshots__/index.test.jsx.snap b/src/components/Fleets/Status/CANFilters/Table/__snapshots__/index.test.jsx.snap index c07188c..6baadf0 100644 --- a/src/components/Fleets/Status/CANFilters/Table/__snapshots__/index.test.jsx.snap +++ b/src/components/Fleets/Status/CANFilters/Table/__snapshots__/index.test.jsx.snap @@ -221,6 +221,23 @@ exports[`FleetCANFiltersTable Render 1`] = ` /> + + + + + + + + + diff --git a/src/components/Fleets/Status/CANFilters/Table/index.jsx b/src/components/Fleets/Status/CANFilters/Table/index.jsx index 69740b4..e9eb631 100644 --- a/src/components/Fleets/Status/CANFilters/Table/index.jsx +++ b/src/components/Fleets/Status/CANFilters/Table/index.jsx @@ -1,3 +1,5 @@ +import React, { useEffect, useState } from "react"; +import { Link } from 'react-router-dom'; import { Grid, Table, @@ -10,42 +12,37 @@ import { } from "@material-ui/core"; import AddCircleIcon from "@material-ui/icons/AddCircle"; import DeleteIcon from "@material-ui/icons/Delete"; -import EditIcon from "@material-ui/icons/Edit"; +import EditIcon from '@material-ui/icons/Edit'; import clsx from "clsx"; -import React, { useEffect, useState } from "react"; -import { Link } from "react-router-dom"; -import { logger } from "../../../../../services/monitoring"; -import { hasRole, Permissions } from "../../../../../utils/roles"; -import { trimIfMoreThan } from "../../../../../utils/strings"; -import { - FleetProvider, - useFleetContext, -} from "../../../../Contexts/FleetContext"; -import { useStatusContext } from "../../../../Contexts/StatusContext"; -import { useUserContext } from "../../../../Contexts/UserContext"; -import SearchField from "../../../../Controls/SearchField"; import TableHeaderSortable from "../../../../Table/HeaderSortable"; -import { useLocalStorage } from "../../../../useLocalStorage"; +import { useUserContext } from "../../../../Contexts/UserContext" +import { useStatusContext } from "../../../../Contexts/StatusContext"; +import { FleetProvider, useFleetContext } from "../../../../Contexts/FleetContext" import useStyles from "../../../../useStyles"; +import SearchField from "../../../../Controls/SearchField"; +import { logger } from "../../../../../services/monitoring"; +import { Roles, hasRole } from "../../../../../utils/roles"; +import {useLocalStorage} from "../../../../useLocalStorage"; +import {trimIfMoreThan} from "../../../../../utils/strings" const tableColumns = [ { id: "can_id", - label: "CAN ID", + label: "CAN ID" }, { id: "interval", - label: "Interval (ms)", + label: "Interval (ms)" }, { id: "edge_mask", - label: "Edge mask", + label: "Edge mask" }, { id: "", - label: "Actions", - }, + label: "Actions" + } ]; const PAGE_SIZE = "FLEET_STATUS_CAN_FILTER_TABLE_PAGE_SIZE"; @@ -57,19 +54,8 @@ const MainForm = ({ name }) => { const [order, setOrder] = useState("desc"); const classes = useStyles(); const { setMessage } = useStatusContext(); - const { - fleetCANFilters, - totalFleetCANFilters, - getFleetCANFilters, - deleteFleetCANFilter, - } = useFleetContext(); - const { - token: { - idToken: { jwtToken: token }, - }, - groups, - providers, - } = useUserContext(); + const { fleetCANFilters, totalFleetCANFilters, getFleetCANFilters, deleteFleetCANFilter } = useFleetContext(); + const { token: { idToken: { jwtToken: token } }, groups } = useUserContext(); useEffect(() => { (async () => { @@ -121,7 +107,7 @@ const MainForm = ({ name }) => { const onDelete = async (can_id) => { try { await deleteFleetCANFilter(name, can_id, token); - setMessage(`Deleted ${can_id}`); + setMessage(`Deleted ${can_id}`) } catch (e) { setMessage(e.message); logger.warn(e.stack); @@ -130,19 +116,19 @@ const MainForm = ({ name }) => { const Actions = (row) => { let actions = []; - if (hasRole(groups, Permissions.FiskerCreate, providers)) { + if (hasRole([Roles.CREATE], groups)) { actions.push({ tip: `Update "${row.can_id}"`, link: `/fleet/${name}/filter-update?name=${name}&can_id=${row.can_id}&interval=${row.interval}`, - icon: , + icon: }); } - if (hasRole(groups, Permissions.FiskerDelete, providers)) { + if (hasRole([Roles.DELETE], groups)) { actions.push({ tip: `Delete "${row.can_id}"`, id: row.can_id, - icon: , - }); + icon: + }) } if (actions.length === 0) return ["No actions"]; @@ -171,10 +157,7 @@ const MainForm = ({ name }) => {
    - + @@ -191,13 +174,11 @@ const MainForm = ({ name }) => { onSortRequest={handleSort} /> - {fleetCANFilters.map((row) => ( + {fleetCANFilters.map(row => ( {row.can_id} {row.interval} - - {trimIfMoreThan(row.edge_mask, 15, "...")} - + {trimIfMoreThan(row.edge_mask, 15, "...")} {Actions(row)} ))} @@ -220,7 +201,7 @@ const MainForm = ({ name }) => { -
    +
    ); }; diff --git a/src/components/Fleets/Status/CANFilters/Table/index.test.jsx b/src/components/Fleets/Status/CANFilters/Table/index.test.jsx index ce7c40c..4c69962 100644 --- a/src/components/Fleets/Status/CANFilters/Table/index.test.jsx +++ b/src/components/Fleets/Status/CANFilters/Table/index.test.jsx @@ -11,7 +11,7 @@ import { BrowserRouter } from "react-router-dom"; import { FleetProvider } from "../../../../Contexts/FleetContext"; import { StatusProvider } from "../../../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER }from "../../../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../../../utils/snapshot"; @@ -37,7 +37,7 @@ describe("FleetCANFiltersTable", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetCANFiltersTable(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/CANFilters/Update/index.test.jsx b/src/components/Fleets/Status/CANFilters/Update/index.test.jsx index 029e6e2..36fdb68 100644 --- a/src/components/Fleets/Status/CANFilters/Update/index.test.jsx +++ b/src/components/Fleets/Status/CANFilters/Update/index.test.jsx @@ -8,7 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { FleetProvider } from "../../../../Contexts/FleetContext"; import { StatusProvider } from "../../../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../../../utils/snapshot"; @@ -34,7 +34,7 @@ describe("FleetCANFilterUpdate", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetCANFilterUpdate(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/CANFiltersTab.test.jsx b/src/components/Fleets/Status/CANFiltersTab.test.jsx index bd490d2..bd30ecc 100644 --- a/src/components/Fleets/Status/CANFiltersTab.test.jsx +++ b/src/components/Fleets/Status/CANFiltersTab.test.jsx @@ -9,7 +9,7 @@ import { render, waitFor } from "@testing-library/react"; import { BrowserRouter } from "react-router-dom"; import { setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import CANFiltersTab from "./CANFiltersTab"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -31,7 +31,7 @@ describe("CANFiltersTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCANFitlersTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/Details/index.test.jsx b/src/components/Fleets/Status/Details/index.test.jsx index 7a3384f..6cd7f4b 100644 --- a/src/components/Fleets/Status/Details/index.test.jsx +++ b/src/components/Fleets/Status/Details/index.test.jsx @@ -9,7 +9,7 @@ import routeData from "react-router"; import { FleetProvider } from "../../../Contexts/FleetContext"; import { StatusProvider } from "../../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER }from "../../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../../utils/snapshot"; @@ -42,7 +42,7 @@ describe("FleetDetailsTab", () => { }) it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetDetailsTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/DetailsTab.test.jsx b/src/components/Fleets/Status/DetailsTab.test.jsx index c6da46b..21f3eca 100644 --- a/src/components/Fleets/Status/DetailsTab.test.jsx +++ b/src/components/Fleets/Status/DetailsTab.test.jsx @@ -11,7 +11,7 @@ import { MemoryRouter, Route } from "react-router-dom"; import { FleetProvider } from "../../Contexts/FleetContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./DetailsTab"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -41,7 +41,7 @@ describe("DetailsTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderDetailsTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/Vehicles/Add/index.test.jsx b/src/components/Fleets/Status/Vehicles/Add/index.test.jsx index fea2983..1eccb7e 100644 --- a/src/components/Fleets/Status/Vehicles/Add/index.test.jsx +++ b/src/components/Fleets/Status/Vehicles/Add/index.test.jsx @@ -8,7 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { FleetProvider } from "../../../../Contexts/FleetContext"; import { StatusProvider } from "../../../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER }from "../../../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../../../utils/snapshot"; @@ -36,7 +36,7 @@ describe("FleetVehicleAdd", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetVehicleAdd(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap b/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap index 9cad130..7cb84c5 100644 --- a/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap +++ b/src/components/Fleets/Status/Vehicles/Table/__snapshots__/index.test.jsx.snap @@ -153,7 +153,26 @@ exports[`FleetVehiclesTable Render 1`] = ` - No actions + + + + +
    + - No actions + + + + +
    + - No actions + + + + +
    + diff --git a/src/components/Fleets/Status/Vehicles/Table/index.jsx b/src/components/Fleets/Status/Vehicles/Table/index.jsx index 07dc489..07127f2 100644 --- a/src/components/Fleets/Status/Vehicles/Table/index.jsx +++ b/src/components/Fleets/Status/Vehicles/Table/index.jsx @@ -1,3 +1,5 @@ +import React, { useEffect, useState } from "react"; +import { Link } from 'react-router-dom'; import { Grid, Table, @@ -11,32 +13,27 @@ import { import AddCircleIcon from "@material-ui/icons/AddCircle"; import DeleteIcon from "@material-ui/icons/Delete"; import clsx from "clsx"; -import React, { useEffect, useState } from "react"; -import { Link } from "react-router-dom"; -import { logger } from "../../../../../services/monitoring"; -import { hasRole, Permissions } from "../../../../../utils/roles"; -import { - FleetProvider, - useFleetContext, -} from "../../../../Contexts/FleetContext"; -import { useStatusContext } from "../../../../Contexts/StatusContext"; -import { useUserContext } from "../../../../Contexts/UserContext"; -import SearchField from "../../../../Controls/SearchField"; -import DeleteConfirmation from "../../../../DeleteConfirmation"; import TableHeaderSortable from "../../../../Table/HeaderSortable"; -import { useLocalStorage } from "../../../../useLocalStorage"; +import { useUserContext } from "../../../../Contexts/UserContext" +import { useStatusContext } from "../../../../Contexts/StatusContext"; +import { FleetProvider, useFleetContext } from "../../../../Contexts/FleetContext" import useStyles from "../../../../useStyles"; +import SearchField from "../../../../Controls/SearchField"; +import { logger } from "../../../../../services/monitoring"; +import { Roles, hasRole } from "../../../../../utils/roles"; +import { useLocalStorage } from "../../../../useLocalStorage"; +import DeleteConfirmation from "../../../../DeleteConfirmation"; const tableColumns = [ { id: "vin", - label: "VIN", + label: "VIN" }, { id: "", - label: "Actions", - }, + label: "Actions" + } ]; const PAGE_SIZE = "FLEET_STATUS_VEHICLES_TABLE_PAGE_SIZE"; @@ -47,22 +44,11 @@ const MainForm = ({ name }) => { const [orderBy, setOrderBy] = useState("id"); const [order, setOrder] = useState("desc"); const [search, setSearch] = useState(""); - const [showDeleteModal, setShowDeleteModal] = useState(false); + const [showDeleteModal, setShowDeleteModal] = useState(false) const classes = useStyles(); const { setMessage } = useStatusContext(); - const { - fleetVehicles, - totalFleetVehicles, - getFleetVehicles, - deleteFleetVehicle, - } = useFleetContext(); - const { - token: { - idToken: { jwtToken: token }, - }, - groups, - providers, - } = useUserContext(); + const { fleetVehicles, totalFleetVehicles, getFleetVehicles, deleteFleetVehicle } = useFleetContext(); + const { token: { idToken: { jwtToken: token } }, groups } = useUserContext(); const handleSearch = (query) => { setSearch(query); @@ -119,7 +105,7 @@ const MainForm = ({ name }) => { const onDelete = async (vin) => { try { await deleteFleetVehicle(name, { vin: vin }, token); - setMessage(`Deleted ${vin}`); + setMessage(`Deleted ${vin}`) } catch (e) { setMessage(e.message); logger.warn(e.stack); @@ -128,12 +114,12 @@ const MainForm = ({ name }) => { const Actions = (vin) => { let actions = []; - if (hasRole(groups, Permissions.FiskerDelete, providers)) { + if (hasRole([Roles.DELETE], groups)) { actions.push({ tip: `Delete "${vin}"`, id: vin, - icon: , - }); + icon: + }) } if (actions.length === 0) return ["No actions"]; @@ -154,13 +140,9 @@ const MainForm = ({ name }) => { {action.icon} - setShowDeleteModal(false)} - deleteFunction={() => onDelete(action.id)} - /> + setShowDeleteModal(false)} deleteFunction={() => onDelete(action.id)} /> + ); } }); @@ -170,10 +152,7 @@ const MainForm = ({ name }) => {
    - + @@ -190,7 +169,7 @@ const MainForm = ({ name }) => { onSortRequest={handleSort} /> - {fleetVehicles.map((vin) => ( + {fleetVehicles.map(vin => ( {vin} @@ -217,7 +196,7 @@ const MainForm = ({ name }) => { -
    +
    ); }; diff --git a/src/components/Fleets/Status/Vehicles/Table/index.test.jsx b/src/components/Fleets/Status/Vehicles/Table/index.test.jsx index a6b2c11..703be2a 100644 --- a/src/components/Fleets/Status/Vehicles/Table/index.test.jsx +++ b/src/components/Fleets/Status/Vehicles/Table/index.test.jsx @@ -11,7 +11,7 @@ import { BrowserRouter } from "react-router-dom"; import { FleetProvider } from "../../../../Contexts/FleetContext"; import { StatusProvider } from "../../../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER }from "../../../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../../../utils/snapshot"; @@ -39,7 +39,7 @@ describe("FleetVehiclesTable", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetVehiclesTable(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/VehiclesTab.test.jsx b/src/components/Fleets/Status/VehiclesTab.test.jsx index 9d8081e..ef72fd7 100644 --- a/src/components/Fleets/Status/VehiclesTab.test.jsx +++ b/src/components/Fleets/Status/VehiclesTab.test.jsx @@ -9,7 +9,7 @@ import { render, waitFor } from "@testing-library/react"; import { BrowserRouter } from "react-router-dom"; import { setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import VehiclesTab from "./VehiclesTab"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -31,7 +31,7 @@ describe("VehiclesTab", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderVehiclesTab(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Status/__snapshots__/CANFiltersTab.test.jsx.snap b/src/components/Fleets/Status/__snapshots__/CANFiltersTab.test.jsx.snap index 4ab0de0..27c2794 100644 --- a/src/components/Fleets/Status/__snapshots__/CANFiltersTab.test.jsx.snap +++ b/src/components/Fleets/Status/__snapshots__/CANFiltersTab.test.jsx.snap @@ -220,6 +220,23 @@ exports[`CANFiltersTab Render 1`] = ` /> + + + + + + + + + diff --git a/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap b/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap index aab2895..7db6e6e 100644 --- a/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap +++ b/src/components/Fleets/Status/__snapshots__/VehiclesTab.test.jsx.snap @@ -152,7 +152,26 @@ exports[`VehiclesTab Render 1`] = ` - No actions + + + + +
    + - No actions + + + + +
    + - No actions + + + + +
    + diff --git a/src/components/Fleets/Status/index.test.jsx b/src/components/Fleets/Status/index.test.jsx index 9e18e1d..bc5cb8c 100644 --- a/src/components/Fleets/Status/index.test.jsx +++ b/src/components/Fleets/Status/index.test.jsx @@ -12,7 +12,7 @@ import routeData from "react-router"; import { FleetProvider } from "../../Contexts/FleetContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import FleetStatus from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -45,7 +45,7 @@ describe("FleetStatus", () => { }) it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderCarStatus(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Table/index.test.jsx b/src/components/Fleets/Table/index.test.jsx index f70cbe0..31d2b6b 100644 --- a/src/components/Fleets/Table/index.test.jsx +++ b/src/components/Fleets/Table/index.test.jsx @@ -11,7 +11,7 @@ import { BrowserRouter } from "react-router-dom"; import { FleetProvider } from "../../Contexts/FleetContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -39,7 +39,7 @@ describe("FleetTable", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetTable(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Fleets/Update/index.test.jsx b/src/components/Fleets/Update/index.test.jsx index 3e4479e..8e91ee1 100644 --- a/src/components/Fleets/Update/index.test.jsx +++ b/src/components/Fleets/Update/index.test.jsx @@ -8,7 +8,7 @@ import { BrowserRouter } from "react-router-dom"; import { FleetProvider } from "../../Contexts/FleetContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -36,7 +36,7 @@ describe("FleetUpdate", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderFleetUpdate(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Layouts/SideMenu.jsx b/src/components/Layouts/SideMenu.jsx index ea750a9..214bdf3 100644 --- a/src/components/Layouts/SideMenu.jsx +++ b/src/components/Layouts/SideMenu.jsx @@ -1,17 +1,17 @@ +import React from "react"; import { List } from "@material-ui/core"; +import HomeIcon from "@material-ui/icons/Home"; +import DirectionsCarIcon from "@material-ui/icons/DirectionsCar"; +import CommuteIcon from "@material-ui/icons/Commute"; +import CloudDownloadIcon from "@material-ui/icons/CloudDownload"; import AssessmentIcon from "@material-ui/icons/Assessment"; import BuildIcon from "@material-ui/icons/Build"; -import CloudDownloadIcon from "@material-ui/icons/CloudDownload"; -import CommuteIcon from "@material-ui/icons/Commute"; -import DirectionsCarIcon from "@material-ui/icons/DirectionsCar"; -import HomeIcon from "@material-ui/icons/Home"; import SettingsInputCompositeIcon from "@material-ui/icons/SettingsInputComposite"; -import { default as React, useEffect, useState } from "react"; -import { hasRole, Permissions } from "../../utils/roles"; import { useUserContext } from "../Contexts/UserContext"; -import SupersetDashboardList from "../SupersetDashboardList/SupersetDashboardList"; +import { Roles, hasRole } from "../../utils/roles"; import { ExpandableSideMenuItem, MenuItem } from "./MenuItem"; +import SupersetDashboardList from "../SupersetDashboardList/SupersetDashboardList"; const menuData = [ { @@ -24,60 +24,65 @@ const menuData = [ label: "Deployments", to: "/packages", icon: , - rolesPerProvider: Permissions.FiskerMagnaRead, + roles: [Roles.READ, Roles.CREATE], }, { label: "Vehicles", to: "/vehicles", icon: , - rolesPerProvider: Permissions.FiskerMagnaRead, + roles: [Roles.READ, Roles.CREATE], }, { label: "Fleets", to: "/fleets", icon: , - rolesPerProvider: Permissions.FiskerRead, + roles: [Roles.READ, Roles.CREATE], }, { label: "Datascope", to: null, icon: , - rolesPerProvider: Permissions.FiskerRead, - component: SupersetDashboardList, + roles: [Roles.READ, Roles.CREATE], + component: SupersetDashboardList }, { label: "Suppliers", to: "/suppliers", icon: , - rolesPerProvider: Permissions.FiskerSupplierAdmin, + roles: [Roles.APPROVESUPPLIERS], }, { label: "Tools", to: "/tools/certificates/add", icon: , - rolesPerProvider: Permissions.FiskerTools, + roles: [Roles.CERTIFICATES, Roles.APPROVESUPPLIERS], submenus: [ { label: "Certificate", to: "/tools/certificates/add", - rolesPerProvider: Permissions.FiskerCertificate, + roles: [Roles.CERTIFICATES], }, { label: "SMS", to: "/tools/sms/send", - rolesPerProvider: Permissions.FiskerCreate, - }, + roles: [Roles.CREATE], + } ], }, ]; -const SideMenu = () => { - const { groups, providers } = useUserContext(); - const [menu, setMenu] = useState(menuData); - useEffect(() => { - filterAccessible(groups, providers, setMenu); - }, [groups, providers]); +const SideMenu = () => { + const { groups } = useUserContext(); + + const menu = menuData.reduce((result, item) => { + if (hasRole(item.roles, groups)) { + result.push(item); + } + + return result; + }, []); + return ( @@ -91,14 +96,4 @@ const SideMenu = () => { ); }; -const filterAccessible = (groups, providers, setMenu) => { - const filteredMenu = menuData.reduce((result, item) => { - if (hasRole(groups, item.rolesPerProvider, providers)) { - result.push(item); - } - return result; - }, []); - setMenu(filteredMenu); -}; - -export default SideMenu; +export default SideMenu; \ No newline at end of file diff --git a/src/components/Layouts/SideMenu.test.jsx b/src/components/Layouts/SideMenu.test.jsx index c481462..476a22a 100644 --- a/src/components/Layouts/SideMenu.test.jsx +++ b/src/components/Layouts/SideMenu.test.jsx @@ -1,12 +1,12 @@ jest.mock("../Contexts/UserContext"); -jest.mock("../../services/superset"); +jest.mock("../../services/superset") -import { render, screen, waitFor } from "@testing-library/react"; +import { render, waitFor, screen } from "@testing-library/react"; import { BrowserRouter } from "react-router-dom"; -import addSnapshotSerializer from "../../utils/snapshot"; -import { TEST_AUTH_OBJECT_FISKER } from "../../utils/testing"; -import { setToken, UserProvider } from "../Contexts/UserContext"; +import { UserProvider, setToken } from "../Contexts/UserContext"; +import { TEST_AUTH_OBJECT } from "../../utils/testing"; import SideMenu from "./SideMenu"; +import addSnapshotSerializer from "../../utils/snapshot"; const renderMenu = async () => { const { container } = render( @@ -23,20 +23,15 @@ const renderMenu = async () => { describe("SideMenu", () => { beforeAll(() => { addSnapshotSerializer(expect); - }); - it("Unauthenticated", async () => { - setToken({ idToken: { jwtToken: null } }); - const container = await renderMenu(); - expect(container).toMatchSnapshot(); }); it("Authenticated", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderMenu(); await waitFor(() => { - expect(screen.getByText("Datascope")).toBeInTheDocument(); - }); + expect(screen.getByText('Datascope')).toBeInTheDocument() + }) expect(container).toMatchSnapshot(); }); }); diff --git a/src/components/Layouts/__snapshots__/SideMenu.test.jsx.snap b/src/components/Layouts/__snapshots__/SideMenu.test.jsx.snap index 12a0106..c804955 100644 --- a/src/components/Layouts/__snapshots__/SideMenu.test.jsx.snap +++ b/src/components/Layouts/__snapshots__/SideMenu.test.jsx.snap @@ -213,42 +213,6 @@ exports[`SideMenu Authenticated 1`] = `
  • -
  • - -
    - -
    -
    - - Suppliers - -
    - -
    -
  • `; - -exports[`SideMenu Unauthenticated 1`] = ` - -`; diff --git a/src/components/Manifest/Details/index.test.jsx b/src/components/Manifest/Details/index.test.jsx index e0e2be2..0c0ecdd 100644 --- a/src/components/Manifest/Details/index.test.jsx +++ b/src/components/Manifest/Details/index.test.jsx @@ -9,7 +9,7 @@ import { ManifestsProvider } from "../../Contexts/ManifestsContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import ManifestDetails from "."; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import addSnapshotSerializer from "../../../utils/snapshot"; const TestComponent = (opened) => ( @@ -26,7 +26,7 @@ const TestComponent = (opened) => ( describe("Manifest Details Component", () => { beforeAll(() => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); addSnapshotSerializer(expect); }); diff --git a/src/components/Manifest/List/index.jsx b/src/components/Manifest/List/index.jsx index c81819d..742ddc1 100644 --- a/src/components/Manifest/List/index.jsx +++ b/src/components/Manifest/List/index.jsx @@ -1,3 +1,5 @@ +import React, { useEffect, useState } from "react"; +import { Link } from "react-router-dom"; import { Grid, Table, @@ -8,30 +10,28 @@ import { TableRow, Tooltip, } from "@material-ui/core"; -import DeleteIcon from "@material-ui/icons/Delete"; import SendIcon from "@material-ui/icons/Send"; import VisibilityIcon from "@material-ui/icons/Visibility"; +import DeleteIcon from "@material-ui/icons/Delete"; import clsx from "clsx"; -import React, { useEffect, useState } from "react"; -import { Link } from "react-router-dom"; -import EditIcon from "@material-ui/icons/Edit"; -import { logger } from "../../../services/monitoring"; -import { LocalDateTimeString } from "../../../utils/dates"; -import { TYPE_MANIFEST_SOFTWARE } from "../../../utils/manifest_types"; -import { hasRole, Permissions } from "../../../utils/roles"; import { - ManifestsProvider, useManifestsContext, + ManifestsProvider, } from "../../Contexts/ManifestsContext"; -import { useStatusContext } from "../../Contexts/StatusContext"; import { useUserContext } from "../../Contexts/UserContext"; -import ECUList from "../../Controls/ECUList"; -import SearchField from "../../Controls/SearchField"; -import DeleteConfirmation from "../../DeleteConfirmation"; -import TableHeaderSortable from "../../Table/HeaderSortable"; -import { useLocalStorage } from "../../useLocalStorage"; +import { useStatusContext } from "../../Contexts/StatusContext"; import useStyles from "../../useStyles"; +import { LocalDateTimeString } from "../../../utils/dates"; +import TableHeaderSortable from "../../Table/HeaderSortable"; +import SearchField from "../../Controls/SearchField"; +import { logger } from "../../../services/monitoring"; +import ECUList from "../../Controls/ECUList"; +import { Roles, hasRole } from "../../../utils/roles"; +import { useLocalStorage } from "../../useLocalStorage"; +import { TYPE_MANIFEST_SOFTWARE } from "../../../utils/manifest_types"; +import DeleteConfirmation from "../../DeleteConfirmation"; +import EditIcon from "@material-ui/icons/Edit"; const tableColumns = [ { @@ -71,7 +71,7 @@ const formatManifestType = (type) => { default: return "Standard"; } -}; +} const PAGE_SIZE = "MANIFEST_LIST_PAGE_SIZE"; @@ -95,7 +95,6 @@ const MainForm = () => { idToken: { jwtToken: token }, }, groups, - providers, } = useUserContext(); const sortHandler = (event, property) => { @@ -156,7 +155,7 @@ const MainForm = () => { setDeleteId(id); setDeleteRowName(`${row.name} ${row.version}`); setShowDeleteModal(true); - }; + } const onDelete = async (manifest_id) => { try { @@ -169,30 +168,29 @@ const MainForm = () => { const Actions = (row) => { let actions = []; - if (hasRole(groups, Permissions.FiskerMagnaRead, providers)) { + if (hasRole([Roles.CREATE, Roles.READ], groups)) { actions.push({ tip: `Status "${row.name} ${row.version}"`, link: `/package-status/${row.id}`, icon: ( ), - }); - } - if (hasRole(groups, Permissions.FiskerRead, providers)) { - actions.push({ + }, { tip: `Update "${row.name} ${row.version}"`, link: `/package-update/${row.id}`, - icon: , + icon: ( + + ), }); } - if (hasRole(groups, Permissions.FiskerMagnaCreate, providers)) { + if (hasRole([Roles.CREATE], groups)) { actions.push({ tip: `Deploy "${row.name} ${row.version}"`, link: `/package-deploy/${row.id}`, icon: , }); } - if (hasRole(groups, Permissions.FiskerDelete, providers)) { + if (hasRole([Roles.DELETE], groups)) { actions.push({ tip: `Delete "${row.name} ${row.version}"`, id: row.id, @@ -259,9 +257,7 @@ const MainForm = () => { )} {row.version} - - {formatManifestType(row.type)} - + {formatManifestType(row.type)} {LocalDateTimeString(row.created)} @@ -294,8 +290,7 @@ const MainForm = () => { message={deleteRowName} open={showDeleteModal} close={() => setShowDeleteModal(false)} - deleteFunction={() => onDelete(deleteId)} - /> + deleteFunction={() => onDelete(deleteId)} /> ); }; diff --git a/src/components/Manifest/Status/index.jsx b/src/components/Manifest/Status/index.jsx index 28eb6de..b57686f 100644 --- a/src/components/Manifest/Status/index.jsx +++ b/src/components/Manifest/Status/index.jsx @@ -1,3 +1,6 @@ +import React, { useEffect, useState } from "react"; +import { useParams } from "react-router"; +import { Link } from "react-router-dom"; import { LinearProgress, Table, @@ -11,27 +14,22 @@ import { } from "@material-ui/core"; import CancelIcon from "@material-ui/icons/Cancel"; import clsx from "clsx"; -import React, { useEffect, useState } from "react"; -import { useParams } from "react-router"; -import { Link } from "react-router-dom"; -import { logger } from "../../../services/monitoring"; -import { LocalDateTimeString } from "../../../utils/dates"; -import { Permissions } from "../../../utils/roles"; -import { - CarUpdatesProvider, - useCarUpdatesContext, -} from "../../Contexts/CarUpdatesContext"; import { ManifestsProvider, useManifestsContext, } from "../../Contexts/ManifestsContext"; -import { useStatusContext } from "../../Contexts/StatusContext"; +import { + CarUpdatesProvider, + useCarUpdatesContext, +} from "../../Contexts/CarUpdatesContext"; import { useUserContext } from "../../Contexts/UserContext"; -import { RoleWrap } from "../../Controls/RoleWrap"; -import { useLocalStorage } from "../../useLocalStorage"; +import { useStatusContext } from "../../Contexts/StatusContext"; import useStyles from "../../useStyles"; +import { LocalDateTimeString } from "../../../utils/dates"; +import { logger } from "../../../services/monitoring"; import ManifestDetails from "../Details"; +import { useLocalStorage } from "../../useLocalStorage"; const PAGE_SIZE = "MANIFEST_STATUS_PAGE_SIZE"; @@ -54,8 +52,6 @@ const MainForm = () => { token: { idToken: { jwtToken: token }, }, - groups, - providers, } = useUserContext(); useEffect(() => { @@ -176,18 +172,11 @@ const MainForm = () => { {LocalDateTimeString(row.updated)} - No action} - > - - sendCancel(row)}> - - - - + + sendCancel(row)}> + + + ))} diff --git a/src/components/Manifest/Update/index.jsx b/src/components/Manifest/Update/index.jsx index ae25364..e4897f5 100644 --- a/src/components/Manifest/Update/index.jsx +++ b/src/components/Manifest/Update/index.jsx @@ -49,7 +49,9 @@ const MainForm = () => { const onSubmit = async (e) => { e.preventDefault(); try { - const result = await updateManifest(manifest_id, {name, type}, token); + const data = {name, type}; + console.log(data); + const result = await updateManifest(manifest_id, data, token); if (!result || result.error) return; setMessage(`Updated manifest ${manifest_id}`); diff --git a/src/components/Manifest/Update/index.test.jsx b/src/components/Manifest/Update/index.test.jsx index ff49e93..d851193 100644 --- a/src/components/Manifest/Update/index.test.jsx +++ b/src/components/Manifest/Update/index.test.jsx @@ -9,7 +9,7 @@ import { ManifestsProvider } from "../../Contexts/ManifestsContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import ManifestUpdate from "."; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import addSnapshotSerializer from "../../../utils/snapshot"; const renderManifestUpdate = async () => { @@ -33,12 +33,12 @@ const renderManifestUpdate = async () => { describe("Manifest Details Component", () => { beforeAll(() => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); addSnapshotSerializer(expect); }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const view = await renderManifestUpdate(); expect(view).toMatchSnapshot(); }); diff --git a/src/components/Routes/AuthRoute.jsx b/src/components/Routes/AuthRoute.jsx index 0fe8110..f3e02d3 100644 --- a/src/components/Routes/AuthRoute.jsx +++ b/src/components/Routes/AuthRoute.jsx @@ -8,7 +8,7 @@ export const TYPES = { PROTECTED: 2, }; -export const AuthRoute = ({ token, type, groups, rolesPerGroup, providers, ...others }) => { +export const AuthRoute = ({ token, type, roles, groups, ...others }) => { if (type === TYPES.PROTECTED && !token) { return ; } else if (type === TYPES.GUEST && token) { @@ -16,9 +16,8 @@ export const AuthRoute = ({ token, type, groups, rolesPerGroup, providers, ...ot } else if ( type === TYPES.PROTECTED && token && - rolesPerGroup && - providers && - !hasRole(groups, rolesPerGroup, providers) + roles && + !hasRole(roles, groups) ) { return ; } diff --git a/src/components/Routes/SiteRoutes.jsx b/src/components/Routes/SiteRoutes.jsx index 0347670..1bb32fb 100644 --- a/src/components/Routes/SiteRoutes.jsx +++ b/src/components/Routes/SiteRoutes.jsx @@ -1,10 +1,10 @@ import React, { Suspense } from "react"; import { Switch } from "react-router-dom"; -import { Permissions } from "../../utils/roles"; -import { useUserContext } from "../Contexts/UserContext"; -import { MessageBar } from "../MessageBar"; import { AuthRoute, TYPES } from "../Routes/AuthRoute"; +import { MessageBar } from "../MessageBar"; +import { useUserContext } from "../Contexts/UserContext"; +import { Roles } from "../../utils/roles"; const CANFilterCreate = React.lazy(() => import("../CANFilter/Add")); const CANFilterUpdate = React.lazy(() => import("../CANFilter/Update")); @@ -39,7 +39,7 @@ const SuppliersList = React.lazy(() => import("../Suppliers/List")); const SupplierDetails = React.lazy(() => import("../Suppliers/Details")); const Datascope = React.lazy(() => import("../Dashboard")); const SiteRoutes = () => { - const { token, groups, providers } = useUserContext(); + const { token, groups } = useUserContext(); return ( @@ -57,8 +57,7 @@ const SiteRoutes = () => { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerCreate} - providers={providers} + roles={[Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerCreate} - providers={providers} + roles={[Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerRead} - providers={providers} + roles={[Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerCreate} - providers={providers} + roles={[Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerMagnaRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerMagnaRead} - providers={providers} + roles={[Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerMagnaRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerMagnaRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerCreate} - providers={providers} + roles={[Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerMagnaRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerMagnaRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerCreate} - providers={providers} + roles={[Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerCertificate} - providers={providers} + roles={[Roles.CERTIFICATES]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerCreate} - providers={providers} + roles={[Roles.CREATE]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerSupplierAdmin} - providers={providers} + roles={[Roles.APPROVESUPPLIERS]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerSupplierAdmin} - providers={providers} + roles={[Roles.APPROVESUPPLIERS]} /> { type={TYPES.PROTECTED} token={token} groups={groups} - rolesPerGroup={Permissions.FiskerRead} - providers={providers} + roles={[Roles.READ, Roles.CREATE]} /> diff --git a/src/components/Suppliers/Details/index.test.js b/src/components/Suppliers/Details/index.test.js index 760c81c..d093d7b 100644 --- a/src/components/Suppliers/Details/index.test.js +++ b/src/components/Suppliers/Details/index.test.js @@ -15,7 +15,7 @@ import { BrowserRouter } from "react-router-dom"; import { SupplierProvider } from "../../Contexts/SupplierContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -43,7 +43,7 @@ describe("Supplier page", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderSupplierDetailsPage(); expect(container).toMatchSnapshot(); }); diff --git a/src/components/Suppliers/List/index.test.jsx b/src/components/Suppliers/List/index.test.jsx index 8f395b6..520e896 100644 --- a/src/components/Suppliers/List/index.test.jsx +++ b/src/components/Suppliers/List/index.test.jsx @@ -10,7 +10,7 @@ import { BrowserRouter } from "react-router-dom"; import { SupplierProvider } from "../../Contexts/SupplierContext"; import { StatusProvider } from "../../Contexts/StatusContext"; import { UserProvider, setToken } from "../../Contexts/UserContext"; -import { TEST_AUTH_OBJECT_FISKER } from "../../../utils/testing"; +import { TEST_AUTH_OBJECT } from "../../../utils/testing"; import MainForm from "./index"; import addSnapshotSerializer from "../../../utils/snapshot"; @@ -38,7 +38,7 @@ describe("Suppliers page", () => { }); it("Render", async () => { - setToken(TEST_AUTH_OBJECT_FISKER); + setToken(TEST_AUTH_OBJECT); const container = await renderSuppliersPage(); expect(container).toMatchSnapshot(); }); diff --git a/src/utils/roles.js b/src/utils/roles.js index 484297f..78546bf 100644 --- a/src/utils/roles.js +++ b/src/utils/roles.js @@ -6,12 +6,16 @@ export const Roles = { DELETE: "8f78dce7-f5f9-4033-a10c-c9c7408bfcfe", CERTIFICATES: "746f34b0-9ba0-4b5d-8d84-0256a9c8e390", APPROVESUPPLIERS: "a6c9805e-80b2-42b2-bfbb-9df52e5504d8", - MAGNAGROUP: process.env.REACT_APP_MAGNA_GROUP_ID, }; -export const Providers = { - FISKER: "Fisker", - MAGNA: process.env.REACT_APP_MAGNA_PROVIDER, +export const hasRoleToken = (roles, token) => { + if (!roles || roles.length === 0) return true; + + const groups = getGroups(token); + + if (!groups) return false; + + return hasRole(roles, groups); }; export const getGroups = (token) => { @@ -22,54 +26,13 @@ export const getGroups = (token) => { return payload["custom:groups"]; }; -export const getProviders = (token) => { - const payload = parsePayload(token); +export const hasRole = (roles, groups) => { + if (!roles || roles.length === 0) return true; + if (!groups) return false; - if (!payload || !payload["identities"] || payload["identities"].length === 0) - return null; - - return payload["identities"].map((identity) => identity["providerName"]); -}; - -export const hasRole = (userGroups, rolesPerProvider, userProviders) => { - if (!rolesPerProvider || rolesPerProvider.length === 0) return true; - - if (!userGroups || userGroups.length === 0) return false; - - if (rolesPerProvider && userProviders) { - for (const provider of userProviders) { - if (rolesPerProvider[provider]) { - const rolesForProvider = rolesPerProvider[provider]; - if (!rolesForProvider || rolesForProvider.length === 0) return true; - if ( - rolesForProvider.filter((role) => userGroups.includes(role)).length > - 0 - ) { - return true; - } - } - } + for (let role of roles) { + if (groups.indexOf(role) > -1) return true; } return false; }; - -export const Permissions = { - FiskerRead: { [Providers.FISKER]: [Roles.CREATE, Roles.READ] }, - FiskerCreate: { [Providers.FISKER]: [Roles.CREATE] }, - FiskerDelete: { [Providers.FISKER]: [Roles.DELETE] }, - FiskerSupplierAdmin: { [Providers.FISKER]: [Roles.APPROVESUPPLIERS] }, - FiskerCertificate: { [Providers.FISKER]: [Roles.CERTIFICATES] }, - FiskerTools: { - [Providers.FISKER]: [Roles.APPROVESUPPLIERS, Roles.CERTIFICATES], - }, - Magna: { [Providers.MAGNA]: [Roles.MAGNAGROUP] }, - FiskerMagnaRead: { - [Providers.FISKER]: [Roles.CREATE, Roles.READ], - [Providers.MAGNA]: [Roles.MAGNAGROUP], - }, - FiskerMagnaCreate: { - [Providers.FISKER]: [Roles.CREATE], - [Providers.MAGNA]: [Roles.MAGNAGROUP], - }, -}; diff --git a/src/utils/roles.test.js b/src/utils/roles.test.js index 06294b8..8d73178 100644 --- a/src/utils/roles.test.js +++ b/src/utils/roles.test.js @@ -1,28 +1,10 @@ -import { - getGroups, - getProviders, - hasRole, - Permissions, - Providers, - Roles, -} from "./roles"; -import { TEST_EXPECTED_GROUPS, TEST_TOKEN } from "./testing"; + +import { hasRoleToken, Roles } from "./roles"; +import { TEST_TOKEN } from "./testing"; describe("Roles Helper", () => { it("Check roles", () => { - expect( - hasRole([Roles.CREATE], Permissions.FiskerCreate, [Providers.FISKER]) - ).toEqual(true); - expect( - hasRole([Roles.READ], Permissions.FiskerCreate, [Providers.FISKER]) - ).toEqual(false); - }); - - it("Get groups", () => { - expect(getGroups(TEST_TOKEN)).toEqual(TEST_EXPECTED_GROUPS); - }); - - it("Get providers", () => { - expect(getProviders(TEST_TOKEN)).toEqual(["AzureAD"]); - }); + expect(hasRoleToken([Roles.CREATE], TEST_TOKEN)).toEqual(true); + expect(hasRoleToken([Roles.READ], TEST_TOKEN)).toEqual(false); + }) }); diff --git a/src/utils/testing.js b/src/utils/testing.js index 1ccb278..6bdc7d2 100644 --- a/src/utils/testing.js +++ b/src/utils/testing.js @@ -5,13 +5,5 @@ export const TEST_AUTH_OBJECT = { jwtToken: TEST_TOKEN, }, }; - -export const TEST_TOKEN_FISKER = - "eyJraWQiOiJlUTNuZFJLaUVcL084VUZ5RHFsYjN0S1RzWG00SzVPMlc4NXd3VWkzT2tNZz0iLCJhbGciOiJSUzI1NiJ9.eyJhdF9oYXNoIjoiODIwNTViMm9CUl9HQURiMXVyU3V3dyIsInN1YiI6ImEwZDAzMzA5LWQxYzMtNGNhZi05Zjc3LWJlMDE5N2ZlOGE1OSIsImNvZ25pdG86Z3JvdXBzIjpbInVzLXdlc3QtMl9BV3dqTFh5bTJfRmlza2VyIl0sImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tXC91cy13ZXN0LTJfQVd3akxYeW0yIiwiY29nbml0bzp1c2VybmFtZSI6ImZpc2tlcl9hdW1hcm92QGZpc2tlcmluYy5jb20iLCJnaXZlbl9uYW1lIjoiQW52YXIiLCJjdXN0b206Z3JvdXBzIjoiWzhkODI3OGE1LTljMGUtNGM3Zi05MThhLTgxMWZkMWQyMzZlNCwgNzQ2ZjM0YjAtOWJhMC00YjVkLThkODQtMDI1NmE5YzhlMzkwLCA2MDcxZWFiYS1kNjY2LTRjMDMtODE3Yi1jMjgyYTk1MWI5NjYsIGFjYmQ3MmM5LTlmZjMtNDZhOC04M2JhLWM2ZmE1ZGYzZjI2NCwgNzM3ZTQ0OWMtMjMwOS00NjllLWFhNDgtNDZlNjg5MTk4M2MwLCBmNjNiNjQzMC0xMjg4LTQwYTgtYWE0OS04NDM4NTE1MGQ2YTgsIDg3NzcwYWVhLTkxNjItNDA5ZS1hYTcwLTEwZDBkMWRlNTkwMiwgYTZjOTgwNWUtODBiMi00MmIyLWJmYmItOWRmNTJlNTUwNGQ4LCBiYWZjMTdhNy1lYzY0LTQ5ZDktYTJhNy1kYWZjMjhkY2IwMzcsIDI0NDljMDY2LTkxNDYtNDRhNy1iNGU2LTQ4MjgwMzFkOTU4ZCwgZWZjYzMwMjUtZTJkOC00MjEyLTgyMjctODA1YzdiZTM5ZDJjLCAyNzNjN2MwZC01MWQzLTRhMzEtOTQ0My1jNDM2NzU3MmVlNGYsIDcwZmU1OWM2LTFkNjktNGRmZS05N2I5LWZhZTQzMjE1MTAxOSwgODY5NTZhMmYtOGQ0Ni00N2ZmLTliMjktZjk5MDc5YWUzYzFkLCBiMGU4MmU4My0yYzk0LTRiMjQtYjljNy1lNzc4MTZmMjU5N2RdIiwiYXVkIjoiN2NrMnRmb3FhdmM3MmM0NWhoN3RnZTQya2QiLCJjdXN0b206c2Vzc2lvbi1kdXJhdGlvbiI6IjkwMCIsImlkZW50aXRpZXMiOlt7InVzZXJJZCI6ImF1bWFyb3ZAZmlza2VyaW5jLmNvbSIsInByb3ZpZGVyTmFtZSI6IkZpc2tlciIsInByb3ZpZGVyVHlwZSI6IlNBTUwiLCJpc3N1ZXIiOiJodHRwczpcL1wvc3RzLndpbmRvd3MubmV0XC81YWE0YjY0MC1jOWZjLTRhOWItYjNhMy1kNGE3ZDAwOGZiNWVcLyIsInByaW1hcnkiOiJ0cnVlIiwiZGF0ZUNyZWF0ZWQiOiIxNjY0ODA3MDE1NzQ3In1dLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY2Nzc1NjIzOCwiZXhwIjoxNjY3NzU5ODM4LCJpYXQiOjE2Njc3NTYyMzgsImZhbWlseV9uYW1lIjoiVW1hcm92IiwiZW1haWwiOiJhdW1hcm92QGZpc2tlcmluYy5jb20ifQ.ZZC7tgMMjRpRNJcGdp7ftXJQJ6pjzP45SJAcfJRZC4oUHG-h5BI1bGKEKmslWdK09GEH1cN7YDGQg8ufkKOyncm-J5DRNvj27fN--Lapkg1Q0bHT8pwMDXRjPUbazLEwEvfo1yGyLBOBopxdisQvv9km8-UH3Xy7a7IsCOWx51xKsgMWho4w4BK1PQUBpUrG0h-tno7-7nHO4gwr4urCtDPIoMjsq_lF77LDvM3SBdCH28ogaoDE3ogd1tbBpwHXtOhnp-FMp85I2Vk-pI_KsiW3RXr50OdeAVEfFLFKhjCCoB5RR6pKxWJXs-7BN91Tnn7SYgfAWt5Wa2cxBxMUDg" -export const TEST_AUTH_OBJECT_FISKER = { - idToken: { - jwtToken: TEST_TOKEN_FISKER - }, -} export const TEST_EXPECTED_GROUPS = "[2914e67f-fb85-4b78-b79d-656f4f37faa1, 8d8278a5-9c0e-4c7f-918a-811fd1d236e4, 746f34b0-9ba0-4b5d-8d84-0256a9c8e390, 6c3cf98d-0ada-48c6-ae94-b171cfa275fc, acbd72c9-9ff3-46a8-83ba-c6fa5df3f264, 5e59a619-c890-4472-91c2-d5eae5d8fa18, 56ef4bec-d739-4ddf-a003-ecc813085b8d, 929b0470-f7eb-4e18-9f97-22ac2c591a10, 131e6257-fdb7-426a-9825-1cd918802fba, 1ac794cc-76ac-47f6-bee6-d6666998f0fd, 87770aea-9162-409e-aa70-10d0d1de5902, 5dea6c32-6575-4527-9254-e50d27ae5e92, bafc17a7-ec64-49d9-a2a7-dafc28dcb037, 2449c066-9146-44a7-b4e6-4828031d958d, efcc3025-e2d8-4212-8227-805c7be39d2c, 8f78dce7-f5f9-4033-a10c-c9c7408bfcfe, cf653183-c829-4eed-a6ce-453fa1017cd9, 783c5979-f5e7-4cb6-b14e-c3553dde956a, 5515a98f-4668-4121-8e8d-fee2825699cf, 86956a2f-8d46-47ff-9b29-f99079ae3c1d, c4d4361c-8882-47b4-8641-fd3ab68ae722, 972ad095-16b7-40ad-a464-f5dbf417a8cd, 7bcdcdb2-3279-44bf-a998-771bab4b33e1]";