2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.mybmw.internal.dto;
15 import static org.junit.jupiter.api.Assertions.assertEquals;
17 import java.time.LocalDateTime;
18 import java.time.ZoneId;
19 import java.time.ZonedDateTime;
20 import java.util.List;
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.junit.jupiter.api.Test;
24 import org.openhab.binding.mybmw.internal.dto.vehicle.Vehicle;
25 import org.openhab.binding.mybmw.internal.util.FileReader;
26 import org.openhab.binding.mybmw.internal.utils.Constants;
27 import org.openhab.binding.mybmw.internal.utils.Converter;
28 import org.openhab.binding.mybmw.internal.utils.VehicleStatusUtils;
29 import org.openhab.core.library.types.DateTimeType;
32 * The {@link VehicleStatusTest} tests stored fingerprint responses from BMW API
34 * @author Bernd Weymann - Initial contribution
37 @SuppressWarnings("null")
38 public class VehicleStatusTest {
41 public void testServiceDate() {
42 String json = FileReader.readFileInString("src/test/resources/responses/I01_REX/vehicles.json");
43 Vehicle v = Converter.getVehicle(Constants.ANONYMOUS, json);
44 assertEquals(Constants.ANONYMOUS, v.vin, "VIN check");
45 assertEquals("2023-11-01T00:00",
46 ((DateTimeType) VehicleStatusUtils.getNextServiceDate(v.properties.serviceRequired)).getZonedDateTime()
47 .toLocalDateTime().toString(),
50 ZonedDateTime zdt = ZonedDateTime.parse("2021-12-21T16:46:02Z").withZoneSameInstant(ZoneId.systemDefault());
51 LocalDateTime ldt = zdt.toLocalDateTime();
52 assertEquals(ldt.format(Converter.DATE_INPUT_PATTERN),
53 Converter.zonedToLocalDateTime(v.properties.lastUpdatedAt), "Last update time");
57 public void testBevRexValues() {
58 String vehiclesJSON = FileReader.readFileInString("src/test/resources/responses/I01_REX/vehicles.json");
59 List<Vehicle> vehicleList = Converter.getVehicleList(vehiclesJSON);
60 assertEquals(1, vehicleList.size(), "Vehicles found");
61 Vehicle v = vehicleList.get(0);
62 assertEquals("BMW", v.brand, "Car brand");
63 assertEquals(true, v.properties.areDoorsClosed, "Doors Closed");
64 assertEquals(76, v.properties.electricRange.distance.value, "Electric Range");
65 assertEquals(9.876, v.properties.vehicleLocation.coordinates.longitude, 0.1, "Location lon");
66 assertEquals("immediateCharging", v.status.chargingProfile.chargingMode, "Charging Mode");
67 assertEquals(2, v.status.chargingProfile.getTimerId(2).id, "Timer ID");
68 assertEquals("[sunday]", v.status.chargingProfile.getTimerId(2).timerWeekDays.toString(), "Timer Weekdays");
72 public void testGuessRange() {
75 * fuelIndicator electric unit = %
76 * fuelIndicator fuel unit = l
77 * fuelIndicator hybrid unit = null
79 String vehiclesJSON = FileReader.readFileInString("src/test/resources/responses/G01/vehicles_v2_bmw_0.json");
80 List<Vehicle> vehicleList = Converter.getVehicleList(vehiclesJSON);
81 assertEquals(1, vehicleList.size(), "Vehicles found");
82 Vehicle vehicle = vehicleList.get(0);
83 assertEquals(2, VehicleStatusUtils.getRange(Constants.UNIT_PRECENT_JSON, vehicle), "Electric Range");
84 assertEquals(437, VehicleStatusUtils.getRange(Constants.UNIT_LITER_JSON, vehicle), "Fuel Range");
85 assertEquals(439, VehicleStatusUtils.getRange(Constants.PHEV, vehicle), "Hybrid Range");
89 * fuelIndicator electric unit = %
90 * fuelIndicator fuel unit = null
91 * fuelIndicator hybrid unit = null
93 vehiclesJSON = FileReader.readFileInString("src/test/resources/responses/I01_REX/vehicles_v2_bmw_0.json");
94 vehicleList = Converter.getVehicleList(vehiclesJSON);
95 assertEquals(1, vehicleList.size(), "Vehicles found");
96 vehicle = vehicleList.get(0);
97 assertEquals(164, VehicleStatusUtils.getRange(Constants.UNIT_PRECENT_JSON, vehicle), "Electric Range");
98 assertEquals(64, VehicleStatusUtils.getRange(Constants.UNIT_LITER_JSON, vehicle), "Fuel Range");
99 assertEquals(228, VehicleStatusUtils.getRange(Constants.PHEV, vehicle), "Hybrid Range");
103 * fuelIndicator electric unit = %
104 * fuelIndicator fuel unit = %
105 * fuelIndicator hybrid unit = null
107 vehiclesJSON = FileReader.readFileInString("src/test/resources/responses/G05/vehicles_v2_bmw_0.json");
108 vehicleList = Converter.getVehicleList(vehiclesJSON);
109 assertEquals(1, vehicleList.size(), "Vehicles found");
110 vehicle = vehicleList.get(0);
111 assertEquals(48, VehicleStatusUtils.getRange(Constants.UNIT_PRECENT_JSON, vehicle), "Electric Range");
112 assertEquals(418, VehicleStatusUtils.getRange(Constants.UNIT_LITER_JSON, vehicle), "Fuel Range");
113 assertEquals(466, VehicleStatusUtils.getRange(Constants.PHEV, vehicle), "Hybrid Range");