CEC-1772 Use Node 16 for Github actions (#160)

* CEC-1772 Use Node 16 for Github actions

* Update package-lock.json
This commit is contained in:
John Wu
2022-05-27 11:15:37 -07:00
committed by GitHub
parent b3b792fef4
commit d9cbf9ef23
6 changed files with 17463 additions and 129 deletions

View File

@@ -18,7 +18,7 @@ jobs:
- name: Use Node.js ${{ matrix.node-version }} - name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: "14" node-version: "16"
cache: "npm" cache: "npm"
- run: npm install - run: npm install
- run: npm run build --if-present - run: npm run build --if-present

View File

@@ -6,7 +6,7 @@ Front-end web application for administrating services
Running locally Running locally
1. Install Node 14 1. Install Node 16
2. Run `npm install` 2. Run `npm install`
3. Copy .env.template to .env and edit the service urls for authentication and api services 3. Copy .env.template to .env and edit the service urls for authentication and api services
4. Run `./run.sh` from the terminal 4. Run `./run.sh` from the terminal

17340
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
jest.mock("../../services/CANFiltersAPI") jest.mock("../../services/CANFiltersAPI");
import { import {
render, render,
@@ -83,9 +83,7 @@ describe("CANFiltersContext", () => {
<button data-testid="addFilterNoCANID" onClick={() => add({})} /> <button data-testid="addFilterNoCANID" onClick={() => add({})} />
<button <button
data-testid="addFilter" data-testid="addFilter"
onClick={() => onClick={() => add({ can_id: "123", interval: 1000 })}
add({ can_id: "123", interval: 1000 })
}
/> />
</> </>
); );
@@ -149,13 +147,17 @@ describe("CANFiltersContext", () => {
<> <>
<div data-testid="error">{message}</div> <div data-testid="error">{message}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<button data-testid="updateFilterNull" onClick={() => update(null)} /> <button
<button data-testid="updateFilterNoCANID" onClick={() => update({})} /> data-testid="updateFilterNull"
onClick={() => update(null)}
/>
<button
data-testid="updateFilterNoCANID"
onClick={() => update({})}
/>
<button <button
data-testid="updateFilter" data-testid="updateFilter"
onClick={() => onClick={() => update({ can_id: "123", interval: 1000 })}
update({ can_id: "123", interval: 1000 })
}
/> />
</> </>
); );
@@ -182,7 +184,10 @@ describe("CANFiltersContext", () => {
await waitFor(() => await waitFor(() =>
expect(screen.getByTestId("busy").innerHTML).toEqual("false") expect(screen.getByTestId("busy").innerHTML).toEqual("false")
); );
checkBaseResults("Cannot read property 'can_id' of null", "false"); checkBaseResults(
"Cannot read properties of null (reading 'can_id')",
"false"
);
}); });
it("updateFilterNoCANID", async () => { it("updateFilterNoCANID", async () => {
@@ -219,14 +224,15 @@ describe("CANFiltersContext", () => {
<> <>
<div data-testid="error">{message}</div> <div data-testid="error">{message}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<button data-testid="deleteFilterNull" onClick={() => deleteF(null)} />
<button data-testid="deleteFilterNonexistent" onClick={() => deleteF(-1)} />
<button <button
data-testid="deleteFilter" data-testid="deleteFilterNull"
onClick={() => onClick={() => deleteF(null)}
deleteF(123)
}
/> />
<button
data-testid="deleteFilterNonexistent"
onClick={() => deleteF(-1)}
/>
<button data-testid="deleteFilter" onClick={() => deleteF(123)} />
</> </>
); );
}; };
@@ -276,14 +282,14 @@ describe("CANFiltersContext", () => {
const expectedFiltersData = [ const expectedFiltersData = [
{ {
can_id: "123", can_id: "123",
interval: 1000 interval: 1000,
}, },
{ {
can_id: "456", can_id: "456",
interval: 0 interval: 0,
}, },
{ {
can_id: "789-1000", can_id: "789-1000",
interval: 5 interval: 5,
}, },
]; ];

View File

@@ -1,4 +1,4 @@
jest.mock("../../services/fleetsAPI") jest.mock("../../services/fleetsAPI");
import { import {
render, render,
@@ -23,12 +23,12 @@ const checkFleetsResults = (error, busy, fleets) => {
const checkFleetVehicleResults = (error, busy, vehicles) => { const checkFleetVehicleResults = (error, busy, vehicles) => {
checkBaseResults(error, busy); checkBaseResults(error, busy);
expect(screen.getByTestId("fleet-vehicles").innerHTML).toEqual(vehicles); expect(screen.getByTestId("fleet-vehicles").innerHTML).toEqual(vehicles);
} };
const checkFleetCANFilterResults = (error, busy, filters) => { const checkFleetCANFilterResults = (error, busy, filters) => {
checkBaseResults(error, busy); checkBaseResults(error, busy);
expect(screen.getByTestId("fleet-filters").innerHTML).toEqual(filters); expect(screen.getByTestId("fleet-filters").innerHTML).toEqual(filters);
} };
const checkBaseResults = (error, busy) => { const checkBaseResults = (error, busy) => {
expect(screen.getByTestId("error").innerHTML).toEqual(error); expect(screen.getByTestId("error").innerHTML).toEqual(error);
@@ -46,10 +46,7 @@ describe("FleetContext", () => {
<div data-testid="error">{error}</div> <div data-testid="error">{error}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<div data-testid="fleets">{JSON.stringify(fleets)}</div> <div data-testid="fleets">{JSON.stringify(fleets)}</div>
<button <button data-testid="getFleets" onClick={() => getFleets()} />
data-testid="getFleets"
onClick={() => getFleets()}
/>
</> </>
); );
}; };
@@ -140,7 +137,11 @@ describe("FleetContext", () => {
<button <button
data-testid="addFleet" data-testid="addFleet"
onClick={() => onClick={() =>
add({ name: "EU-WEST", log_level: "warn", canbus: { enabled: false } }) add({
name: "EU-WEST",
log_level: "warn",
canbus: { enabled: false },
})
} }
/> />
</> </>
@@ -205,12 +206,22 @@ describe("FleetContext", () => {
<> <>
<div data-testid="error">{message}</div> <div data-testid="error">{message}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<button data-testid="updateFleetNull" onClick={() => update(null)} /> <button
<button data-testid="updateFleetNoName" onClick={() => update({})} /> data-testid="updateFleetNull"
onClick={() => update(null)}
/>
<button
data-testid="updateFleetNoName"
onClick={() => update({})}
/>
<button <button
data-testid="updateFleet" data-testid="updateFleet"
onClick={() => onClick={() =>
update({ name: "EU-WEST", log_level: "warn", canbus: { enabled: false } }) update({
name: "EU-WEST",
log_level: "warn",
canbus: { enabled: false },
})
} }
/> />
</> </>
@@ -275,13 +286,17 @@ describe("FleetContext", () => {
<> <>
<div data-testid="error">{message}</div> <div data-testid="error">{message}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<button data-testid="deleteFleetNull" onClick={() => deleteF(null)} /> <button
<button data-testid="deleteFleetNonexistent" onClick={() => deleteF("INVALID")} /> data-testid="deleteFleetNull"
onClick={() => deleteF(null)}
/>
<button
data-testid="deleteFleetNonexistent"
onClick={() => deleteF("INVALID")}
/>
<button <button
data-testid="deleteFleet" data-testid="deleteFleet"
onClick={() => onClick={() => deleteF("US-WEST")}
deleteF("US-WEST")
}
/> />
</> </>
); );
@@ -331,13 +346,16 @@ describe("FleetContext", () => {
describe("getFleetVehicles", () => { describe("getFleetVehicles", () => {
beforeEach(() => { beforeEach(() => {
const TestComp = () => { const TestComp = () => {
const { busy, error, fleetVehicles, getFleetVehicles } = useFleetContext(); const { busy, error, fleetVehicles, getFleetVehicles } =
useFleetContext();
return ( return (
<> <>
<div data-testid="error">{error}</div> <div data-testid="error">{error}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<div data-testid="fleet-vehicles">{JSON.stringify(fleetVehicles)}</div> <div data-testid="fleet-vehicles">
{JSON.stringify(fleetVehicles)}
</div>
<button <button
data-testid="getFleetVehicles" data-testid="getFleetVehicles"
onClick={() => getFleetVehicles("US-WEST")} onClick={() => getFleetVehicles("US-WEST")}
@@ -365,7 +383,11 @@ describe("FleetContext", () => {
await waitFor(() => await waitFor(() =>
expect(screen.getByTestId("fleet-vehicles").innerHTML).not.toBe("[]") expect(screen.getByTestId("fleet-vehicles").innerHTML).not.toBe("[]")
); );
checkFleetVehicleResults("", "false", JSON.stringify(expectedFleetVehiclesData)); checkFleetVehicleResults(
"",
"false",
JSON.stringify(expectedFleetVehiclesData)
);
}); });
}); });
@@ -386,13 +408,17 @@ describe("FleetContext", () => {
<> <>
<div data-testid="error">{message}</div> <div data-testid="error">{message}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<button data-testid="addFleetVehicleNull" onClick={() => add(null)} /> <button
<button data-testid="addFleetVehicleNoName" onClick={() => add({})} /> data-testid="addFleetVehicleNull"
onClick={() => add(null)}
/>
<button
data-testid="addFleetVehicleNoName"
onClick={() => add({})}
/>
<button <button
data-testid="addFleetVehicle" data-testid="addFleetVehicle"
onClick={() => onClick={() => add("US-TEST", { vin: "TESTVIN1234567890" })}
add("US-TEST", { vin: "TESTVIN1234567890" })
}
/> />
</> </>
); );
@@ -456,13 +482,17 @@ describe("FleetContext", () => {
<> <>
<div data-testid="error">{message}</div> <div data-testid="error">{message}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<button data-testid="deleteFleetVehicleNull" onClick={() => deleteFV("US-WEST", null)} /> <button
<button data-testid="deleteFleetVehicleInvalid" onClick={() => deleteFV("US-WEST", "INVALID")} /> data-testid="deleteFleetVehicleNull"
onClick={() => deleteFV("US-WEST", null)}
/>
<button
data-testid="deleteFleetVehicleInvalid"
onClick={() => deleteFV("US-WEST", "INVALID")}
/>
<button <button
data-testid="deleteFleetVehicle" data-testid="deleteFleetVehicle"
onClick={() => onClick={() => deleteFV("US-WEST", { vin: "USWESTVIN12345678" })}
deleteFV("US-WEST", { vin: "USWESTVIN12345678" })
}
/> />
</> </>
); );
@@ -489,7 +519,10 @@ describe("FleetContext", () => {
await waitFor(() => await waitFor(() =>
expect(screen.getByTestId("busy").innerHTML).toEqual("false") expect(screen.getByTestId("busy").innerHTML).toEqual("false")
); );
checkBaseResults("Cannot read property 'vin' of null", "false"); checkBaseResults(
"Cannot read properties of null (reading 'vin')",
"false"
);
}); });
it("deleteFleetVehicleNonexistent", async () => { it("deleteFleetVehicleNonexistent", async () => {
@@ -512,13 +545,16 @@ describe("FleetContext", () => {
describe("getFleetCANFilters", () => { describe("getFleetCANFilters", () => {
beforeEach(() => { beforeEach(() => {
const TestComp = () => { const TestComp = () => {
const { busy, error, fleetCANFilters, getFleetCANFilters } = useFleetContext(); const { busy, error, fleetCANFilters, getFleetCANFilters } =
useFleetContext();
return ( return (
<> <>
<div data-testid="error">{error}</div> <div data-testid="error">{error}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<div data-testid="fleet-filters">{JSON.stringify(fleetCANFilters)}</div> <div data-testid="fleet-filters">
{JSON.stringify(fleetCANFilters)}
</div>
<button <button
data-testid="getFleetCANFilters" data-testid="getFleetCANFilters"
onClick={() => getFleetCANFilters("US-TEST")} onClick={() => getFleetCANFilters("US-TEST")}
@@ -546,7 +582,11 @@ describe("FleetContext", () => {
await waitFor(() => await waitFor(() =>
expect(screen.getByTestId("fleet-filters").innerHTML).not.toBe("[]") expect(screen.getByTestId("fleet-filters").innerHTML).not.toBe("[]")
); );
checkFleetCANFilterResults("", "false", JSON.stringify(expectedFleetCANFiltersData)); checkFleetCANFilterResults(
"",
"false",
JSON.stringify(expectedFleetCANFiltersData)
);
}); });
}); });
@@ -567,13 +607,17 @@ describe("FleetContext", () => {
<> <>
<div data-testid="error">{message}</div> <div data-testid="error">{message}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<button data-testid="addFleetCANFilterNull" onClick={() => add(null)} /> <button
<button data-testid="addFleetCANFilterNoName" onClick={() => add({})} /> data-testid="addFleetCANFilterNull"
onClick={() => add(null)}
/>
<button
data-testid="addFleetCANFilterNoName"
onClick={() => add({})}
/>
<button <button
data-testid="addFleetCANFilter" data-testid="addFleetCANFilter"
onClick={() => onClick={() => add("US-TEST", { can_id: "111", interval: 222 })}
add("US-TEST", { can_id: "111", interval: 222 })
}
/> />
</> </>
); );
@@ -637,13 +681,17 @@ describe("FleetContext", () => {
<> <>
<div data-testid="error">{message}</div> <div data-testid="error">{message}</div>
<div data-testid="busy">{busy.toString()}</div> <div data-testid="busy">{busy.toString()}</div>
<button data-testid="deleteFleetCANFilterNull" onClick={() => deleteFF("US-WEST", null)} /> <button
<button data-testid="deleteFleetCANFilterInvalid" onClick={() => deleteFF("US-WEST", "INVALID")} /> data-testid="deleteFleetCANFilterNull"
onClick={() => deleteFF("US-WEST", null)}
/>
<button
data-testid="deleteFleetCANFilterInvalid"
onClick={() => deleteFF("US-WEST", "INVALID")}
/>
<button <button
data-testid="deleteFleetCANFilter" data-testid="deleteFleetCANFilter"
onClick={() => onClick={() => deleteFF("US-WEST", "123-456")}
deleteFF("US-WEST", "123-456")
}
/> />
</> </>
); );
@@ -694,59 +742,80 @@ describe("FleetContext", () => {
const expectedFilters = [ const expectedFilters = [
{ {
can_id: "123-456", can_id: "123-456",
interval: 789 interval: 789,
}, },
{ {
can_id: "1", can_id: "1",
interval: 1000 interval: 1000,
}, },
{ {
can_id: "1000", can_id: "1000",
interval: 1 interval: 1,
} },
] ];
const expectedFleetData = { const expectedFleetData = {
name: "US-WEST", name: "US-WEST",
log_level: "info", log_level: "info",
canbus: { enabled: true, data_logger_enabled: true, max_mem_buffer_size: 1, max_disk_buffer_size: 2, filters: expectedFilters }, canbus: {
vehicles: ["USWESTVIN12345678", "USWESTVIN12345679", "USWESTVIN12345670"] enabled: true,
} data_logger_enabled: true,
max_mem_buffer_size: 1,
max_disk_buffer_size: 2,
filters: expectedFilters,
},
vehicles: ["USWESTVIN12345678", "USWESTVIN12345679", "USWESTVIN12345670"],
};
const expectedFleetsData = [ const expectedFleetsData = [
{ {
name: "US-WEST", name: "US-WEST",
log_level: "info", log_level: "info",
canbus: { enabled: true, data_logger_enabled: true, max_mem_buffer_size: 1, max_disk_buffer_size: 2, filters: expectedFilters }, canbus: {
vehicles: ["USWESTVIN12345678", "USWESTVIN12345679", "USWESTVIN12345670"] enabled: true,
data_logger_enabled: true,
max_mem_buffer_size: 1,
max_disk_buffer_size: 2,
filters: expectedFilters,
},
vehicles: ["USWESTVIN12345678", "USWESTVIN12345679", "USWESTVIN12345670"],
}, },
{ {
name: "US-CENTRAL", name: "US-CENTRAL",
log_level: "warn", log_level: "warn",
canbus: { enabled: false, data_logger_enabled: false, max_mem_buffer_size: 0, max_disk_buffer_size: 0 }, canbus: {
vehicles: ["USCENTVIN12345678", "USCENTVIN12345679", "USCENTVIN12345670"] enabled: false,
data_logger_enabled: false,
max_mem_buffer_size: 0,
max_disk_buffer_size: 0,
},
vehicles: ["USCENTVIN12345678", "USCENTVIN12345679", "USCENTVIN12345670"],
}, },
{ {
name: "US-EAST", name: "US-EAST",
log_level: "error", log_level: "error",
canbus: { enabled: true }, canbus: { enabled: true },
vehicles: ["USEASTVIN12345678", "USEASTVIN12345679", "USEASTVIN12345670"] vehicles: ["USEASTVIN12345678", "USEASTVIN12345679", "USEASTVIN12345670"],
}, },
]; ];
const expectedFleetVehiclesData = ["USWESTVIN12345678", "USWESTVIN12345679", "USWESTVIN12345670"]; const expectedFleetVehiclesData = [
"USWESTVIN12345678",
"USWESTVIN12345679",
"USWESTVIN12345670",
];
const expectedFleetCANFiltersData = [ const expectedFleetCANFiltersData = [
{ {
can_id: "123-456", can_id: "123-456",
interval: 789 interval: 789,
}, },
{ {
can_id: "1", can_id: "1",
interval: 1000 interval: 1000,
}, },
{ {
can_id: "1000", can_id: "1000",
interval: 1 interval: 1,
} },
]; ];

View File

@@ -127,12 +127,12 @@ export const VehicleProvider = ({ children }) => {
const result = await api.getVehicle(vin, token); const result = await api.getVehicle(vin, token);
if (result.error) throw new Error(`Get vehicle error. ${result.message}`); if (result.error) throw new Error(`Get vehicle error. ${result.message}`);
setVehicle(result); setVehicle(result ?? []);
return result; return result;
} finally { } finally {
setBusy(false); setBusy(false);
} }
} };
const getVehicles = async (search, token) => { const getVehicles = async (search, token) => {
try { try {
@@ -143,7 +143,7 @@ export const VehicleProvider = ({ children }) => {
throw new Error(`Get vehicles error. ${result.message}`); throw new Error(`Get vehicles error. ${result.message}`);
} }
await addConnections(result.data, token); await addConnections(result.data, token);
setVehicles(result.data); setVehicles(result.data ?? []);
if (result.total) { if (result.total) {
setTotalVehicles(result.total); setTotalVehicles(result.total);
} }
@@ -188,7 +188,7 @@ export const VehicleProvider = ({ children }) => {
} finally { } finally {
setBusy(false); setBusy(false);
} }
} };
const deleteVehicle = async (vin, token) => { const deleteVehicle = async (vin, token) => {
try { try {
@@ -202,7 +202,7 @@ export const VehicleProvider = ({ children }) => {
} finally { } finally {
setBusy(false); setBusy(false);
} }
} };
return ( return (
<VehicleContext.Provider <VehicleContext.Provider
@@ -224,7 +224,7 @@ export const VehicleProvider = ({ children }) => {
getVehicle, getVehicle,
getVehicles, getVehicles,
sendCommand, sendCommand,
updateVehicle updateVehicle,
}} }}
> >
{children} {children}
@@ -246,5 +246,4 @@ const validateVIN = (vin) => {
} }
}; };
export const useVehicleContext = () => useContext(VehicleContext); export const useVehicleContext = () => useContext(VehicleContext);