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.wlanthermo.internal.api.mini;
15 import static org.openhab.binding.wlanthermo.internal.WlanThermoBindingConstants.*;
17 import java.awt.Color;
18 import java.io.InputStream;
19 import java.io.InputStreamReader;
20 import java.nio.charset.StandardCharsets;
21 import java.util.Objects;
22 import java.util.stream.Stream;
24 import org.eclipse.jdt.annotation.NonNullByDefault;
25 import org.eclipse.jdt.annotation.Nullable;
26 import org.junit.jupiter.api.Assertions;
27 import org.junit.jupiter.api.BeforeEach;
28 import org.junit.jupiter.api.function.Executable;
29 import org.junit.jupiter.params.ParameterizedTest;
30 import org.junit.jupiter.params.provider.Arguments;
31 import org.junit.jupiter.params.provider.MethodSource;
32 import org.openhab.binding.wlanthermo.internal.WlanThermoException;
33 import org.openhab.binding.wlanthermo.internal.WlanThermoUnknownChannelException;
34 import org.openhab.binding.wlanthermo.internal.WlanThermoUtil;
35 import org.openhab.binding.wlanthermo.internal.api.mini.dto.builtin.App;
36 import org.openhab.core.library.types.DecimalType;
37 import org.openhab.core.library.types.HSBType;
38 import org.openhab.core.library.types.OnOffType;
39 import org.openhab.core.library.types.QuantityType;
40 import org.openhab.core.library.types.StringType;
41 import org.openhab.core.library.unit.ImperialUnits;
42 import org.openhab.core.thing.ChannelUID;
43 import org.openhab.core.thing.ThingUID;
44 import org.openhab.core.types.State;
45 import org.openhab.core.types.UnDefType;
47 import com.google.gson.Gson;
50 * The {@link WlanThermoMiniCommandHandlerTest} class tests the {@link WlanThermoMiniCommandHandler}
52 * @author Christian Schlipp - Initial contribution
55 class WlanThermoMiniCommandHandlerTest {
57 private static final ThingUID THING_UID = new ThingUID("wlanthermo", "mini", "test");
64 ClassLoader classLoader = Objects.requireNonNull(WlanThermoMiniCommandHandlerTest.class.getClassLoader());
65 InputStream stream = Objects.requireNonNull(classLoader.getResourceAsStream("mini/app.json"));
66 app = new Gson().fromJson(new InputStreamReader(stream, StandardCharsets.UTF_8), App.class);
69 static Stream<Arguments> getState() {
72 Arguments.of(SYSTEM, SYSTEM_CPU_TEMP, new DecimalType(93.56), null),
73 Arguments.of(SYSTEM, SYSTEM_CPU_LOAD, new DecimalType(94.267515923567), null),
76 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_NAME, new StringType("Kanal0"), null),
77 Arguments.of(CHANNEL_PREFIX + "1", CHANNEL_NAME, new StringType("Kanal1"), null),
78 Arguments.of(CHANNEL_PREFIX + "2", CHANNEL_NAME, new StringType("Kanal2"), null),
79 Arguments.of(CHANNEL_PREFIX + "3", CHANNEL_NAME, new StringType("Kanal3"), null),
80 Arguments.of(CHANNEL_PREFIX + "4", CHANNEL_NAME, new StringType("Kanal4"), null),
81 Arguments.of(CHANNEL_PREFIX + "5", CHANNEL_NAME, new StringType("Kanal5"), null),
82 Arguments.of(CHANNEL_PREFIX + "6", CHANNEL_NAME, new StringType("Kanal6"), null),
83 Arguments.of(CHANNEL_PREFIX + "7", CHANNEL_NAME, new StringType("Kanal7"), null),
84 Arguments.of(CHANNEL_PREFIX + "8", CHANNEL_NAME, new StringType("Kanal8 - Maverick 1"), null),
85 Arguments.of(CHANNEL_PREFIX + "9", CHANNEL_NAME, new StringType("Kanal9 - Maverick 2"), null),
86 // invalid channel number
87 Arguments.of(CHANNEL_PREFIX + "10", CHANNEL_NAME, UnDefType.UNDEF,
88 WlanThermoUnknownChannelException.class),
91 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_NAME, new StringType("Kanal0"), null),
92 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_TEMP, new QuantityType<>(78.28, ImperialUnits.FAHRENHEIT),
94 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_MIN, new QuantityType<>(-20, ImperialUnits.FAHRENHEIT),
96 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_MAX, new QuantityType<>(200, ImperialUnits.FAHRENHEIT),
98 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_ALARM_DEVICE, OnOffType.from("false"), null),
99 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_ALARM_OPENHAB_HIGH, OnOffType.OFF, null),
100 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_ALARM_OPENHAB_LOW, OnOffType.OFF, null),
101 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_COLOR,
102 HSBType.fromRGB(Color.decode(WlanThermoMiniUtil.toHex("green")).getRed(),
103 Color.decode(WlanThermoMiniUtil.toHex("green")).getGreen(),
104 Color.decode(WlanThermoMiniUtil.toHex("green")).getBlue()),
106 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_COLOR_NAME, new StringType("green"), null),
109 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_ENABLED, OnOffType.from(true), null),
110 Arguments.of(CHANNEL_PITMASTER_2, CHANNEL_PITMASTER_ENABLED, UnDefType.UNDEF, null),
112 // all pitmaster values
113 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_ENABLED, OnOffType.from(true), null),
114 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_CURRENT, new DecimalType(77.86), null),
115 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_SETPOINT,
116 new QuantityType<>(110, ImperialUnits.FAHRENHEIT), null),
117 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_DUTY_CYCLE, new DecimalType(100), null),
118 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_LID_OPEN, OnOffType.OFF, null),
119 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_CHANNEL_ID, new DecimalType(0), null));
122 static Stream<Arguments> getTrigger() {
125 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
126 Arguments.of(CHANNEL_PREFIX + "1", CHANNEL_ALARM_OPENHAB, TRIGGER_NONE, null),
127 Arguments.of(CHANNEL_PREFIX + "2", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
128 Arguments.of(CHANNEL_PREFIX + "3", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
129 Arguments.of(CHANNEL_PREFIX + "4", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
130 Arguments.of(CHANNEL_PREFIX + "5", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
131 Arguments.of(CHANNEL_PREFIX + "6", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
132 Arguments.of(CHANNEL_PREFIX + "7", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
133 Arguments.of(CHANNEL_PREFIX + "8", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
134 Arguments.of(CHANNEL_PREFIX + "9", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
135 // invalid channel number
136 Arguments.of(CHANNEL_PREFIX + "10", CHANNEL_ALARM_OPENHAB, "",
137 WlanThermoUnknownChannelException.class));
141 @MethodSource("getTrigger")
142 void getTrigger(String groupId, String id, String expectedTrigger,
143 @Nullable Class<WlanThermoException> exceptionClass) {
144 Executable test = () -> Assertions.assertEquals(expectedTrigger, WlanThermoMiniCommandHandler
145 .getTrigger(new ChannelUID(THING_UID, groupId, id), WlanThermoUtil.requireNonNull(app)));
146 if (exceptionClass != null) {
147 Assertions.assertThrows(exceptionClass, test);
149 Assertions.assertDoesNotThrow(test);
154 @MethodSource("getState")
155 void getState(String groupId, String id, State expectedState, @Nullable Class<WlanThermoException> exceptionClass) {
156 Executable test = () -> Assertions.assertEquals(expectedState, WlanThermoMiniCommandHandler
157 .getState(new ChannelUID(THING_UID, groupId, id), WlanThermoUtil.requireNonNull(app)));
158 if (exceptionClass != null) {
159 Assertions.assertThrows(exceptionClass, test);
161 Assertions.assertDoesNotThrow(test);