CEC-2611 Show HMI online status (#205)
* CEC-2611 Show HMI online status Update car update progress to show ECU Refresh car details car updates tab * clean up
This commit is contained in:
@@ -76,10 +76,11 @@ export const CarUpdatesProvider = ({ children }) => {
|
||||
result = await api.getCarUpdates(search, token);
|
||||
if (result.error)
|
||||
throw new Error(`Get car updates error. ${result.message}`);
|
||||
result.data.forEach((item) => {
|
||||
item.progress = 0;
|
||||
result.data.forEach((item, i) => {
|
||||
item.msg = item.status;
|
||||
applyProgressStatus(item, item);
|
||||
item.progress = 0;
|
||||
applyProgressStatus(item);
|
||||
result.data[i] = Object.assign(result.data[i], item);
|
||||
});
|
||||
setCarUpdates(result.data);
|
||||
if (search && search.offset === 0 && result.total) {
|
||||
@@ -119,28 +120,27 @@ export const CarUpdatesProvider = ({ children }) => {
|
||||
return 0;
|
||||
};
|
||||
|
||||
const applyProgressStatus = (item, status) => {
|
||||
if (validateStatusMessage(status)) {
|
||||
if (status.msg === "downloading") {
|
||||
item.progress = getDownloadProgress(status);
|
||||
const applyProgressStatus = (item) => {
|
||||
if (validateStatusMessage(item)) {
|
||||
if (item.msg === "downloading") {
|
||||
item.progress = getDownloadProgress(item);
|
||||
item.status = `${item.ecu || ""} downloading ${item.progress}%`.trim();
|
||||
return;
|
||||
} else if (status.msg === "package_download_complete") {
|
||||
} else if (item.msg === "package_download_complete") {
|
||||
item.progress = 100;
|
||||
item.status = "download complete";
|
||||
item.status = `${item.ecu || ""} download complete`.trim();
|
||||
return;
|
||||
} else if (status.msg === "installing") {
|
||||
item.progress = getInstallProgress(status);
|
||||
} else if (item.msg === "installing") {
|
||||
item.progress = getInstallProgress(item);
|
||||
item.status = `${item.ecu || ""} installing ${item.progress}%`.trim();
|
||||
return;
|
||||
} else if (status.msg === "package_install_complete") {
|
||||
} else if (item.msg === "package_install_complete") {
|
||||
item.progress = 100;
|
||||
item.status = "install complete";
|
||||
item.status = `${item.ecu || ""} install complete`.trim();
|
||||
return;
|
||||
}
|
||||
}
|
||||
delete item.progress;
|
||||
item.status = status.msg;
|
||||
};
|
||||
|
||||
const applyProgressStatuses = (statuses) => {
|
||||
|
||||
@@ -45,6 +45,7 @@ export const VehicleProvider = ({ children }) => {
|
||||
}
|
||||
cars.forEach((car) => {
|
||||
car.connected = result[car.vin] || false;
|
||||
car.connectedHMI = result[`2:${car.vin}`] || false;
|
||||
});
|
||||
} catch (e) {
|
||||
logger.error(e.stack);
|
||||
|
||||
@@ -13,7 +13,7 @@ import { StatusProvider, useStatusContext } from "./StatusContext";
|
||||
const checkVehicleResult = (error, busy, vehicle) => {
|
||||
checkBaseResults(error, busy);
|
||||
expect(screen.getByTestId("vehicle").innerHTML).toEqual(vehicle);
|
||||
}
|
||||
};
|
||||
|
||||
const checkVehiclesResult = (error, busy, vehicles) => {
|
||||
checkBaseResults(error, busy);
|
||||
@@ -195,12 +195,22 @@ describe("VehicleContext", () => {
|
||||
<>
|
||||
<div data-testid="error">{message}</div>
|
||||
<div data-testid="busy">{busy.toString()}</div>
|
||||
<button data-testid="updateVehicleNull" onClick={() => update(null)} />
|
||||
<button data-testid="updateVehicleNoVIN" onClick={() => update({})} />
|
||||
<button
|
||||
data-testid="updateVehicleNull"
|
||||
onClick={() => update(null)}
|
||||
/>
|
||||
<button
|
||||
data-testid="updateVehicleNoVIN"
|
||||
onClick={() => update({})}
|
||||
/>
|
||||
<button
|
||||
data-testid="updateVehicle"
|
||||
onClick={() =>
|
||||
update({ vin: "3C4PDCBG0ET127145", log_level: "warn", canbus: { enabled: false } })
|
||||
update({
|
||||
vin: "3C4PDCBG0ET127145",
|
||||
log_level: "warn",
|
||||
canbus: { enabled: false },
|
||||
})
|
||||
}
|
||||
/>
|
||||
</>
|
||||
@@ -265,13 +275,17 @@ describe("VehicleContext", () => {
|
||||
<>
|
||||
<div data-testid="error">{message}</div>
|
||||
<div data-testid="busy">{busy.toString()}</div>
|
||||
<button data-testid="deleteVehicleNull" onClick={() => deleteV(null)} />
|
||||
<button data-testid="deleteVehicleNonexistent" onClick={() => deleteV("11111111111111111")} />
|
||||
<button
|
||||
data-testid="deleteVehicleNull"
|
||||
onClick={() => deleteV(null)}
|
||||
/>
|
||||
<button
|
||||
data-testid="deleteVehicleNonexistent"
|
||||
onClick={() => deleteV("11111111111111111")}
|
||||
/>
|
||||
<button
|
||||
data-testid="deleteVehicle"
|
||||
onClick={() =>
|
||||
deleteV("3C4PDCBG0ET127145")
|
||||
}
|
||||
onClick={() => deleteV("3C4PDCBG0ET127145")}
|
||||
/>
|
||||
</>
|
||||
);
|
||||
@@ -321,7 +335,7 @@ describe("VehicleContext", () => {
|
||||
describe("sendCommand", () => {
|
||||
beforeEach(async () => {
|
||||
const TestComp = () => {
|
||||
const {busy, sendCommand} = useVehicleContext();
|
||||
const { busy, sendCommand } = useVehicleContext();
|
||||
const { message, setMessage } = useStatusContext();
|
||||
|
||||
const sendC = async (vin, command) => {
|
||||
@@ -336,25 +350,38 @@ describe("VehicleContext", () => {
|
||||
<>
|
||||
<div data-testid="error">{message}</div>
|
||||
<div data-testid="busy">{busy.toString()}</div>
|
||||
<button data-testid="sendCommandNullVin" onClick={() => sendC(null, {command:"doors_lock"})} />
|
||||
<button data-testid="sendCommandNonexistentVin" onClick={() => sendC(["11111111111111111"], {command:"doors_lock"})} />
|
||||
<button
|
||||
data-testid="sendCommandNullVin"
|
||||
onClick={() => sendC(null, { command: "doors_lock" })}
|
||||
/>
|
||||
<button
|
||||
data-testid="sendCommandNonexistentVin"
|
||||
onClick={() =>
|
||||
sendC(["11111111111111111"], { command: "doors_lock" })
|
||||
}
|
||||
/>
|
||||
<button
|
||||
data-testid="sendCommandVin"
|
||||
onClick={() => sendC("3C4PDCBG0ET127145", {command:"doors_lock"})}
|
||||
onClick={() =>
|
||||
sendC("3C4PDCBG0ET127145", { command: "doors_lock" })
|
||||
}
|
||||
/>
|
||||
<button
|
||||
data-testid="sendCommandWrongCommand"
|
||||
onClick={() => sendC("3C4PDCBG0ET127145", {command:"noSuchCommand"})}
|
||||
onClick={() =>
|
||||
sendC("3C4PDCBG0ET127145", { command: "noSuchCommand" })
|
||||
}
|
||||
/>
|
||||
</>
|
||||
);}
|
||||
render(
|
||||
<StatusProvider>
|
||||
<VehicleProvider>
|
||||
<TestComp />
|
||||
</VehicleProvider>
|
||||
</StatusProvider>
|
||||
</>
|
||||
);
|
||||
};
|
||||
render(
|
||||
<StatusProvider>
|
||||
<VehicleProvider>
|
||||
<TestComp />
|
||||
</VehicleProvider>
|
||||
</StatusProvider>
|
||||
);
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
@@ -364,24 +391,23 @@ describe("VehicleContext", () => {
|
||||
it("initial state", () => {
|
||||
checkBaseResults("", "false");
|
||||
});
|
||||
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
const expectedFilters = [
|
||||
{
|
||||
can_id: "123-456",
|
||||
interval: 789
|
||||
interval: 789,
|
||||
},
|
||||
{
|
||||
can_id: "1",
|
||||
interval: 1000
|
||||
interval: 1000,
|
||||
},
|
||||
{
|
||||
can_id: "1000",
|
||||
interval: 1
|
||||
}
|
||||
]
|
||||
interval: 1,
|
||||
},
|
||||
];
|
||||
|
||||
const expectedVehicleData = {
|
||||
vin: "3C4PDCBG0ET127145",
|
||||
@@ -390,9 +416,16 @@ const expectedVehicleData = {
|
||||
trim: "Basic",
|
||||
ecu_list: "ECUA 2.0.0, ECUB 2.1.1",
|
||||
log_level: "info",
|
||||
canbus: { enabled: true, data_logger_enabled: true, max_mem_buffer_size: 1, max_disk_buffer_size: 2, filters: expectedFilters },
|
||||
canbus: {
|
||||
enabled: true,
|
||||
data_logger_enabled: true,
|
||||
max_mem_buffer_size: 1,
|
||||
max_disk_buffer_size: 2,
|
||||
filters: expectedFilters,
|
||||
},
|
||||
connected: true,
|
||||
}
|
||||
connectedHMI: false,
|
||||
};
|
||||
|
||||
const expectedVehiclesData = [
|
||||
{
|
||||
@@ -402,19 +435,44 @@ const expectedVehiclesData = [
|
||||
trim: "Basic",
|
||||
ecu_list: "ECUA 2.0.0, ECUB 2.1.1",
|
||||
log_level: "info",
|
||||
canbus: { enabled: true, data_logger_enabled: true, max_mem_buffer_size: 1, max_disk_buffer_size: 2, filters: expectedFilters },
|
||||
canbus: {
|
||||
enabled: true,
|
||||
data_logger_enabled: true,
|
||||
max_mem_buffer_size: 1,
|
||||
max_disk_buffer_size: 2,
|
||||
filters: expectedFilters,
|
||||
},
|
||||
connected: true,
|
||||
connectedHMI: false,
|
||||
},
|
||||
{ vin: "1G1FP87S3GN100062", connected: true, connectedHMI: false },
|
||||
{
|
||||
vin: "1HGCG325XYA062256",
|
||||
year: 2021,
|
||||
connected: true,
|
||||
connectedHMI: false,
|
||||
},
|
||||
{
|
||||
vin: "1J4GZ78YXWC160024",
|
||||
year: 2021,
|
||||
model: "Ocean",
|
||||
connected: true,
|
||||
connectedHMI: false,
|
||||
},
|
||||
{
|
||||
vin: "2C3CCAAG8CH222800",
|
||||
model: "Ocean",
|
||||
trim: "Basic",
|
||||
connected: true,
|
||||
connectedHMI: false,
|
||||
},
|
||||
{ vin: "1G1FP87S3GN100062", connected: true },
|
||||
{ vin: "1HGCG325XYA062256", year: 2021, connected: true },
|
||||
{ vin: "1J4GZ78YXWC160024", year: 2021, model: "Ocean", connected: true },
|
||||
{ vin: "2C3CCAAG8CH222800", model: "Ocean", trim: "Basic", connected: true },
|
||||
{
|
||||
vin: "KNADM4A39C6028108",
|
||||
year: 2021,
|
||||
model: "Ocean",
|
||||
trim: "Basic",
|
||||
connected: true,
|
||||
connectedHMI: false,
|
||||
},
|
||||
{
|
||||
vin: "1G11C5SL9FF153507",
|
||||
@@ -422,5 +480,6 @@ const expectedVehiclesData = [
|
||||
model: "Ocean",
|
||||
trim: "Basic",
|
||||
connected: true,
|
||||
connectedHMI: false,
|
||||
},
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user