]> git.basschouten.com Git - openhab-addons.git/blob
2145711328281d705eef97e17ef6faa9abf3b778
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 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.wlanthermo.internal.api.mini;
14
15 import static org.openhab.binding.wlanthermo.internal.WlanThermoBindingConstants.*;
16
17 import java.awt.*;
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;
23
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.*;
37 import org.openhab.core.library.unit.ImperialUnits;
38 import org.openhab.core.thing.ChannelUID;
39 import org.openhab.core.thing.ThingUID;
40 import org.openhab.core.types.State;
41 import org.openhab.core.types.UnDefType;
42
43 import com.google.gson.Gson;
44
45 /**
46  * The {@link WlanThermoMiniCommandHandlerTest} class tests the {@link WlanThermoMiniCommandHandler}
47  *
48  * @author Christian Schlipp - Initial contribution
49  */
50 @NonNullByDefault
51 class WlanThermoMiniCommandHandlerTest {
52
53     private static final ThingUID THING_UID = new ThingUID("wlanthermo", "mini", "test");
54
55     @Nullable
56     private App app;
57
58     @BeforeEach
59     void setUp() {
60         ClassLoader classLoader = Objects.requireNonNull(WlanThermoMiniCommandHandlerTest.class.getClassLoader());
61         InputStream stream = Objects.requireNonNull(classLoader.getResourceAsStream("mini/app.json"));
62         app = new Gson().fromJson(new InputStreamReader(stream, StandardCharsets.UTF_8), App.class);
63     }
64
65     static Stream<Arguments> getState() {
66         return Stream.of(
67                 // System channels
68                 Arguments.of(SYSTEM, SYSTEM_CPU_TEMP, new DecimalType(93.56), null),
69                 Arguments.of(SYSTEM, SYSTEM_CPU_LOAD, new DecimalType(94.267515923567), null),
70
71                 // all channels
72                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_NAME, new StringType("Kanal0"), null),
73                 Arguments.of(CHANNEL_PREFIX + "1", CHANNEL_NAME, new StringType("Kanal1"), null),
74                 Arguments.of(CHANNEL_PREFIX + "2", CHANNEL_NAME, new StringType("Kanal2"), null),
75                 Arguments.of(CHANNEL_PREFIX + "3", CHANNEL_NAME, new StringType("Kanal3"), null),
76                 Arguments.of(CHANNEL_PREFIX + "4", CHANNEL_NAME, new StringType("Kanal4"), null),
77                 Arguments.of(CHANNEL_PREFIX + "5", CHANNEL_NAME, new StringType("Kanal5"), null),
78                 Arguments.of(CHANNEL_PREFIX + "6", CHANNEL_NAME, new StringType("Kanal6"), null),
79                 Arguments.of(CHANNEL_PREFIX + "7", CHANNEL_NAME, new StringType("Kanal7"), null),
80                 Arguments.of(CHANNEL_PREFIX + "8", CHANNEL_NAME, new StringType("Kanal8 - Maverick 1"), null),
81                 Arguments.of(CHANNEL_PREFIX + "9", CHANNEL_NAME, new StringType("Kanal9 - Maverick 2"), null),
82                 // invalid channel number
83                 Arguments.of(CHANNEL_PREFIX + "10", CHANNEL_NAME, UnDefType.UNDEF,
84                         WlanThermoUnknownChannelException.class),
85
86                 // all channel values
87                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_NAME, new StringType("Kanal0"), null),
88                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_TEMP, new QuantityType<>(78.28, ImperialUnits.FAHRENHEIT),
89                         null),
90                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_MIN, new QuantityType<>(-20, ImperialUnits.FAHRENHEIT),
91                         null),
92                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_MAX, new QuantityType<>(200, ImperialUnits.FAHRENHEIT),
93                         null),
94                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_ALARM_DEVICE, OnOffType.from("false"), null),
95                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_ALARM_OPENHAB_HIGH, OnOffType.OFF, null),
96                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_ALARM_OPENHAB_LOW, OnOffType.OFF, null),
97                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_COLOR,
98                         HSBType.fromRGB(Color.decode(WlanThermoMiniUtil.toHex("green")).getRed(),
99                                 Color.decode(WlanThermoMiniUtil.toHex("green")).getGreen(),
100                                 Color.decode(WlanThermoMiniUtil.toHex("green")).getBlue()),
101                         null),
102                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_COLOR_NAME, new StringType("green"), null),
103
104                 // all pitmaster
105                 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_ENABLED, OnOffType.from(true), null),
106                 Arguments.of(CHANNEL_PITMASTER_2, CHANNEL_PITMASTER_ENABLED, UnDefType.UNDEF, null),
107
108                 // all pitmaster values
109                 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_ENABLED, OnOffType.from(true), null),
110                 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_CURRENT, new DecimalType(77.86), null),
111                 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_SETPOINT,
112                         new QuantityType<>(110, ImperialUnits.FAHRENHEIT), null),
113                 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_DUTY_CYCLE, new DecimalType(100), null),
114                 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_LID_OPEN, OnOffType.OFF, null),
115                 Arguments.of(CHANNEL_PITMASTER_1, CHANNEL_PITMASTER_CHANNEL_ID, new DecimalType(0), null));
116     }
117
118     static Stream<Arguments> getTrigger() {
119         return Stream.of(
120                 // all channels
121                 Arguments.of(CHANNEL_PREFIX + "0", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
122                 Arguments.of(CHANNEL_PREFIX + "1", CHANNEL_ALARM_OPENHAB, TRIGGER_NONE, null),
123                 Arguments.of(CHANNEL_PREFIX + "2", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
124                 Arguments.of(CHANNEL_PREFIX + "3", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
125                 Arguments.of(CHANNEL_PREFIX + "4", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
126                 Arguments.of(CHANNEL_PREFIX + "5", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
127                 Arguments.of(CHANNEL_PREFIX + "6", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
128                 Arguments.of(CHANNEL_PREFIX + "7", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
129                 Arguments.of(CHANNEL_PREFIX + "8", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
130                 Arguments.of(CHANNEL_PREFIX + "9", CHANNEL_ALARM_OPENHAB, "", WlanThermoUnknownChannelException.class),
131                 // invalid channel number
132                 Arguments.of(CHANNEL_PREFIX + "10", CHANNEL_ALARM_OPENHAB, "",
133                         WlanThermoUnknownChannelException.class));
134     }
135
136     @ParameterizedTest
137     @MethodSource("getTrigger")
138     void getTrigger(String groupId, String id, String expectedTrigger,
139             @Nullable Class<WlanThermoException> exceptionClass) {
140         Executable test = () -> Assertions.assertEquals(expectedTrigger, WlanThermoMiniCommandHandler
141                 .getTrigger(new ChannelUID(THING_UID, groupId, id), WlanThermoUtil.requireNonNull(app)));
142         if (exceptionClass != null) {
143             Assertions.assertThrows(exceptionClass, test);
144         } else {
145             Assertions.assertDoesNotThrow(test);
146         }
147     }
148
149     @ParameterizedTest
150     @MethodSource("getState")
151     void getState(String groupId, String id, State expectedState, @Nullable Class<WlanThermoException> exceptionClass) {
152         Executable test = () -> Assertions.assertEquals(expectedState, WlanThermoMiniCommandHandler
153                 .getState(new ChannelUID(THING_UID, groupId, id), WlanThermoUtil.requireNonNull(app)));
154         if (exceptionClass != null) {
155             Assertions.assertThrows(exceptionClass, test);
156         } else {
157             Assertions.assertDoesNotThrow(test);
158         }
159     }
160 }