2 * Copyright (c) 2010-2024 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.draytonwiser.internal.discovery;
15 import static org.hamcrest.CoreMatchers.is;
16 import static org.hamcrest.MatcherAssert.assertThat;
17 import static org.junit.jupiter.api.Assertions.fail;
18 import static org.mockito.ArgumentMatchers.*;
19 import static org.mockito.Mockito.doReturn;
21 import java.io.IOException;
22 import java.net.URISyntaxException;
23 import java.nio.file.Files;
24 import java.nio.file.Paths;
25 import java.util.ArrayList;
26 import java.util.Arrays;
27 import java.util.List;
28 import java.util.concurrent.ExecutionException;
29 import java.util.concurrent.TimeoutException;
31 import javax.servlet.http.HttpServletResponse;
33 import org.eclipse.jetty.client.HttpClient;
34 import org.eclipse.jetty.client.HttpContentResponse;
35 import org.eclipse.jetty.client.HttpResponse;
36 import org.eclipse.jetty.client.api.Request;
37 import org.junit.jupiter.api.BeforeEach;
38 import org.junit.jupiter.api.extension.ExtendWith;
39 import org.junit.jupiter.params.ParameterizedTest;
40 import org.junit.jupiter.params.provider.MethodSource;
41 import org.mockito.Mock;
42 import org.mockito.junit.jupiter.MockitoExtension;
43 import org.openhab.binding.draytonwiser.internal.DraytonWiserBindingConstants;
44 import org.openhab.binding.draytonwiser.internal.api.DraytonWiserApi;
45 import org.openhab.binding.draytonwiser.internal.api.DraytonWiserApiException;
46 import org.openhab.binding.draytonwiser.internal.handler.HeatHubConfiguration;
47 import org.openhab.binding.draytonwiser.internal.handler.HeatHubHandler;
48 import org.openhab.binding.draytonwiser.internal.model.DomainDTO;
49 import org.openhab.binding.draytonwiser.internal.model.DraytonWiserDTO;
50 import org.openhab.core.config.discovery.DiscoveryResult;
51 import org.openhab.core.thing.Bridge;
52 import org.openhab.core.thing.ThingUID;
55 * Test class for {@link DraytonWiserDiscoveryService}.
57 * @author Hilbrand Bouwkamp - Initial contribution
59 @ExtendWith(MockitoExtension.class)
60 public class DraytonWiserDiscoveryServiceTest {
62 private @Mock HeatHubHandler bridgeHandler;
63 private @Mock Bridge bridge;
64 private @Mock HttpClient httpClient;
65 private @Mock Request request;
67 private DraytonWiserApi api;
69 public static List<Object[]> data() {
70 return Arrays.asList(new Object[] { "../test1.json", 11 }, new Object[] { "../test2.json", 22 });
74 public void before() {
75 api = new DraytonWiserApi(httpClient);
76 api.setConfiguration(new HeatHubConfiguration());
78 doReturn(request).when(httpClient).newRequest((String) any());
79 doReturn(request).when(request).method((String) any());
80 doReturn(request).when(request).header((String) any(), any());
81 doReturn(request).when(request).content(any());
82 doReturn(request).when(request).timeout(anyLong(), any());
83 doReturn(bridge).when(bridgeHandler).getThing();
84 doReturn(new ThingUID(DraytonWiserBindingConstants.THING_TYPE_BRIDGE, "1")).when(bridge).getUID();
89 public void testDiscovery(final String jsonFile, final int expectedResults) throws IOException, URISyntaxException,
90 InterruptedException, TimeoutException, ExecutionException, DraytonWiserApiException {
91 final byte[] content = Files.readAllBytes(Paths.get(getClass().getResource(jsonFile).toURI()));
92 final HttpResponse response = new HttpResponse(null, null);
93 response.status(HttpServletResponse.SC_OK);
94 doReturn(new HttpContentResponse(response, content, null, null)).when(request).send();
95 final List<DiscoveryResult> discoveryResults = new ArrayList<>();
96 final DraytonWiserDiscoveryService service = new DraytonWiserDiscoveryService() {
98 protected void thingDiscovered(final DiscoveryResult discoveryResult) {
99 discoveryResults.add(discoveryResult);
102 service.setThingHandler(bridgeHandler);
103 final DomainDTO domain = api.getDomain();
105 if (domain == null) {
106 fail("DomainDTO object is null");
108 service.onRefresh(new DraytonWiserDTO(domain));
109 assertThat(discoveryResults.size(), is(expectedResults));