Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,24 +22,23 @@

import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.function.Function;

import org.eclipse.jdt.annotation.NonNullByDefault;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.ArgumentCaptor;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.openhab.binding.satel.internal.command.ReadDeviceInfoCommand;
import org.openhab.binding.satel.internal.event.EventDispatcher;
import org.openhab.binding.satel.internal.handler.SatelBridgeHandler;
import org.openhab.binding.satel.internal.protocol.SatelMessage;
import org.openhab.binding.satel.internal.types.IntegraType;
import org.openhab.core.config.discovery.DiscoveryListener;
import org.openhab.core.config.discovery.DiscoveryResult;
import org.openhab.core.thing.ThingTypeUID;
import org.openhab.core.thing.internal.BridgeImpl;
Expand All @@ -62,30 +61,38 @@ class SatelDeviceDiscoveryServiceTest {
@Mock
private EventDispatcher eventDispatcher;

@Mock
private DiscoveryListener listener;
private final List<DiscoveryResult> results = new ArrayList<>();

@InjectMocks
private SatelDeviceDiscoveryService testSubject;

@BeforeEach
void setUp() {
when(bridgeHandler.getIntegraType()).thenReturn(IntegraType.I24);
when(bridgeHandler.getEncoding()).thenReturn(bridgeEncoding);
testSubject.addDiscoveryListener(listener);

testSubject = new SatelDeviceDiscoveryService(bridgeHandler, thingTypeProvider) {
@NonNullByDefault
@Override
protected void thingDiscovered(DiscoveryResult discoveryResult) {
results.add(discoveryResult);
}
};
}

@AfterEach
void tearDown() {
results.clear();
}

@Disabled
@Test
void startScanShouldNotAddAnyThingWhenBridgeIsNotInitialized() {
when(bridgeHandler.getThing()).thenReturn(new BridgeImpl(THING_TYPE_ETHM1, "bridgeId"));

testSubject.startScan();

verifyNoInteractions(listener);
assertEquals(0, results.size());
}

@Disabled
@Test
void startScanShouldAddVirtualThingsWhenBridgeIsInitialized() {
ThingType thingType = mock(ThingType.class);
Expand All @@ -95,27 +102,21 @@ void startScanShouldAddVirtualThingsWhenBridgeIsInitialized() {

testSubject.startScan();

ArgumentCaptor<DiscoveryResult> resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class);
verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture());
List<DiscoveryResult> results = resultCaptor.getAllValues();

assertEquals(2, results.size());
assertEquals(THING_TYPE_SYSTEM, results.get(0).getThingTypeUID());
assertEquals(THING_TYPE_EVENTLOG, results.get(1).getThingTypeUID());
}

@Disabled
@Test
void startScanShouldContinueWhenFailureOccurred() {
setUpCommandFailure();

testSubject.startScan();

verifyNoInteractions(listener);
assertEquals(0, results.size());
verify(bridgeHandler, times(52)).sendCommand(any(), eq(false));
}

@Disabled
@Test
void startScanShouldAddAllDevices() {
BridgeImpl bridge = new BridgeImpl(THING_TYPE_ETHM1, "bridgeId");
Expand All @@ -124,9 +125,6 @@ void startScanShouldAddAllDevices() {

testSubject.startScan();

ArgumentCaptor<DiscoveryResult> resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class);
verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture());
List<DiscoveryResult> results = resultCaptor.getAllValues();
assertEquals(4,
results.stream().filter(result -> THING_TYPE_PARTITION.equals(result.getThingTypeUID())).count());
assertEquals(24, results.stream().filter(result -> THING_TYPE_ZONE.equals(result.getThingTypeUID())).count());
Expand All @@ -139,7 +137,6 @@ void startScanShouldAddAllDevices() {
}
}

@Disabled
@Test
void startScanShouldAddShutters() {
BridgeImpl bridge = new BridgeImpl(THING_TYPE_ETHM1, "bridgeId");
Expand All @@ -148,49 +145,38 @@ void startScanShouldAddShutters() {

testSubject.startScan();

ArgumentCaptor<DiscoveryResult> resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class);
verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture());
List<DiscoveryResult> results = resultCaptor.getAllValues().stream()
List<DiscoveryResult> shutterResults = results.stream()
.filter(result -> THING_TYPE_SHUTTER.equals(result.getThingTypeUID())).toList();
assertEquals(24, results.size());
for (DiscoveryResult result : results) {
assertEquals(24, shutterResults.size());
for (DiscoveryResult result : shutterResults) {
assertEquals("Device", result.getLabel());
assertEquals(bridge.getUID(), result.getBridgeUID());
assertEquals(2, result.getProperties().size());
}
}

@Disabled
@Test
void startScanShouldSkipUnusedOutput() {
when(bridgeHandler.getThing()).thenReturn(new BridgeImpl(THING_TYPE_ETHM1, "bridgeId"));
setUpCommandResponse(0);

testSubject.startScan();

ArgumentCaptor<DiscoveryResult> resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class);
verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture());
List<DiscoveryResult> results = resultCaptor.getAllValues();
assertEquals(0, results.stream().filter(result -> THING_TYPE_OUTPUT.equals(result.getThingTypeUID())).count());
assertEquals(0, results.stream().filter(result -> THING_TYPE_SHUTTER.equals(result.getThingTypeUID())).count());
}

@Disabled
@Test
void startScanShouldSkipSecondShutterOutput() {
when(bridgeHandler.getThing()).thenReturn(new BridgeImpl(THING_TYPE_ETHM1, "bridgeId"));
setUpCommandResponse(106);

testSubject.startScan();

ArgumentCaptor<DiscoveryResult> resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class);
verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture());
List<DiscoveryResult> results = resultCaptor.getAllValues();
assertEquals(0, results.stream().filter(result -> THING_TYPE_OUTPUT.equals(result.getThingTypeUID())).count());
assertEquals(0, results.stream().filter(result -> THING_TYPE_SHUTTER.equals(result.getThingTypeUID())).count());
}

@Disabled
@Test
void stopScanShouldSkipDiscovery() throws InterruptedException {
CountDownLatch startLatch = new CountDownLatch(1);
Expand All @@ -212,7 +198,7 @@ void stopScanShouldSkipDiscovery() throws InterruptedException {
thread.join();

verifyNoMoreInteractions(bridgeHandler);
verifyNoInteractions(listener);
assertEquals(0, results.size());
}

private void setUpCommandResponse(int deviceKind) {
Expand Down