]> git.basschouten.com Git - openhab-addons.git/blob
750e1786dd56f553a484ded350da8d959286a577
[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.tado.tests;
14
15 import static org.junit.jupiter.api.Assertions.*;
16
17 import java.util.ArrayList;
18 import java.util.Optional;
19
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;
33
34 import com.google.gson.Gson;
35
36 /**
37  * The {@link CapabilitiesSupportTest} implements tests of the capabilities support evaluator.
38  *
39  * @author Andrew Fiddian-Green - Initial contributions
40  *
41  */
42 @NonNullByDefault
43 public class CapabilitiesSupportTest {
44
45     /**
46      * Test capabilities support (heating)
47      */
48     @Test
49     void testCapabilitiesSupportHeating() {
50         GenericZoneCapabilities caps = new GenericZoneCapabilities();
51         caps.setType(TadoSystemType.HEATING);
52
53         CapabilitiesSupport capabilitiesSupport = new CapabilitiesSupport(caps, Optional.empty());
54
55         assertTrue(capabilitiesSupport.heatingPower());
56
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());
64     }
65
66     /**
67      * Test capabilities support (air conditioning)
68      */
69     @Test
70     void testCapabilitiesSupportAirContitioning() {
71         AirConditioningCapabilities caps = new AirConditioningCapabilities();
72         caps.setType(TadoSystemType.AIR_CONDITIONING);
73
74         AcModeCapabilities heat = new AcModeCapabilities();
75         heat.addFanLevelItem(ACFanLevel.LEVEL1);
76         heat.addSwingsItem(Power.OFF);
77         caps.HEAT(heat);
78
79         AcModeCapabilities cool = new AcModeCapabilities();
80         cool.addFanSpeedsItem(AcFanSpeed.AUTO);
81         cool.addVerticalSwingItem(ACVerticalSwing.DOWN);
82         caps.COOL(cool);
83
84         CapabilitiesSupport capabilitiesSupport = new CapabilitiesSupport(caps, Optional.empty());
85
86         assertTrue(capabilitiesSupport.fanLevel());
87         assertTrue(capabilitiesSupport.verticalSwing());
88         assertTrue(capabilitiesSupport.acPower());
89         assertTrue(capabilitiesSupport.fanSpeed());
90         assertTrue(capabilitiesSupport.swing());
91
92         assertFalse(capabilitiesSupport.horizontalSwing());
93         assertFalse(capabilitiesSupport.light());
94         assertFalse(capabilitiesSupport.heatingPower());
95     }
96
97     /**
98      * Test capabilities support (battery)
99      */
100     @Test
101     void testCapabilitiesBattery() {
102         CapabilitiesSupport capabilitiesSupport;
103         GenericZoneCapabilities caps = new GenericZoneCapabilities();
104         caps.setType(TadoSystemType.HEATING);
105
106         String jsonWithBattery = "{\"deviceType\": \"abc\", \"serialNo\": \"123\", \"batteryState\": \"NORMAL\"}";
107         String jsonNoBattery = "{\"deviceType\": \"xyz\", \"serialNo\": \"456\"}";
108
109         Gson gson = new Gson();
110
111         Zone zone = new Zone();
112         Optional<Zone> optionalZone = Optional.of(zone);
113
114         // null devices list
115         capabilitiesSupport = new CapabilitiesSupport(caps, optionalZone);
116         assertFalse(capabilitiesSupport.batteryLowAlarm());
117
118         // empty devices list
119         zone.devices(new ArrayList<>());
120         capabilitiesSupport = new CapabilitiesSupport(caps, optionalZone);
121         assertFalse(capabilitiesSupport.batteryLowAlarm());
122
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));
127
128         capabilitiesSupport = new CapabilitiesSupport(caps, optionalZone);
129         assertFalse(capabilitiesSupport.batteryLowAlarm());
130
131         // at least one battery device in list
132         zone.addDevicesItem(gson.fromJson(jsonWithBattery, ControlDevice.class));
133
134         capabilitiesSupport = new CapabilitiesSupport(caps, optionalZone);
135         assertTrue(capabilitiesSupport.batteryLowAlarm());
136
137         // empty optional
138         capabilitiesSupport = new CapabilitiesSupport(caps, Optional.empty());
139         assertFalse(capabilitiesSupport.batteryLowAlarm());
140     }
141 }