2 * Copyright (c) 2010-2020 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.enigma2.handler;
15 import static org.eclipse.jdt.annotation.Checks.requireNonNull;
16 import static org.hamcrest.Matchers.*;
17 import static org.junit.Assert.*;
18 import static org.mockito.Mockito.*;
20 import java.time.LocalDateTime;
21 import java.time.temporal.ChronoUnit;
22 import java.util.Optional;
24 import org.eclipse.jdt.annotation.NonNullByDefault;
25 import org.eclipse.jdt.annotation.Nullable;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.openhab.binding.enigma2.actions.Enigma2Actions;
29 import org.openhab.binding.enigma2.internal.Enigma2BindingConstants;
30 import org.openhab.binding.enigma2.internal.Enigma2Client;
31 import org.openhab.binding.enigma2.internal.Enigma2Configuration;
32 import org.openhab.binding.enigma2.internal.Enigma2RemoteKey;
33 import org.openhab.core.config.core.Configuration;
34 import org.openhab.core.library.types.*;
35 import org.openhab.core.thing.ChannelUID;
36 import org.openhab.core.thing.Thing;
37 import org.openhab.core.thing.binding.ThingHandlerCallback;
38 import org.openhab.core.types.RefreshType;
41 * The {@link Enigma2HandlerTest} class is responsible for testing {@link Enigma2Handler}.
43 * @author Guido Dolfen - Initial contribution
45 @SuppressWarnings({ "null", "unchecked" })
47 public class Enigma2HandlerTest {
48 public static final String CHANNEL_UID_PREFIX = "enigma2:device:192_168_0_3:";
49 public static final String SOME_TEXT = "some Text";
51 private Enigma2Handler enigma2Handler;
53 private Enigma2Client enigma2Client;
57 private Configuration configuration;
59 private ThingHandlerCallback callback;
63 enigma2Client = mock(Enigma2Client.class);
64 thing = mock(Thing.class);
65 callback = mock(ThingHandlerCallback.class);
66 configuration = mock(Configuration.class);
67 when(thing.getConfiguration()).thenReturn(requireNonNull(configuration));
68 when(configuration.as(Enigma2Configuration.class)).thenReturn(new Enigma2Configuration());
69 enigma2Handler = spy(new Enigma2Handler(requireNonNull(thing)));
70 enigma2Handler.setCallback(callback);
71 when(enigma2Handler.getEnigma2Client()).thenReturn(Optional.of(requireNonNull(enigma2Client)));
75 public void testSendRcCommand() {
76 enigma2Handler.sendRcCommand("KEY_1");
77 verify(enigma2Client).sendRcCommand(Enigma2RemoteKey.KEY_1.getValue());
81 public void testSendInfo() {
82 enigma2Handler.sendInfo(Enigma2BindingConstants.MESSAGE_TIMEOUT, SOME_TEXT);
83 verify(enigma2Client).sendInfo(Enigma2BindingConstants.MESSAGE_TIMEOUT, SOME_TEXT);
87 public void testSendWarning() {
88 enigma2Handler.sendWarning(Enigma2BindingConstants.MESSAGE_TIMEOUT, SOME_TEXT);
89 verify(enigma2Client).sendWarning(Enigma2BindingConstants.MESSAGE_TIMEOUT, SOME_TEXT);
93 public void testSendError() {
94 enigma2Handler.sendError(Enigma2BindingConstants.MESSAGE_TIMEOUT, SOME_TEXT);
95 verify(enigma2Client).sendError(Enigma2BindingConstants.MESSAGE_TIMEOUT, SOME_TEXT);
99 public void testSendQuestion() {
100 enigma2Handler.sendQuestion(Enigma2BindingConstants.MESSAGE_TIMEOUT, SOME_TEXT);
101 verify(enigma2Client).sendQuestion(Enigma2BindingConstants.MESSAGE_TIMEOUT, SOME_TEXT);
105 public void testGetEnigma2Client() {
106 enigma2Handler = new Enigma2Handler(requireNonNull(thing));
107 assertThat(enigma2Handler.getEnigma2Client(), is(Optional.empty()));
111 public void testGetServices() {
112 enigma2Handler = new Enigma2Handler(requireNonNull(thing));
113 assertThat(enigma2Handler.getServices(), contains(Enigma2Actions.class));
117 public void testSendRcCommandUnsupported() {
118 enigma2Handler.sendRcCommand("KEY_X");
119 verifyNoInteractions(enigma2Client);
123 public void testHandleCommandPowerRefreshFalse() {
124 when(enigma2Client.isPower()).thenReturn(false);
125 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_POWER);
126 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
127 verify(enigma2Client).refreshPower();
128 verify(callback).stateUpdated(channelUID, OnOffType.OFF);
132 public void testHandleCommandPowerRefreshTrue() {
133 when(enigma2Client.isPower()).thenReturn(true);
134 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_POWER);
135 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
136 verify(enigma2Client).refreshPower();
137 verify(callback).stateUpdated(channelUID, OnOffType.ON);
141 public void testHandleCommandPowerOn() {
142 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_POWER);
143 enigma2Handler.handleCommand(channelUID, OnOffType.ON);
144 verify(enigma2Client).setPower(true);
148 public void testHandleCommandPowerOff() {
149 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_POWER);
150 enigma2Handler.handleCommand(channelUID, OnOffType.OFF);
151 verify(enigma2Client).setPower(false);
155 public void testHandleCommandPowerUnsupported() {
156 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_POWER);
157 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
158 verifyNoInteractions(enigma2Client);
162 public void testHandleCommandChannelRefresh() {
163 when(enigma2Client.getChannel()).thenReturn(SOME_TEXT);
164 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_CHANNEL);
165 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
166 verify(enigma2Client).refreshChannel();
167 verify(callback).stateUpdated(channelUID, new StringType(SOME_TEXT));
171 public void testHandleCommandMuteRefreshFalse() {
172 when(enigma2Client.isMute()).thenReturn(false);
173 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MUTE);
174 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
175 verify(enigma2Client).refreshVolume();
176 verify(callback).stateUpdated(channelUID, OnOffType.OFF);
180 public void testHandleCommandMuteRefreshTrue() {
181 when(enigma2Client.isMute()).thenReturn(true);
182 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MUTE);
183 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
184 verify(enigma2Client).refreshVolume();
185 verify(callback).stateUpdated(channelUID, OnOffType.ON);
189 public void testHandleCommandMuteOn() {
190 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MUTE);
191 enigma2Handler.handleCommand(channelUID, OnOffType.ON);
192 verify(enigma2Client).setMute(true);
196 public void testHandleCommandMuteOff() {
197 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MUTE);
198 enigma2Handler.handleCommand(channelUID, OnOffType.OFF);
199 verify(enigma2Client).setMute(false);
203 public void testHandleCommandMuteUnsupported() {
204 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MUTE);
205 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
206 verifyNoInteractions(enigma2Client);
210 public void testHandleCommandChannelString() {
211 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_CHANNEL);
212 enigma2Handler.handleCommand(channelUID, new StringType(SOME_TEXT));
213 verify(enigma2Client).setChannel(SOME_TEXT);
217 public void testHandleCommandChannelUnsupported() {
218 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_CHANNEL);
219 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
220 verifyNoInteractions(enigma2Client);
224 public void testHandleCommandMediaPlayerRefresh() {
225 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_PLAYER);
226 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
227 verifyNoInteractions(enigma2Client);
231 public void testHandleCommandMediaPlay() {
232 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_PLAYER);
233 enigma2Handler.handleCommand(channelUID, PlayPauseType.PLAY);
234 verify(enigma2Client).sendRcCommand(Enigma2RemoteKey.PLAY.getValue());
238 public void testHandleCommandMediaPause() {
239 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_PLAYER);
240 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
241 verify(enigma2Client).sendRcCommand(Enigma2RemoteKey.PAUSE.getValue());
245 public void testHandleCommandMediaNext() {
246 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_PLAYER);
247 enigma2Handler.handleCommand(channelUID, NextPreviousType.NEXT);
248 verify(enigma2Client).sendRcCommand(Enigma2RemoteKey.FAST_FORWARD.getValue());
252 public void testHandleCommandMediaPrevious() {
253 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_PLAYER);
254 enigma2Handler.handleCommand(channelUID, NextPreviousType.PREVIOUS);
255 verify(enigma2Client).sendRcCommand(Enigma2RemoteKey.FAST_BACKWARD.getValue());
259 public void testHandleCommandMediaPlayerUnsupported() {
260 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_PLAYER);
261 enigma2Handler.handleCommand(channelUID, OnOffType.ON);
262 verifyNoInteractions(enigma2Client);
266 public void testHandleCommandMediaStopRefresh() {
267 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_STOP);
268 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
269 verifyNoInteractions(enigma2Client);
273 public void testHandleCommandMediaStopOn() {
274 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_STOP);
275 enigma2Handler.handleCommand(channelUID, OnOffType.ON);
276 verify(enigma2Client).sendRcCommand(Enigma2RemoteKey.STOP.getValue());
280 public void testHandleCommandMediaStopOff() {
281 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_STOP);
282 enigma2Handler.handleCommand(channelUID, OnOffType.OFF);
283 verify(enigma2Client).sendRcCommand(Enigma2RemoteKey.STOP.getValue());
287 public void testHandleCommandMediaStopUnsupported() {
288 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_MEDIA_STOP);
289 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
290 verifyNoInteractions(enigma2Client);
294 public void testHandleCommandTitleUnsupported() {
295 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_TITLE);
296 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
297 verifyNoInteractions(enigma2Client);
301 public void testHandleCommandTitleRefresh() {
302 when(enigma2Client.getTitle()).thenReturn(SOME_TEXT);
303 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_TITLE);
304 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
305 verify(enigma2Client).refreshEpg();
306 verify(callback).stateUpdated(channelUID, new StringType(SOME_TEXT));
310 public void testHandleCommandAnswerUnsupported() {
311 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_ANSWER);
312 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
313 verifyNoInteractions(enigma2Client);
317 public void testHandleCommandAnswerRefresh() {
318 when(enigma2Client.getAnswer()).thenReturn(SOME_TEXT);
319 when(enigma2Client.getLastAnswerTime()).thenReturn(LocalDateTime.now().plus(1, ChronoUnit.SECONDS));
320 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_ANSWER);
321 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
322 verify(enigma2Client).refreshAnswer();
323 verify(callback).stateUpdated(channelUID, new StringType(SOME_TEXT));
327 public void testHandleCommandAnswerRefreshFalse() {
328 when(enigma2Client.getAnswer()).thenReturn(SOME_TEXT);
329 when(enigma2Client.getLastAnswerTime()).thenReturn(LocalDateTime.of(2020, 1, 1, 0, 0));
330 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_ANSWER);
331 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
332 verify(enigma2Client).refreshAnswer();
333 verifyNoInteractions(callback);
337 public void testHandleCommandDescriptionUnsupported() {
338 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_DESCRIPTION);
339 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
340 verifyNoInteractions(enigma2Client);
344 public void testHandleCommandDescriptionRefresh() {
345 when(enigma2Client.getDescription()).thenReturn(SOME_TEXT);
346 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_DESCRIPTION);
347 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
348 verify(enigma2Client).refreshEpg();
349 verify(callback).stateUpdated(channelUID, new StringType(SOME_TEXT));
353 public void testHandleCommandVolumeRefresh() {
354 when(enigma2Client.getVolume()).thenReturn(35);
355 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_VOLUME);
356 enigma2Handler.handleCommand(channelUID, RefreshType.REFRESH);
357 verify(enigma2Client).refreshVolume();
358 verify(callback).stateUpdated(channelUID, new PercentType(35));
362 public void testHandleCommandVolumePercent() {
363 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_VOLUME);
364 enigma2Handler.handleCommand(channelUID, new PercentType(30));
365 verify(enigma2Client).setVolume(30);
369 public void testHandleCommandVolumeDecimal() {
370 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_VOLUME);
371 enigma2Handler.handleCommand(channelUID, new DecimalType(40));
372 verify(enigma2Client).setVolume(40);
376 public void testHandleCommandVolumeUnsupported() {
377 ChannelUID channelUID = new ChannelUID(CHANNEL_UID_PREFIX + Enigma2BindingConstants.CHANNEL_VOLUME);
378 enigma2Handler.handleCommand(channelUID, PlayPauseType.PAUSE);
379 verifyNoInteractions(enigma2Client);