From 83105fb7ca69ea9e23067e2379353e38f0a2df53 Mon Sep 17 00:00:00 2001 From: John Wu <76966357+jwu-fisker@users.noreply.github.com> Date: Fri, 16 Jul 2021 10:49:10 -0700 Subject: [PATCH] CEC-247, CEC-261 Manifest and ECU display (#65) * CEC-261 Add ECU list control * CEC-261 Update vehicle service mock * CEC-247 Manifest screens * Fix test * Remove dynamic dates from mocks * Remove timezone from mock dates * Fix test for date string timezone difference --- package-lock.json | 75 +- package.json | 9 +- src/components/App/App.test.js | 28 + .../App/__snapshots__/App.test.js.snap | 2610 +++++++++++++++-- .../Cars/CarSelectionTable/index.jsx | 9 +- src/components/Cars/List/index.jsx | 7 + src/components/Contexts/CarUpdatesContext.jsx | 176 ++ src/components/Contexts/ManifestsContext.jsx | 66 + .../Contexts/UpdatesContext.test.jsx | 2 +- .../Contexts/VehicleContext.test.jsx | 31 +- .../Contexts/__mocks__/CarUpdatesContext.jsx | 31 + .../Contexts/__mocks__/ManifestsContext.jsx | 27 + .../Contexts/__mocks__/UpdatesContext.jsx | 6 +- src/components/Controls/ECUList/index.jsx | 34 + src/components/Layouts/SideMenu.jsx | 5 + .../__snapshots__/SideMenu.test.jsx.snap | 22 + src/components/Manifest/Deploy/index.jsx | 161 + src/components/Manifest/List/index.jsx | 249 ++ src/components/Manifest/Status/index.jsx | 174 ++ src/components/Routes/SiteRoutes.jsx | 27 + src/components/UpdatePackages/List/index.jsx | 11 +- src/services/__mocks__/manifests.js | 59 + src/services/__mocks__/updates.js | 9 +- src/services/__mocks__/vehicles.js | 12 +- src/services/manifests.js | 23 + testEnv.js | 3 + 26 files changed, 3626 insertions(+), 240 deletions(-) create mode 100644 src/components/Contexts/CarUpdatesContext.jsx create mode 100644 src/components/Contexts/ManifestsContext.jsx create mode 100644 src/components/Contexts/__mocks__/CarUpdatesContext.jsx create mode 100644 src/components/Contexts/__mocks__/ManifestsContext.jsx create mode 100644 src/components/Controls/ECUList/index.jsx create mode 100644 src/components/Manifest/Deploy/index.jsx create mode 100644 src/components/Manifest/List/index.jsx create mode 100644 src/components/Manifest/Status/index.jsx create mode 100644 src/services/__mocks__/manifests.js create mode 100644 src/services/manifests.js create mode 100644 testEnv.js diff --git a/package-lock.json b/package-lock.json index 475765d..c06eaf0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1275,9 +1275,9 @@ "integrity": "sha512-ij4wRiunFfaJxjB0BdrYHIH8FxBJpOwNPhhAcunlmPdXudL1WQV1qoP9un6JsEBAgQH+7UXyyjh0g7jTxXK6tg==" }, "@datadog/browser-core": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@datadog/browser-core/-/browser-core-2.8.1.tgz", - "integrity": "sha512-pxY/jOtWGpWcs04LPKBSXd0bChzgQY0oiActomB+z7xdhmqGB/R0Fy50ZA1gtJXny3Pava1O7tIY51E/CiH0Vg==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-core/-/browser-core-2.15.0.tgz", + "integrity": "sha512-qWTAysGYQXVpM5FOdstaqIF6B99nyQ2N/rJsi1ruPgFmU9yMM9tRdvqiJ7NZcy+OOsZWiinvFRFUMv9SOsHeUA==", "requires": { "tslib": "^1.10.0" }, @@ -1314,12 +1314,12 @@ } }, "@datadog/browser-rum": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@datadog/browser-rum/-/browser-rum-2.8.1.tgz", - "integrity": "sha512-p/tp1869oyJXutOyr67Aip3e3tIJpSarO3RAwf2mt1evEbUfvopwNWfQPKifMzbtMRwRA26O9nmZ7wEKjMxvxA==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-rum/-/browser-rum-2.15.0.tgz", + "integrity": "sha512-E9PmGHxGQEdn8SUA7DmUu2mf/ifWGXLuGm95Hes/+dqoXbIPryFdmPCFnHaVF2nZNIA7wwW23oqe60KKo2Qjaw==", "requires": { - "@datadog/browser-core": "2.8.1", - "@datadog/browser-rum-core": "2.8.1", + "@datadog/browser-core": "2.15.0", + "@datadog/browser-rum-core": "2.15.0", "tslib": "^1.10.0" }, "dependencies": { @@ -1331,11 +1331,11 @@ } }, "@datadog/browser-rum-core": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/@datadog/browser-rum-core/-/browser-rum-core-2.8.1.tgz", - "integrity": "sha512-5z95vUEWwugcokv/vTKxQ26oW50Uv5XxoNkg/sgwDZFrIcOpjMqzRwEaot/dUM2w+THobnRzufBBYJcXmj5HpQ==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/@datadog/browser-rum-core/-/browser-rum-core-2.15.0.tgz", + "integrity": "sha512-XXEe3JpSyvSvYXpXz/MgrVqs5Rl4Zu2eJXmHfxafAxb3i+VxyA6vc/pLnXPaKeWVcO489MpBEr6Gv7HiOEFZNA==", "requires": { - "@datadog/browser-core": "2.8.1", + "@datadog/browser-core": "2.15.0", "tslib": "^1.10.0" }, "dependencies": { @@ -2075,16 +2075,16 @@ } }, "@testing-library/dom": { - "version": "7.30.4", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.30.4.tgz", - "integrity": "sha512-GObDVMaI4ARrZEXaRy4moolNAxWPKvEYNV/fa6Uc2eAzR/t4otS6A7EhrntPBIQLeehL9DbVhscvvv7gd6hWqA==", + "version": "7.31.2", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-7.31.2.tgz", + "integrity": "sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ==", "requires": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", "@types/aria-query": "^4.2.0", "aria-query": "^4.2.2", "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.4", + "dom-accessibility-api": "^0.5.6", "lz-string": "^1.4.4", "pretty-format": "^26.6.2" }, @@ -2101,9 +2101,9 @@ } }, "@testing-library/jest-dom": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.12.0.tgz", - "integrity": "sha512-N9Y82b2Z3j6wzIoAqajlKVF1Zt7sOH0pPee0sUHXHc5cv2Fdn23r+vpWm0MBBoGJtPOly5+Bdx1lnc3CD+A+ow==", + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-5.14.1.tgz", + "integrity": "sha512-dfB7HVIgTNCxH22M1+KU6viG5of2ldoA5ly8Ar8xkezKHKXjRvznCdbMbqjYGgO2xjRbwnR+rR8MLUIqF3kKbQ==", "requires": { "@babel/runtime": "^7.9.2", "@types/testing-library__jest-dom": "^5.9.1", @@ -2111,14 +2111,15 @@ "chalk": "^3.0.0", "css": "^3.0.0", "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.5.6", "lodash": "^4.17.15", "redent": "^3.0.0" } }, "@testing-library/react": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.6.tgz", - "integrity": "sha512-TXMCg0jT8xmuU8BkKMtp8l7Z50Ykew5WNX8UoIKTaLFwKkP2+1YDhOLA2Ga3wY4x29jyntk7EWfum0kjlYiSjQ==", + "version": "11.2.7", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-11.2.7.tgz", + "integrity": "sha512-tzRNp7pzd5QmbtXNG/mhdcl7Awfu/Iz1RaVHY75zTdOkmHCuzMhRL83gWHSgOAcjS3CCbyfwUHMZgRJb4kAfpA==", "requires": { "@babel/runtime": "^7.12.5", "@testing-library/dom": "^7.28.1" @@ -2344,9 +2345,9 @@ "integrity": "sha512-0VBprVqfgFD7Ehb2vd8Lh9TG3jP98gvr8rgehQqzztZNI7o8zS8Ad4jyZneKELphpuE212D8J70LnSNQSyO6bQ==" }, "@types/testing-library__jest-dom": { - "version": "5.9.5", - "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.9.5.tgz", - "integrity": "sha512-ggn3ws+yRbOHog9GxnXiEZ/35Mow6YtPZpd7Z5mKDeZS/o7zx3yAle0ov/wjhVB5QT4N2Dt+GNoGCdqkBGCajQ==", + "version": "5.14.0", + "resolved": "https://registry.npmjs.org/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.0.tgz", + "integrity": "sha512-l2P2GO+hFF4Liye+fAajT1qBqvZOiL79YMpEvgGs1xTK7hECxBI8Wz4J7ntACJNiJ9r0vXQqYovroXRLPDja6A==", "requires": { "@types/jest": "*" } @@ -2967,11 +2968,6 @@ "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, - "async-limiter": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", - "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" - }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -5109,9 +5105,9 @@ } }, "dom-accessibility-api": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.4.tgz", - "integrity": "sha512-TvrjBckDy2c6v6RLxPv5QXOnU+SmF9nBII5621Ve5fu6Z/BDrENurBEvlC1f44lKEUVqOpK4w9E5Idc5/EgkLQ==" + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.6.tgz", + "integrity": "sha512-DplGLZd8L1lN64jlT27N9TVSESFR5STaEJvX+thCby7fuCHonfPpAlodYc3vuUYbDuDec5w8AMP7oCM5TWFsqw==" }, "dom-converter": { "version": "0.2.0", @@ -15968,11 +15964,18 @@ } }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "requires": { "async-limiter": "~1.0.0" + }, + "dependencies": { + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==" + } } }, "yargs": { diff --git a/package.json b/package.json index b5ebb0e..82ebc79 100644 --- a/package.json +++ b/package.json @@ -4,11 +4,11 @@ "private": true, "dependencies": { "@datadog/browser-logs": "^2.15.0", - "@datadog/browser-rum": "^2.8.1", + "@datadog/browser-rum": "^2.15.0", "@material-ui/core": "^4.11.4", "@material-ui/icons": "^4.11.2", - "@testing-library/jest-dom": "^5.12.0", - "@testing-library/react": "^11.2.6", + "@testing-library/jest-dom": "^5.14.1", + "@testing-library/react": "^11.2.7", "@testing-library/user-event": "^12.8.3", "axios": "^0.21.1", "clsx": "^1.1.1", @@ -49,5 +49,8 @@ }, "devDependencies": { "react-test-renderer": "^17.0.2" + }, + "jest": { + "globalSetup": "./testEnv.js" } } diff --git a/src/components/App/App.test.js b/src/components/App/App.test.js index e4be513..d5d32cc 100644 --- a/src/components/App/App.test.js +++ b/src/components/App/App.test.js @@ -2,6 +2,8 @@ jest.mock("../Contexts/FileUploadContext"); jest.mock("../Contexts/VehicleContext"); jest.mock("../Contexts/UpdatesContext"); jest.mock("../Contexts/UserContext"); +jest.mock("../Contexts/ManifestsContext"); +jest.mock("../Contexts/CarUpdatesContext"); jest.mock("../../services/monitoring"); import { render, screen, cleanup, waitForElementToBeRemoved } from "@testing-library/react"; @@ -91,6 +93,18 @@ describe("App", () => { await check("/dashboard", "span.MuiButton-label", "Sign In"); }); + it("Route /manifests unauthenticated", async () => { + await check("/manifests", "span.MuiButton-label", "Sign In"); + }); + + it("Route /manifest-status unauthenticated", async () => { + await check("/manifest-status/1", "span.MuiButton-label", "Sign In"); + }); + + it("Route /manifest-deploy unauthenticated", async () => { + await check("/manifest-deploy/1", "span.MuiButton-label", "Sign In"); + }); + it("Route / authenticated", async () => { setToken(TEST_AUTH_OBJECT); await check("/", "h1", "Welcome John!"); @@ -155,4 +169,18 @@ describe("App", () => { await check("/dashboard", "h6", "Dashboard"); }); + it("Route /manifests authenticated", async () => { + setToken(TEST_AUTH_OBJECT); + await check("/manifests", "h6", "Deploy Manifest"); + }); + + it("Route /manifest-status authenticated", async () => { + setToken(TEST_AUTH_OBJECT); + await check("/manifest-status/1", "h6", "Manifest Test Manifest 1.0"); + }); + + it("Route /manifest-deploy authenticated", async () => { + setToken(TEST_AUTH_OBJECT); + await check("/manifest-deploy/1", "h6", "Deploy Test Manifest 1.0"); + }); }); diff --git a/src/components/App/__snapshots__/App.test.js.snap b/src/components/App/__snapshots__/App.test.js.snap index f51c82a..83fb2a2 100644 --- a/src/components/App/__snapshots__/App.test.js.snap +++ b/src/components/App/__snapshots__/App.test.js.snap @@ -6,10 +6,10 @@ exports[`App Route / authenticated 1`] = ` data-testid="mocked-userprovider" >
Fisker Admin Portal
@@ -142,6 +142,28 @@ exports[`App Route / authenticated 1`] = ` /> +
  • + +
    + + Deploy Manifest + +
    + +
    +
  • Created - Invalid Date Invalid Date + 7/6/2021 11:48:19 PM . Description

    0 Selected
    @@ -602,7 +646,7 @@ exports[`App Route /carupdate-deploy authenticated 1`] = ` style="text-align: right;" >
    VIN sorted ascending @@ -1010,10 +1054,10 @@ exports[`App Route /carupdate-status authenticated 1`] = ` data-testid="mocked-userprovider" >
    Fisker Admin Portal
    @@ -1148,6 +1192,28 @@ exports[`App Route /carupdate-status authenticated 1`] = ` /> +
  • + +
    + + Deploy Manifest + +
    + +
    +