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.bsblan.internal.helper;
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.openhab.binding.bsblan.internal.BsbLanBindingConstants.*;
18 import org.eclipse.jdt.annotation.NonNullByDefault;
19 import org.junit.jupiter.api.Test;
20 import org.openhab.binding.bsblan.internal.api.dto.BsbLanApiParameterDTO;
21 import org.openhab.core.library.types.DecimalType;
22 import org.openhab.core.library.types.OnOffType;
23 import org.openhab.core.library.types.PercentType;
24 import org.openhab.core.library.types.QuantityType;
25 import org.openhab.core.library.types.StringType;
26 import org.openhab.core.library.unit.SIUnits;
27 import org.openhab.core.types.State;
30 * The {@link BsbLanParameterConverterTests} class implements tests
31 * for {@link BsbLanParameterConverter}.
33 * @author Peter Schraffl - Initial contribution
36 public class BsbLanParameterConverterTests {
39 public void testGetStatesForStringParameter() {
40 BsbLanApiParameterDTO parameter = new BsbLanApiParameterDTO();
41 parameter.dataType = BsbLanApiParameterDTO.DataType.DT_STRN;
42 parameter.description = "Test-Description";
43 parameter.name = "Test-Name";
44 parameter.unit = "Test-Unit";
45 parameter.value = "Test-Value";
49 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_DATATYPE, parameter);
51 assertEquals(new DecimalType(BsbLanApiParameterDTO.DataType.DT_STRN.getValue()), state.as(DecimalType.class));
53 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_DESCRIPTION, parameter);
55 assertEquals(new StringType("Test-Description"), state.as(StringType.class));
57 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_NAME, parameter);
59 assertEquals(new StringType("Test-Name"), state.as(StringType.class));
61 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_UNIT, parameter);
63 assertEquals(new StringType("Test-Unit"), state.as(StringType.class));
65 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_NUMBER_VALUE, parameter);
68 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_STRING_VALUE, parameter);
70 assertEquals(new StringType("Test-Value"), state.as(StringType.class));
72 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_SWITCH_VALUE, parameter);
74 assertEquals(OnOffType.ON, state);
78 public void testGetStatesForEnumParameterValue1() {
79 BsbLanApiParameterDTO parameter = new BsbLanApiParameterDTO();
80 parameter.dataType = BsbLanApiParameterDTO.DataType.DT_ENUM;
81 parameter.description = "Test-Description";
82 parameter.name = "Test-Name";
83 parameter.unit = "Test-Unit";
84 parameter.value = "1";
88 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_DATATYPE, parameter);
90 assertEquals(new DecimalType(BsbLanApiParameterDTO.DataType.DT_ENUM.getValue()), state.as(DecimalType.class));
92 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_DESCRIPTION, parameter);
94 assertEquals(new StringType("Test-Description"), state.as(StringType.class));
96 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_NAME, parameter);
98 assertEquals(new StringType("Test-Name"), state.as(StringType.class));
100 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_UNIT, parameter);
101 assertNotNull(state);
102 assertEquals(new StringType("Test-Unit"), state.as(StringType.class));
104 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_NUMBER_VALUE, parameter);
105 assertNotNull(state);
106 assertEquals(new DecimalType(1), state.as(DecimalType.class));
108 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_STRING_VALUE, parameter);
109 assertNotNull(state);
110 assertEquals(new StringType("1"), state.as(StringType.class));
112 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_SWITCH_VALUE, parameter);
113 assertNotNull(state);
114 assertEquals(OnOffType.ON, state);
118 public void testGetStatesForEnumParameterValue0() {
119 BsbLanApiParameterDTO parameter = new BsbLanApiParameterDTO();
120 parameter.dataType = BsbLanApiParameterDTO.DataType.DT_ENUM;
121 parameter.description = "Test-Description";
122 parameter.name = "Test-Name";
123 parameter.unit = "Test-Unit";
124 parameter.value = "0";
128 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_DATATYPE, parameter);
129 assertNotNull(state);
130 assertEquals(new DecimalType(BsbLanApiParameterDTO.DataType.DT_ENUM.getValue()), state.as(DecimalType.class));
132 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_DESCRIPTION, parameter);
133 assertNotNull(state);
134 assertEquals(new StringType("Test-Description"), state.as(StringType.class));
136 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_NAME, parameter);
137 assertNotNull(state);
138 assertEquals(new StringType("Test-Name"), state.as(StringType.class));
140 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_UNIT, parameter);
141 assertNotNull(state);
142 assertEquals(new StringType("Test-Unit"), state.as(StringType.class));
144 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_NUMBER_VALUE, parameter);
145 assertNotNull(state);
146 assertEquals(new DecimalType(0), state.as(DecimalType.class));
148 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_STRING_VALUE, parameter);
149 assertNotNull(state);
150 assertEquals(new StringType("0"), state.as(StringType.class));
152 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_SWITCH_VALUE, parameter);
153 assertNotNull(state);
154 assertEquals(OnOffType.OFF, state);
158 public void testGetStatesForValueParameterValue() {
159 BsbLanApiParameterDTO parameter = new BsbLanApiParameterDTO();
160 parameter.dataType = BsbLanApiParameterDTO.DataType.DT_VALS;
161 parameter.description = "Test-Description";
162 parameter.name = "Test-Name";
163 parameter.unit = "Test-Unit";
164 parameter.value = "22.5";
168 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_DATATYPE, parameter);
169 assertNotNull(state);
170 assertEquals(new DecimalType(BsbLanApiParameterDTO.DataType.DT_VALS.getValue()), state.as(DecimalType.class));
172 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_DESCRIPTION, parameter);
173 assertNotNull(state);
174 assertEquals(new StringType("Test-Description"), state.as(StringType.class));
176 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_NAME, parameter);
177 assertNotNull(state);
178 assertEquals(new StringType("Test-Name"), state.as(StringType.class));
180 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_UNIT, parameter);
181 assertNotNull(state);
182 assertEquals(new StringType("Test-Unit"), state.as(StringType.class));
184 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_NUMBER_VALUE, parameter);
185 assertNotNull(state);
186 assertEquals(new DecimalType(22.5), state.as(DecimalType.class));
188 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_STRING_VALUE, parameter);
189 assertNotNull(state);
190 assertEquals(new StringType("22.5"), state.as(StringType.class));
192 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_SWITCH_VALUE, parameter);
193 assertNotNull(state);
194 assertEquals(OnOffType.ON, state);
198 public void testGetStatesEscapesHtml() {
199 BsbLanApiParameterDTO parameter = new BsbLanApiParameterDTO();
200 parameter.dataType = BsbLanApiParameterDTO.DataType.DT_VALS;
201 parameter.description = "Test-Description";
202 parameter.name = "Test-Name";
203 parameter.unit = "°C";
204 parameter.value = "22.5";
208 state = BsbLanParameterConverter.getState(PARAMETER_CHANNEL_UNIT, parameter);
209 assertNotNull(state);
210 assertEquals(new StringType("°C"), state.as(StringType.class));
214 public void testGetValueForReadonlyChannels() {
215 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_DATATYPE, OnOffType.ON));
216 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_DESCRIPTION, OnOffType.ON));
217 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NAME, OnOffType.ON));
218 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_UNIT, OnOffType.ON));
222 public void testGetValueForNumberValueChannel() {
223 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, OnOffType.ON), "1");
224 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, OnOffType.OFF), "0");
225 assertEquals("42", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new DecimalType(42)));
226 assertEquals("22.5", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new DecimalType(22.5)));
227 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE,
228 new StringType("Not a number value")));
229 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new StringType("")));
230 assertEquals("75", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE, new PercentType(75)));
231 assertEquals("22.5", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_NUMBER_VALUE,
232 new QuantityType<>(22.5, SIUnits.CELSIUS)));
236 public void testGetValueForSwitchValueChannel() {
237 assertEquals("1", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_SWITCH_VALUE, OnOffType.ON));
238 assertEquals("0", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_SWITCH_VALUE, OnOffType.OFF));
239 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_SWITCH_VALUE, new DecimalType(1)));
240 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_SWITCH_VALUE, new DecimalType(0)));
241 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_SWITCH_VALUE, new DecimalType(42)));
242 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_SWITCH_VALUE, new DecimalType(22.5)));
243 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_SWITCH_VALUE,
244 new StringType("Not a number value")));
245 assertNull(BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_SWITCH_VALUE, new StringType("")));
249 public void testGetValueForStringValueChannel() {
250 assertEquals("1", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_STRING_VALUE, OnOffType.ON));
251 assertEquals("0", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_STRING_VALUE, OnOffType.OFF));
252 assertEquals("42", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_STRING_VALUE, new DecimalType(42)));
253 assertEquals("22.5", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_STRING_VALUE, new DecimalType(22.5)));
254 assertEquals("A string value",
255 BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_STRING_VALUE, new StringType("A string value")));
256 assertEquals("", BsbLanParameterConverter.getValue(PARAMETER_CHANNEL_STRING_VALUE, new StringType("")));