]> git.basschouten.com Git - openhab-addons.git/blob
612b990cfb60f47fdb09ee18e3adcad24f2ffd87
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 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.bmwconnecteddrive.internal.discovery;
14
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.mockito.Mockito.*;
17
18 import java.util.List;
19
20 import org.eclipse.jdt.annotation.NonNullByDefault;
21 import org.junit.jupiter.api.Test;
22 import org.mockito.ArgumentCaptor;
23 import org.openhab.binding.bmwconnecteddrive.internal.dto.discovery.VehiclesContainer;
24 import org.openhab.binding.bmwconnecteddrive.internal.handler.ConnectedDriveBridgeHandler;
25 import org.openhab.binding.bmwconnecteddrive.internal.util.FileReader;
26 import org.openhab.core.config.discovery.DiscoveryListener;
27 import org.openhab.core.config.discovery.DiscoveryResult;
28 import org.openhab.core.config.discovery.DiscoveryService;
29 import org.openhab.core.thing.Bridge;
30 import org.openhab.core.thing.ThingUID;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34 import com.google.gson.Gson;
35
36 /**
37  * The {@link DiscoveryTest} Test Discovery Results
38  *
39  * @author Bernd Weymann - Initial contribution
40  */
41 @NonNullByDefault
42 public class DiscoveryTest {
43     private final Logger logger = LoggerFactory.getLogger(DiscoveryTest.class);
44     private static final Gson GSON = new Gson();
45     private static final int DISCOVERY_VEHICLES = 9;
46
47     @Test
48     public void testDiscovery() {
49         String content = FileReader.readFileInString("src/test/resources/webapi/connected-drive-account-info.json");
50         ConnectedDriveBridgeHandler bh = mock(ConnectedDriveBridgeHandler.class);
51         Bridge b = mock(Bridge.class);
52         when(bh.getThing()).thenReturn(b);
53         when(b.getUID()).thenReturn(new ThingUID("bmwconnecteddrive", "account", "abc"));
54         VehicleDiscovery discovery = new VehicleDiscovery();
55         discovery.setThingHandler(bh);
56         DiscoveryListener listener = mock(DiscoveryListener.class);
57         discovery.addDiscoveryListener(listener);
58         VehiclesContainer container = GSON.fromJson(content, VehiclesContainer.class);
59         ArgumentCaptor<DiscoveryResult> discoveries = ArgumentCaptor.forClass(DiscoveryResult.class);
60         ArgumentCaptor<DiscoveryService> services = ArgumentCaptor.forClass(DiscoveryService.class);
61         if (container != null) {
62             discovery.onResponse(container);
63             verify(listener, times(1)).thingDiscovered(services.capture(), discoveries.capture());
64             List<DiscoveryResult> results = discoveries.getAllValues();
65             assertEquals(1, results.size(), "Found Vehicles");
66             DiscoveryResult result = results.get(0);
67             assertEquals("bmwconnecteddrive:bev_rex:abc:MY_REAL_VIN", result.getThingUID().getAsString(), "Thing UID");
68         } else {
69             assertTrue(false);
70         }
71     }
72
73     @Test
74     public void testBimmerDiscovery() {
75         String content = FileReader.readFileInString("src/test/resources/responses/vehicles.json");
76         ConnectedDriveBridgeHandler bh = mock(ConnectedDriveBridgeHandler.class);
77         Bridge b = mock(Bridge.class);
78         when(bh.getThing()).thenReturn(b);
79         when(b.getUID()).thenReturn(new ThingUID("bmwconnecteddrive", "account", "abc"));
80         VehicleDiscovery discovery = new VehicleDiscovery();
81         discovery.setThingHandler(bh);
82         DiscoveryListener listener = mock(DiscoveryListener.class);
83         discovery.addDiscoveryListener(listener);
84         VehiclesContainer container = GSON.fromJson(content, VehiclesContainer.class);
85         ArgumentCaptor<DiscoveryResult> discoveries = ArgumentCaptor.forClass(DiscoveryResult.class);
86         ArgumentCaptor<DiscoveryService> services = ArgumentCaptor.forClass(DiscoveryService.class);
87
88         if (container != null) {
89             discovery.onResponse(container);
90             verify(listener, times(DISCOVERY_VEHICLES)).thingDiscovered(services.capture(), discoveries.capture());
91             List<DiscoveryResult> results = discoveries.getAllValues();
92             results.forEach(entry -> {
93                 logger.info("{}", entry.toString());
94             });
95         } else {
96             assertTrue(false);
97         }
98     }
99 }