2 * Copyright (c) 2010-2022 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.bmwconnecteddrive.internal.discovery;
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.mockito.Mockito.*;
18 import java.util.List;
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;
34 import com.google.gson.Gson;
37 * The {@link DiscoveryTest} Test Discovery Results
39 * @author Bernd Weymann - Initial contribution
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;
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");
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);
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());