/**
* Copyright (c) 2010-2016 by the respective copyright holders.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.openhab.binding.lightwaverf.internal;
import static org.mockito.Mockito.*;
import java.util.Arrays;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.openhab.binding.lightwaverf.LightwaveRfBindingProvider;
import org.openhab.binding.lightwaverf.internal.command.LightwaveRFCommand;
import org.openhab.binding.lightwaverf.internal.command.LightwaveRfHeatInfoRequest;
import org.openhab.binding.lightwaverf.internal.command.LightwaveRfHeatingInfoResponse;
import org.openhab.binding.lightwaverf.internal.command.LightwaveRfOnOffCommand;
import org.openhab.binding.lightwaverf.internal.command.LightwaveRfVersionMessage;
import org.openhab.core.events.EventPublisher;
import org.openhab.core.library.types.DecimalType;
import org.openhab.core.library.types.OnOffType;
import org.openhab.core.library.types.StringType;
public class LightwaveRfBindingTest {
@Mock
EventPublisher mockEventPublisher;
@Mock
LightwaveRfBindingProvider mockBindingProvider;
@Mock
LightwaverfConvertor mockLightwaveRfConvertor;
@Mock
LightwaveRFCommand mockLightwaveRfCommand;
@Mock
LightwaveRfWifiLink mockWifiLink;
@Mock
LightwaveRfVersionMessage mockVersionMessage;
@Mock
LightwaveRfHeatingInfoResponse mockHeatInfoResponse;
@Mock
LightwaveRfHeatInfoRequest mockHeatInfoRequest;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void testInternalReceiveCommand() {
when(mockBindingProvider.getRoomId("MySwitch")).thenReturn("2");
when(mockBindingProvider.getDeviceId("MySwitch")).thenReturn("3");
when(mockBindingProvider.getTypeForItemName("MySwitch")).thenReturn(LightwaveRfType.SWITCH);
when(mockBindingProvider.getDirection("MySwitch")).thenReturn(LightwaveRfItemDirection.IN_AND_OUT);
when(mockLightwaveRfConvertor.convertToLightwaveRfMessage("2", "3", LightwaveRfType.SWITCH, OnOffType.ON))
.thenReturn(mockLightwaveRfCommand);
LightwaveRfBinding binding = new LightwaveRfBinding();
binding.addBindingProvider(mockBindingProvider);
binding.setWifiLink(mockWifiLink);
binding.setLightwaveRfConvertor(mockLightwaveRfConvertor);
binding.internalReceiveCommand("MySwitch", OnOffType.ON);
verify(mockWifiLink).sendLightwaveCommand(mockLightwaveRfCommand);
}
@Test
public void testInternalReceiveUpdate() {
when(mockBindingProvider.getRoomId("MySwitch")).thenReturn("2");
when(mockBindingProvider.getDeviceId("MySwitch")).thenReturn("3");
when(mockBindingProvider.getTypeForItemName("MySwitch")).thenReturn(LightwaveRfType.SWITCH);
when(mockBindingProvider.getDirection("MySwitch")).thenReturn(LightwaveRfItemDirection.IN_AND_OUT);
when(mockLightwaveRfConvertor.convertToLightwaveRfMessage("2", "3", LightwaveRfType.SWITCH, OnOffType.ON))
.thenReturn(mockLightwaveRfCommand);
LightwaveRfBinding binding = new LightwaveRfBinding();
binding.addBindingProvider(mockBindingProvider);
binding.setWifiLink(mockWifiLink);
binding.setLightwaveRfConvertor(mockLightwaveRfConvertor);
binding.internalReceiveUpdate("MySwitch", OnOffType.ON);
verify(mockWifiLink).sendLightwaveCommand(mockLightwaveRfCommand);
}
@Test
public void testRoomDeviceMessageRecevied() {
when(mockBindingProvider.getBindingItemsForRoomDevice("2", "3")).thenReturn(Arrays.asList("MySwitch"));
when(mockBindingProvider.getTypeForItemName("MySwitch")).thenReturn(LightwaveRfType.SWITCH);
when(mockBindingProvider.getDirection("MySwitch")).thenReturn(LightwaveRfItemDirection.IN_AND_OUT);
LightwaveRfBinding binding = new LightwaveRfBinding();
binding.addBindingProvider(mockBindingProvider);
binding.setEventPublisher(mockEventPublisher);
binding.roomDeviceMessageReceived(new LightwaveRfOnOffCommand(1, "2", "3", true));
verify(mockEventPublisher).postUpdate("MySwitch", OnOffType.ON);
}
@Test
public void testRoomMessageRecevied() {
when(mockHeatInfoRequest.getState(LightwaveRfType.HEATING_SET_TEMP)).thenReturn(new DecimalType(24.5));
when(mockHeatInfoRequest.getRoomId()).thenReturn("2");
when(mockBindingProvider.getBindingItemsForRoom("2")).thenReturn(Arrays.asList("Temp"));
when(mockBindingProvider.getTypeForItemName("Temp")).thenReturn(LightwaveRfType.HEATING_SET_TEMP);
when(mockBindingProvider.getDirection("Temp")).thenReturn(LightwaveRfItemDirection.IN_AND_OUT);
LightwaveRfBinding binding = new LightwaveRfBinding();
binding.addBindingProvider(mockBindingProvider);
binding.setEventPublisher(mockEventPublisher);
binding.roomMessageReceived(mockHeatInfoRequest);
verify(mockEventPublisher).postUpdate("Temp", new DecimalType(24.5));
}
@Test
public void testSerialMessageRecevied() {
when(mockHeatInfoResponse.getState(LightwaveRfType.HEATING_BATTERY)).thenReturn(new DecimalType(2.99));
when(mockHeatInfoResponse.getState(LightwaveRfType.HEATING_CURRENT_TEMP)).thenReturn(new DecimalType(22.3));
when(mockHeatInfoResponse.getSerial()).thenReturn("655432");
when(mockBindingProvider.getBindingItemsForSerial("655432")).thenReturn(Arrays.asList("Battery", "Temp"));
when(mockBindingProvider.getTypeForItemName("Battery")).thenReturn(LightwaveRfType.HEATING_BATTERY);
when(mockBindingProvider.getTypeForItemName("Temp")).thenReturn(LightwaveRfType.HEATING_CURRENT_TEMP);
when(mockBindingProvider.getDirection("Battery")).thenReturn(LightwaveRfItemDirection.IN_AND_OUT);
when(mockBindingProvider.getDirection("Temp")).thenReturn(LightwaveRfItemDirection.IN_AND_OUT);
LightwaveRfBinding binding = new LightwaveRfBinding();
binding.addBindingProvider(mockBindingProvider);
binding.setEventPublisher(mockEventPublisher);
binding.serialMessageReceived(mockHeatInfoResponse);
verify(mockEventPublisher).postUpdate("Battery", new DecimalType(2.99));
verify(mockEventPublisher).postUpdate("Temp", new DecimalType(22.3));
}
@Test
public void testVersionMessageRecevied() {
when(mockVersionMessage.getState(LightwaveRfType.VERSION)).thenReturn(new StringType("2.91"));
when(mockBindingProvider.getBindingItemsForType(LightwaveRfType.VERSION))
.thenReturn(Arrays.asList("MyVersion"));
when(mockBindingProvider.getTypeForItemName("MyVersion")).thenReturn(LightwaveRfType.VERSION);
when(mockBindingProvider.getDirection("MyVersion")).thenReturn(LightwaveRfItemDirection.IN_AND_OUT);
LightwaveRfBinding binding = new LightwaveRfBinding();
binding.addBindingProvider(mockBindingProvider);
binding.setEventPublisher(mockEventPublisher);
binding.versionMessageReceived(mockVersionMessage);
verify(mockEventPublisher).postUpdate("MyVersion", new StringType("2.91"));
}
}