diff --git a/bundles/org.openhab.binding.satel/src/test/java/org/openhab/binding/satel/internal/discovery/SatelDeviceDiscoveryServiceTest.java b/bundles/org.openhab.binding.satel/src/test/java/org/openhab/binding/satel/internal/discovery/SatelDeviceDiscoveryServiceTest.java index 1b03f9694b973..d6972ba27c053 100644 --- a/bundles/org.openhab.binding.satel/src/test/java/org/openhab/binding/satel/internal/discovery/SatelDeviceDiscoveryServiceTest.java +++ b/bundles/org.openhab.binding.satel/src/test/java/org/openhab/binding/satel/internal/discovery/SatelDeviceDiscoveryServiceTest.java @@ -22,16 +22,16 @@ 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; @@ -39,7 +39,6 @@ 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; @@ -62,30 +61,38 @@ class SatelDeviceDiscoveryServiceTest { @Mock private EventDispatcher eventDispatcher; - @Mock - private DiscoveryListener listener; + private final List 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); @@ -95,27 +102,21 @@ void startScanShouldAddVirtualThingsWhenBridgeIsInitialized() { testSubject.startScan(); - ArgumentCaptor resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class); - verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture()); - List 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"); @@ -124,9 +125,6 @@ void startScanShouldAddAllDevices() { testSubject.startScan(); - ArgumentCaptor resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class); - verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture()); - List 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()); @@ -139,7 +137,6 @@ void startScanShouldAddAllDevices() { } } - @Disabled @Test void startScanShouldAddShutters() { BridgeImpl bridge = new BridgeImpl(THING_TYPE_ETHM1, "bridgeId"); @@ -148,19 +145,16 @@ void startScanShouldAddShutters() { testSubject.startScan(); - ArgumentCaptor resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class); - verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture()); - List results = resultCaptor.getAllValues().stream() + List 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")); @@ -168,14 +162,10 @@ void startScanShouldSkipUnusedOutput() { testSubject.startScan(); - ArgumentCaptor resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class); - verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture()); - List 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")); @@ -183,14 +173,10 @@ void startScanShouldSkipSecondShutterOutput() { testSubject.startScan(); - ArgumentCaptor resultCaptor = ArgumentCaptor.forClass(DiscoveryResult.class); - verify(listener, timeout(1000L).atLeastOnce()).thingDiscovered(any(), resultCaptor.capture()); - List 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); @@ -212,7 +198,7 @@ void stopScanShouldSkipDiscovery() throws InterruptedException { thread.join(); verifyNoMoreInteractions(bridgeHandler); - verifyNoInteractions(listener); + assertEquals(0, results.size()); } private void setUpCommandResponse(int deviceKind) {