]> git.basschouten.com Git - openhab-addons.git/blob
837ac63673220cef353c3ed4f6f7b67b408a0579
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 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.draytonwiser.internal.discovery;
14
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;
20
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;
30
31 import javax.servlet.http.HttpServletResponse;
32
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;
53
54 /**
55  * Test class for {@link DraytonWiserDiscoveryService}.
56  *
57  * @author Hilbrand Bouwkamp - Initial contribution
58  */
59 @ExtendWith(MockitoExtension.class)
60 public class DraytonWiserDiscoveryServiceTest {
61
62     private @Mock HeatHubHandler bridgeHandler;
63     private @Mock Bridge bridge;
64     private @Mock HttpClient httpClient;
65     private @Mock Request request;
66
67     private DraytonWiserApi api;
68
69     public static List<Object[]> data() {
70         return Arrays.asList(new Object[] { "../test1.json", 11 }, new Object[] { "../test2.json", 22 });
71     }
72
73     @BeforeEach
74     public void before() {
75         api = new DraytonWiserApi(httpClient);
76         api.setConfiguration(new HeatHubConfiguration());
77
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();
85     }
86
87     @ParameterizedTest
88     @MethodSource("data")
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() {
97             @Override
98             protected void thingDiscovered(final DiscoveryResult discoveryResult) {
99                 discoveryResults.add(discoveryResult);
100             }
101         };
102         service.setThingHandler(bridgeHandler);
103         final DomainDTO domain = api.getDomain();
104
105         if (domain == null) {
106             fail("DomainDTO object is null");
107         } else {
108             service.onRefresh(new DraytonWiserDTO(domain));
109             assertThat(discoveryResults.size(), is(expectedResults));
110         }
111     }
112 }