Merge pull request #480 from Fisker-Inc/CEC-5356

CEC-5356: use `after_utc` to get can signals
This commit is contained in:
Alexander Andrews
2023-11-08 09:24:33 -08:00
committed by GitHub
4 changed files with 104 additions and 35 deletions

View File

@@ -1,8 +1,8 @@
import React, {useContext, useState} from "react";
import React, { useContext, useState } from "react";
import api from "../../services/vehiclesAPI";
import { LocalDateTimeString } from "../../utils/dates";
import {useInterval} from "usehooks-ts";
import { useInterval } from "usehooks-ts";
const CANSignalContext = React.createContext();
@@ -26,31 +26,43 @@ const transformSignals = (signals) =>
.flat();
export const CANSignalProvider = ({ token, children }) => {
// auto scale polling if not getting response
const delays = [500, 1500, 3000, 6000];
const [delayIndex, setDelayIndex] = useState(2);
const [vin, setVIN] = useState(null);
const [signals, setSignals] = useState([]);
const [delay, setDelay] = useState(500);
const [utc, setUtc] = useState(undefined);
useInterval(
() => {
getCANSignals()
}, vin?delay:null
)
}, vin ? delays[delayIndex] : null
);
const getCANSignals = async () => {
try {
if (!vin) return;
const result = await api.getCANSignals(vin, token);
if (result.error)
const result = await api.getCANSignals(vin, {
after_utc: utc,
}, token);
if (result.error) {
throw new Error(`Get CAN signals error. ${result.message}`);
}
const mostRecentTimestamp = result.data?.[0]?.timestamp;
if (mostRecentTimestamp) {
setUtc(new Date(mostRecentTimestamp).getTime() - 50); // apply slight offset to ensure last CAN Signals sent before sleep are returned.
} else {
setUtc(new Date().getTime());
}
const items = transformSignals(result.data);
if (items.length > 0) {
setDelay(500);
setSignals(items);
} else {
setDelay(1000);
setSignals([BlankSignal("No signals")]);
}
} catch (e) {
@@ -61,8 +73,12 @@ export const CANSignalProvider = ({ token, children }) => {
return (
<CANSignalContext.Provider
value={{
queryDate: new Date(utc).toLocaleTimeString(),
signals,
setVIN,
delays,
delayIndex,
setDelayIndex,
}}
>
{children}

View File

@@ -8,7 +8,7 @@ import {
waitFor,
act,
} from "@testing-library/react";
import {CANSignalProvider, useCANSignalContext} from "./CANSignalsContext";
import { CANSignalProvider, useCANSignalContext } from "./CANSignalsContext";
const checkSignalsResults = (filters) => {
expect(screen.getByTestId("signals").innerHTML).toEqual(filters);
@@ -19,14 +19,15 @@ describe("CANSignalsContext", () => {
beforeEach(() => {
jest.useFakeTimers("setInterval");
const TestComp = () => {
const { signals, setVIN } = useCANSignalContext();
const { signals, setVIN, setDelayIndex } = useCANSignalContext();
setDelayIndex(0);
return (
<>
<div data-testid="signals">{JSON.stringify(signals)}</div>
<button
data-testid="getSignals"
onClick={()=>{setVIN("TESTVIN1234567890")}}
onClick={() => { setVIN("TESTVIN1234567890") }}
/>
</>
);
@@ -54,12 +55,12 @@ describe("CANSignalsContext", () => {
await waitFor(() =>
expect(screen.getByTestId("signals").innerHTML).toBe("[]")
);
jest.advanceTimersByTime(501);
jest.advanceTimersByTime(3001);
})
await waitFor(() => {
return expect(screen.getByTestId("signals").innerHTML).not.toBe("[]");
} );
});
checkSignalsResults(JSON.stringify(expectedSignalsData));
});