]> git.basschouten.com Git - openhab-addons.git/blob
6f6707e4db72042eaa3306bc6e29b6af66bfabbb
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2022 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.boschshc.internal.devices;
14
15 import static org.mockito.Mockito.verify;
16
17 import org.eclipse.jdt.annotation.NonNullByDefault;
18 import org.junit.jupiter.api.Test;
19 import org.openhab.core.library.types.DecimalType;
20 import org.openhab.core.library.types.OnOffType;
21 import org.openhab.core.thing.ChannelUID;
22 import org.openhab.core.types.UnDefType;
23
24 import com.google.gson.JsonElement;
25 import com.google.gson.JsonParser;
26
27 /**
28  * Abstract test implementation for battery-powered devices.
29  *
30  * @author David Pace - Initial contribution
31  *
32  * @param <T> type of the battery-powered device to be tested
33  */
34 @NonNullByDefault
35 public abstract class AbstractBatteryPoweredDeviceHandlerTest<T extends AbstractBatteryPoweredDeviceHandler>
36         extends AbstractBoschSHCDeviceHandlerTest<T> {
37
38     @Test
39     public void testProcessUpdate_BatteryLevel_LowBattery() {
40         JsonElement deviceServiceData = JsonParser.parseString("{ \n" + "    \"@type\":\"DeviceServiceData\",\n"
41                 + "    \"path\":\"/devices/hdm:ZigBee:000d6f0004b93361/services/BatteryLevel\",\n"
42                 + "    \"id\":\"BatteryLevel\",\n" + "    \"deviceId\":\"hdm:ZigBee:000d6f0004b93361\",\n"
43                 + "    \"faults\":{ \n" + "        \"entries\":[\n" + "          {\n"
44                 + "            \"type\":\"LOW_BATTERY\",\n" + "            \"category\":\"WARNING\"\n" + "          }\n"
45                 + "        ]\n" + "    }\n" + "}");
46         getFixture().processUpdate("BatteryLevel", deviceServiceData);
47         verify(getCallback()).stateUpdated(
48                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_BATTERY_LEVEL),
49                 new DecimalType(10));
50         verify(getCallback()).stateUpdated(
51                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_LOW_BATTERY), OnOffType.ON);
52     }
53
54     @Test
55     public void testProcessUpdate_BatteryLevel_CriticalLow() {
56         JsonElement deviceServiceData = JsonParser.parseString("{ \n" + "    \"@type\":\"DeviceServiceData\",\n"
57                 + "    \"path\":\"/devices/hdm:ZigBee:000d6f0004b93361/services/BatteryLevel\",\n"
58                 + "    \"id\":\"BatteryLevel\",\n" + "    \"deviceId\":\"hdm:ZigBee:000d6f0004b93361\",\n"
59                 + "    \"faults\":{ \n" + "        \"entries\":[\n" + "          {\n"
60                 + "            \"type\":\"CRITICAL_LOW\",\n" + "            \"category\":\"WARNING\"\n"
61                 + "          }\n" + "        ]\n" + "    }\n" + "}");
62         getFixture().processUpdate("BatteryLevel", deviceServiceData);
63         verify(getCallback()).stateUpdated(
64                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_BATTERY_LEVEL),
65                 new DecimalType(1));
66         verify(getCallback()).stateUpdated(
67                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_LOW_BATTERY), OnOffType.ON);
68     }
69
70     @Test
71     public void testProcessUpdate_BatteryLevel_CriticallyLowBattery() {
72         JsonElement deviceServiceData = JsonParser.parseString("{ \n" + "    \"@type\":\"DeviceServiceData\",\n"
73                 + "    \"path\":\"/devices/hdm:ZigBee:000d6f0004b93361/services/BatteryLevel\",\n"
74                 + "    \"id\":\"BatteryLevel\",\n" + "    \"deviceId\":\"hdm:ZigBee:000d6f0004b93361\",\n"
75                 + "    \"faults\":{ \n" + "        \"entries\":[\n" + "          {\n"
76                 + "            \"type\":\"CRITICALLY_LOW_BATTERY\",\n" + "            \"category\":\"WARNING\"\n"
77                 + "          }\n" + "        ]\n" + "    }\n" + "}");
78         getFixture().processUpdate("BatteryLevel", deviceServiceData);
79         verify(getCallback()).stateUpdated(
80                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_BATTERY_LEVEL),
81                 new DecimalType(1));
82         verify(getCallback()).stateUpdated(
83                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_LOW_BATTERY), OnOffType.ON);
84     }
85
86     @Test
87     public void testProcessUpdate_BatteryLevel_OK() {
88         JsonElement deviceServiceData = JsonParser.parseString("{ \n" + "    \"@type\":\"DeviceServiceData\",\n"
89                 + "    \"path\":\"/devices/hdm:ZigBee:000d6f0004b93361/services/BatteryLevel\",\n"
90                 + "    \"id\":\"BatteryLevel\",\n" + "    \"deviceId\":\"hdm:ZigBee:000d6f0004b93361\" }");
91         getFixture().processUpdate("BatteryLevel", deviceServiceData);
92         verify(getCallback()).stateUpdated(
93                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_BATTERY_LEVEL),
94                 new DecimalType(100));
95         verify(getCallback()).stateUpdated(
96                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_LOW_BATTERY), OnOffType.OFF);
97     }
98
99     @Test
100     public void testProcessUpdate_BatteryLevel_NotAvailable() {
101         JsonElement deviceServiceData = JsonParser.parseString("{ \n" + "    \"@type\":\"DeviceServiceData\",\n"
102                 + "    \"path\":\"/devices/hdm:ZigBee:000d6f0004b93361/services/BatteryLevel\",\n"
103                 + "    \"id\":\"BatteryLevel\",\n" + "    \"deviceId\":\"hdm:ZigBee:000d6f0004b93361\",\n"
104                 + "    \"faults\":{ \n" + "        \"entries\":[\n" + "          {\n"
105                 + "            \"type\":\"NOT_AVAILABLE\",\n" + "            \"category\":\"WARNING\"\n"
106                 + "          }\n" + "        ]\n" + "    }\n" + "}");
107         getFixture().processUpdate("BatteryLevel", deviceServiceData);
108         verify(getCallback()).stateUpdated(
109                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_BATTERY_LEVEL), UnDefType.UNDEF);
110         verify(getCallback()).stateUpdated(
111                 new ChannelUID(getThing().getUID(), BoschSHCBindingConstants.CHANNEL_LOW_BATTERY), OnOffType.OFF);
112     }
113 }