]> git.basschouten.com Git - openhab-addons.git/blob
3de394d8305b59074bd5648a94be5d3e32097ad6
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.mybmw.internal.dto;
14
15 import static org.junit.jupiter.api.Assertions.assertEquals;
16
17 import java.time.LocalDateTime;
18 import java.time.ZoneId;
19 import java.time.ZonedDateTime;
20 import java.util.List;
21
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;
30
31 /**
32  * The {@link VehicleStatusTest} tests stored fingerprint responses from BMW API
33  *
34  * @author Bernd Weymann - Initial contribution
35  */
36 @NonNullByDefault
37 @SuppressWarnings("null")
38 public class VehicleStatusTest {
39
40     @Test
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(),
48                 "Service Date");
49
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");
54     }
55
56     @Test
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");
69     }
70
71     @Test
72     public void testGuessRange() {
73         /**
74          * PHEV G01
75          * fuelIndicator electric unit = %
76          * fuelIndicator fuel unit = l
77          * fuelIndicator hybrid unit = null
78          */
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");
86
87         /**
88          * Electric REX I01
89          * fuelIndicator electric unit = %
90          * fuelIndicator fuel unit = null
91          * fuelIndicator hybrid unit = null
92          */
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");
100
101         /**
102          * PHEV G05
103          * fuelIndicator electric unit = %
104          * fuelIndicator fuel unit = %
105          * fuelIndicator hybrid unit = null
106          */
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");
114     }
115 }