]> git.basschouten.com Git - openhab-addons.git/blob
3ce2da12834115d389e511ef0fdd2402c7536539
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2024 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.junit.jupiter.api.Assertions.assertEquals;
16 import static org.mockito.ArgumentMatchers.anyString;
17 import static org.mockito.ArgumentMatchers.eq;
18 import static org.mockito.ArgumentMatchers.same;
19 import static org.mockito.Mockito.lenient;
20 import static org.mockito.Mockito.verify;
21
22 import java.util.concurrent.ExecutionException;
23 import java.util.concurrent.TimeoutException;
24
25 import javax.measure.quantity.Energy;
26 import javax.measure.quantity.Power;
27
28 import org.eclipse.jdt.annotation.NonNullByDefault;
29 import org.junit.jupiter.api.BeforeEach;
30 import org.junit.jupiter.api.Test;
31 import org.mockito.ArgumentCaptor;
32 import org.mockito.Captor;
33 import org.openhab.binding.boschshc.internal.exceptions.BoschSHCException;
34 import org.openhab.binding.boschshc.internal.services.powermeter.dto.PowerMeterServiceState;
35 import org.openhab.core.library.types.QuantityType;
36 import org.openhab.core.library.unit.Units;
37 import org.openhab.core.types.RefreshType;
38
39 import com.google.gson.JsonElement;
40 import com.google.gson.JsonParser;
41
42 /**
43  * Abstract unit test implementation for power switch handler with power meter support.
44  * 
45  * @author David Pace - Initial contribution
46  *
47  * @param <T> type of the handler to be tested
48  */
49 @NonNullByDefault
50 public abstract class AbstractPowerSwitchHandlerWithPowerMeterTest<T extends AbstractPowerSwitchHandlerWithPowerMeter>
51         extends AbstractPowerSwitchHandlerTest<T> {
52
53     private @Captor @NonNullByDefault({}) ArgumentCaptor<QuantityType<Power>> powerCaptor;
54
55     private @Captor @NonNullByDefault({}) ArgumentCaptor<QuantityType<Energy>> energyCaptor;
56
57     @BeforeEach
58     public void beforeEach() throws InterruptedException, TimeoutException, ExecutionException, BoschSHCException {
59         super.beforeEach();
60
61         PowerMeterServiceState powerMeterServiceState = new PowerMeterServiceState();
62         powerMeterServiceState.powerConsumption = 12.34d;
63         powerMeterServiceState.energyConsumption = 56.78d;
64         lenient().when(bridgeHandler.getState(anyString(), eq("PowerMeter"), same(PowerMeterServiceState.class)))
65                 .thenReturn(powerMeterServiceState);
66     }
67
68     @Test
69     public void testUpdateChannelPowerMeterServiceState() {
70         JsonElement jsonObject = JsonParser.parseString("""
71                 {
72                   "@type": "powerMeterState",
73                   "powerConsumption": "23",
74                   "energyConsumption": 42
75                 }\
76                 """);
77         getFixture().processUpdate("PowerMeter", jsonObject);
78
79         verify(getCallback()).stateUpdated(eq(getChannelUID(BoschSHCBindingConstants.CHANNEL_POWER_CONSUMPTION)),
80                 powerCaptor.capture());
81         QuantityType<Power> powerValue = powerCaptor.getValue();
82         assertEquals(23, powerValue.intValue());
83
84         verify(getCallback()).stateUpdated(eq(getChannelUID(BoschSHCBindingConstants.CHANNEL_ENERGY_CONSUMPTION)),
85                 energyCaptor.capture());
86         QuantityType<Energy> energyValue = energyCaptor.getValue();
87         assertEquals(42, energyValue.intValue());
88     }
89
90     @Test
91     public void testHandleCommandRefreshPowerConsumptionChannel() {
92         getFixture().handleCommand(getChannelUID(BoschSHCBindingConstants.CHANNEL_POWER_CONSUMPTION),
93                 RefreshType.REFRESH);
94         verify(getCallback()).stateUpdated(getChannelUID(BoschSHCBindingConstants.CHANNEL_POWER_CONSUMPTION),
95                 new QuantityType<>(12.34d, Units.WATT));
96     }
97
98     @Test
99     public void testHandleCommandRefreshEnergyConsumptionChannel() {
100         getFixture().handleCommand(getChannelUID(BoschSHCBindingConstants.CHANNEL_ENERGY_CONSUMPTION),
101                 RefreshType.REFRESH);
102         verify(getCallback()).stateUpdated(getChannelUID(BoschSHCBindingConstants.CHANNEL_ENERGY_CONSUMPTION),
103                 new QuantityType<>(56.78d, Units.WATT_HOUR));
104     }
105 }