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.tado.tests;
15 import static org.junit.jupiter.api.Assertions.*;
17 import java.util.ArrayList;
18 import java.util.Optional;
20 import org.eclipse.jdt.annotation.NonNullByDefault;
21 import org.junit.jupiter.api.Test;
22 import org.openhab.binding.tado.internal.CapabilitiesSupport;
23 import org.openhab.binding.tado.internal.api.model.ACFanLevel;
24 import org.openhab.binding.tado.internal.api.model.ACVerticalSwing;
25 import org.openhab.binding.tado.internal.api.model.AcFanSpeed;
26 import org.openhab.binding.tado.internal.api.model.AcModeCapabilities;
27 import org.openhab.binding.tado.internal.api.model.AirConditioningCapabilities;
28 import org.openhab.binding.tado.internal.api.model.ControlDevice;
29 import org.openhab.binding.tado.internal.api.model.GenericZoneCapabilities;
30 import org.openhab.binding.tado.internal.api.model.Power;
31 import org.openhab.binding.tado.internal.api.model.TadoSystemType;
32 import org.openhab.binding.tado.internal.api.model.Zone;
34 import com.google.gson.Gson;
37 * The {@link CapabilitiesSupportTest} implements tests of the capabilities support evaluator.
39 * @author Andrew Fiddian-Green - Initial contributions
43 public class CapabilitiesSupportTest {
46 * Test capabilities support (heating)
49 void testCapabilitiesSupportHeating() {
50 GenericZoneCapabilities caps = new GenericZoneCapabilities();
51 caps.setType(TadoSystemType.HEATING);
53 CapabilitiesSupport capabilitiesSupport = new CapabilitiesSupport(caps, Optional.empty());
55 assertTrue(capabilitiesSupport.heatingPower());
57 assertFalse(capabilitiesSupport.fanLevel());
58 assertFalse(capabilitiesSupport.fanSpeed());
59 assertFalse(capabilitiesSupport.horizontalSwing());
60 assertFalse(capabilitiesSupport.light());
61 assertFalse(capabilitiesSupport.swing());
62 assertFalse(capabilitiesSupport.verticalSwing());
63 assertFalse(capabilitiesSupport.acPower());
67 * Test capabilities support (air conditioning)
70 void testCapabilitiesSupportAirContitioning() {
71 AirConditioningCapabilities caps = new AirConditioningCapabilities();
72 caps.setType(TadoSystemType.AIR_CONDITIONING);
74 AcModeCapabilities heat = new AcModeCapabilities();
75 heat.addFanLevelItem(ACFanLevel.LEVEL1);
76 heat.addSwingsItem(Power.OFF);
79 AcModeCapabilities cool = new AcModeCapabilities();
80 cool.addFanSpeedsItem(AcFanSpeed.AUTO);
81 cool.addVerticalSwingItem(ACVerticalSwing.DOWN);
84 CapabilitiesSupport capabilitiesSupport = new CapabilitiesSupport(caps, Optional.empty());
86 assertTrue(capabilitiesSupport.fanLevel());
87 assertTrue(capabilitiesSupport.verticalSwing());
88 assertTrue(capabilitiesSupport.acPower());
89 assertTrue(capabilitiesSupport.fanSpeed());
90 assertTrue(capabilitiesSupport.swing());
92 assertFalse(capabilitiesSupport.horizontalSwing());
93 assertFalse(capabilitiesSupport.light());
94 assertFalse(capabilitiesSupport.heatingPower());
98 * Test capabilities support (battery)
101 void testCapabilitiesBattery() {
102 CapabilitiesSupport capabilitiesSupport;
103 GenericZoneCapabilities caps = new GenericZoneCapabilities();
104 caps.setType(TadoSystemType.HEATING);
106 String jsonWithBattery = "{\"deviceType\": \"abc\", \"serialNo\": \"123\", \"batteryState\": \"NORMAL\"}";
107 String jsonNoBattery = "{\"deviceType\": \"xyz\", \"serialNo\": \"456\"}";
109 Gson gson = new Gson();
111 Zone zone = new Zone();
112 Optional<Zone> optionalZone = Optional.of(zone);
115 capabilitiesSupport = new CapabilitiesSupport(caps, optionalZone);
116 assertFalse(capabilitiesSupport.batteryLowAlarm());
118 // empty devices list
119 zone.devices(new ArrayList<>());
120 capabilitiesSupport = new CapabilitiesSupport(caps, optionalZone);
121 assertFalse(capabilitiesSupport.batteryLowAlarm());
123 // list of non battery devices
124 zone.addDevicesItem(gson.fromJson(jsonNoBattery, ControlDevice.class));
125 zone.addDevicesItem(gson.fromJson(jsonNoBattery, ControlDevice.class));
126 zone.addDevicesItem(gson.fromJson(jsonNoBattery, ControlDevice.class));
128 capabilitiesSupport = new CapabilitiesSupport(caps, optionalZone);
129 assertFalse(capabilitiesSupport.batteryLowAlarm());
131 // at least one battery device in list
132 zone.addDevicesItem(gson.fromJson(jsonWithBattery, ControlDevice.class));
134 capabilitiesSupport = new CapabilitiesSupport(caps, optionalZone);
135 assertTrue(capabilitiesSupport.batteryLowAlarm());
138 capabilitiesSupport = new CapabilitiesSupport(caps, Optional.empty());
139 assertFalse(capabilitiesSupport.batteryLowAlarm());