]> git.basschouten.com Git - openhab-addons.git/blob
103aa52bfa683fa25db7846f623fe82388a5ed5a
[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.dmx.internal.handler;
14
15 import static org.hamcrest.MatcherAssert.assertThat;
16 import static org.hamcrest.core.Is.is;
17 import static org.junit.jupiter.api.Assertions.assertEquals;
18 import static org.mockito.ArgumentMatchers.any;
19 import static org.mockito.Mockito.*;
20 import static org.openhab.binding.dmx.internal.DmxBindingConstants.*;
21
22 import java.util.HashMap;
23 import java.util.Map;
24
25 import org.junit.jupiter.api.AfterEach;
26 import org.junit.jupiter.api.BeforeEach;
27 import org.junit.jupiter.api.Disabled;
28 import org.junit.jupiter.api.Test;
29 import org.mockito.Mockito;
30 import org.openhab.binding.dmx.internal.DmxBridgeHandler;
31 import org.openhab.binding.dmx.internal.multiverse.BaseDmxChannel;
32 import org.openhab.binding.dmx.internal.multiverse.Universe;
33 import org.openhab.core.config.core.Configuration;
34 import org.openhab.core.library.types.OnOffType;
35 import org.openhab.core.test.java.JavaTest;
36 import org.openhab.core.thing.Bridge;
37 import org.openhab.core.thing.ChannelUID;
38 import org.openhab.core.thing.Thing;
39 import org.openhab.core.thing.ThingStatus;
40 import org.openhab.core.thing.ThingTypeUID;
41 import org.openhab.core.thing.ThingUID;
42 import org.openhab.core.thing.binding.ThingHandlerCallback;
43 import org.openhab.core.thing.binding.builder.BridgeBuilder;
44 import org.openhab.core.thing.binding.builder.ChannelBuilder;
45 import org.openhab.core.thing.binding.builder.ThingBuilder;
46
47 /**
48  * Tests cases for {@link DmxBridgeHandler}.
49  *
50  * @author Jan N. Klug - Initial contribution
51  */
52 public class DmxBridgeHandlerTest extends JavaTest {
53
54     /**
55      * simple DmxBridgeHandlerImplementation
56      *
57      * @author Jan N. Klug
58      *
59      */
60     public class DmxBridgeHandlerImpl extends DmxBridgeHandler {
61         public DmxBridgeHandlerImpl(Bridge dmxBridge) {
62             super(dmxBridge);
63         }
64
65         @Override
66         public void openConnection() {
67         }
68
69         @Override
70         protected void sendDmxData() {
71         }
72
73         @Override
74         protected void closeConnection() {
75         }
76
77         @Override
78         public void initialize() {
79             universe = new Universe(TEST_UNIVERSE);
80             super.updateConfiguration();
81             updateStatus(ThingStatus.ONLINE);
82         }
83     }
84
85     private static final int TEST_UNIVERSE = 1;
86     private static final int TEST_CHANNEL = 100;
87
88     private final ThingTypeUID THING_TYPE_TEST_BRIDGE = new ThingTypeUID(BINDING_ID, "testbridge");
89     private final ThingUID BRIDGE_UID_TEST = new ThingUID(THING_TYPE_TEST_BRIDGE, "testbridge");
90     private final ChannelUID CHANNEL_UID_MUTE = new ChannelUID(BRIDGE_UID_TEST, CHANNEL_MUTE);
91
92     Map<String, Object> bridgeProperties;
93
94     private Bridge bridge;
95     private DmxBridgeHandlerImpl bridgeHandler;
96
97     @BeforeEach
98     public void setUp() {
99         bridgeProperties = new HashMap<>();
100         bridge = BridgeBuilder.create(THING_TYPE_TEST_BRIDGE, "testbridge").withLabel("Test Bridge")
101                 .withChannel(ChannelBuilder.create(CHANNEL_UID_MUTE, "Switch").withType(MUTE_CHANNEL_TYPEUID).build())
102                 .withConfiguration(new Configuration(bridgeProperties)).build();
103
104         ThingHandlerCallback mockCallback = mock(ThingHandlerCallback.class);
105         doAnswer(answer -> {
106             ((Thing) answer.getArgument(0)).setStatusInfo(answer.getArgument(1));
107             return null;
108         }).when(mockCallback).statusUpdated(any(), any());
109
110         bridgeHandler = Mockito.spy(new DmxBridgeHandlerImpl(bridge));
111         bridgeHandler.getThing().setHandler(bridgeHandler);
112         bridgeHandler.setCallback(mockCallback);
113         bridgeHandler.initialize();
114     }
115
116     @AfterEach
117     public void tearDown() {
118         bridgeHandler.dispose();
119     }
120
121     @Test
122     public void assertBridgeStatus() {
123         waitForAssert(() -> assertEquals(ThingStatus.ONLINE, bridge.getStatusInfo().getStatus()));
124     }
125
126     @Disabled("https://github.com/eclipse/smarthome/issues/6015#issuecomment-411313627")
127     @Test
128     public void assertSendDmxDataIsCalled() {
129         Mockito.verify(bridgeHandler, after(500).atLeast(9)).sendDmxData();
130     }
131
132     @Disabled("https://github.com/eclipse/smarthome/issues/6015")
133     @Test
134     public void assertMuteChannelMutesOutput() {
135         bridgeHandler.handleCommand(CHANNEL_UID_MUTE, OnOffType.ON);
136         Mockito.verify(bridgeHandler, after(500).atMost(1)).sendDmxData();
137
138         bridgeHandler.handleCommand(CHANNEL_UID_MUTE, OnOffType.OFF);
139         Mockito.verify(bridgeHandler, after(500).atLeast(9)).sendDmxData();
140     }
141
142     @Test
143     public void assertRetrievingOfChannels() {
144         BaseDmxChannel channel = new BaseDmxChannel(TEST_UNIVERSE, TEST_CHANNEL);
145         BaseDmxChannel returnedChannel = bridgeHandler.getDmxChannel(channel,
146                 ThingBuilder.create(THING_TYPE_DIMMER, "testthing").build());
147
148         Integer channelId = returnedChannel.getChannelId();
149         assertThat(channelId, is(TEST_CHANNEL));
150     }
151 }