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.mielecloud.internal.config.servlet;
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.mockito.ArgumentMatchers.*;
17 import static org.mockito.Mockito.*;
18 import static org.openhab.binding.mielecloud.internal.util.ReflectionUtil.setPrivate;
20 import java.util.Objects;
21 import java.util.Optional;
23 import org.eclipse.jdt.annotation.NonNullByDefault;
24 import org.junit.jupiter.api.Test;
25 import org.openhab.binding.mielecloud.internal.MieleCloudBindingConstants;
26 import org.openhab.binding.mielecloud.internal.auth.OAuthTokenRefresher;
27 import org.openhab.binding.mielecloud.internal.config.MieleCloudConfigService;
28 import org.openhab.binding.mielecloud.internal.config.exception.BridgeReconfigurationFailedException;
29 import org.openhab.binding.mielecloud.internal.util.AbstractConfigFlowTest;
30 import org.openhab.binding.mielecloud.internal.util.MieleCloudBindingIntegrationTestConstants;
31 import org.openhab.binding.mielecloud.internal.util.Website;
32 import org.openhab.core.config.discovery.inbox.Inbox;
33 import org.openhab.core.thing.Thing;
34 import org.openhab.core.thing.ThingRegistry;
35 import org.openhab.core.thing.binding.ThingHandler;
38 * @author Björn Lange - Initial Contribution
41 public class CreateBridgeServletTest extends AbstractConfigFlowTest {
43 public void whenBridgeCreationFailsThenAWarningIsShownOnTheSuccessPage() throws Exception {
45 MieleCloudConfigService configService = getService(MieleCloudConfigService.class);
46 assertNotNull(configService);
48 CreateBridgeServlet createBridgeServlet = configService.getCreateBridgeServlet();
49 assertNotNull(createBridgeServlet);
51 Inbox inbox = mock(Inbox.class);
52 when(inbox.approve(any(), anyString(), anyString())).thenReturn(null);
53 setPrivate(Objects.requireNonNull(createBridgeServlet), "inbox", inbox);
56 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
57 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
58 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
59 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
62 assertTrue(website.contains("Pairing successful!"));
63 assertTrue(website.contains(
64 "Could not auto configure the bridge. Failed to approve the bridge from the inbox. Please try the configuration flow again."));
68 public void whenBridgeReconfigurationFailsDueToMissingBridgeThenAWarningIsShownOnTheSuccessPage() throws Exception {
70 MieleCloudConfigService configService = getService(MieleCloudConfigService.class);
71 assertNotNull(configService);
73 CreateBridgeServlet createBridgeServlet = configService.getCreateBridgeServlet();
74 assertNotNull(createBridgeServlet);
76 Inbox inbox = mock(Inbox.class);
77 setPrivate(Objects.requireNonNull(createBridgeServlet), "inbox", inbox);
79 ThingRegistry thingRegistry = mock(ThingRegistry.class);
80 when(thingRegistry.get(any())).thenThrow(new BridgeReconfigurationFailedException(""));
81 setPrivate(Objects.requireNonNull(createBridgeServlet), "thingRegistry", thingRegistry);
84 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
85 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
86 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
87 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
90 assertTrue(website.contains("Pairing successful!"));
91 assertTrue(website.contains(
92 "Could not auto reconfigure the bridge. Bridge thing or thing handler is not available. Please try the configuration flow again."));
96 public void whenBridgeReconfigurationFailsDueToMissingBridgeHandlerThenAWarningIsShownOnTheSuccessPage()
99 MieleCloudConfigService configService = getService(MieleCloudConfigService.class);
100 assertNotNull(configService);
102 CreateBridgeServlet createBridgeServlet = configService.getCreateBridgeServlet();
103 assertNotNull(createBridgeServlet);
105 Inbox inbox = mock(Inbox.class);
106 setPrivate(Objects.requireNonNull(createBridgeServlet), "inbox", inbox);
108 Thing bridge = mock(Thing.class);
109 when(bridge.getHandler()).thenReturn(null);
111 ThingRegistry thingRegistry = mock(ThingRegistry.class);
112 when(thingRegistry.get(any())).thenReturn(bridge);
113 setPrivate(Objects.requireNonNull(createBridgeServlet), "thingRegistry", thingRegistry);
116 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
117 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
118 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
119 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
122 assertTrue(website.contains("Pairing successful!"));
123 assertTrue(website.contains(
124 "Could not auto reconfigure the bridge. Bridge thing or thing handler is not available. Please try the configuration flow again."));
128 public void whenBridgeIsReconfiguredThenTheConfigurationParametersAreUpdatedAndTheOverviewPageIsDisplayed()
133 MieleCloudConfigService configService = getService(MieleCloudConfigService.class);
134 assertNotNull(configService);
136 CreateBridgeServlet createBridgeServlet = configService.getCreateBridgeServlet();
137 assertNotNull(createBridgeServlet);
139 OAuthTokenRefresher tokenRefresher = mock(OAuthTokenRefresher.class);
140 when(tokenRefresher.getAccessTokenFromStorage(anyString()))
141 .thenReturn(Optional.of(MieleCloudBindingIntegrationTestConstants.ALTERNATIVE_ACCESS_TOKEN));
143 Thing bridge = getThingRegistry().get(MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID);
144 assertNotNull(bridge);
145 ThingHandler bridgeHandler = bridge.getHandler();
146 assertNotNull(bridgeHandler);
147 setPrivate(Objects.requireNonNull(bridgeHandler), "tokenRefresher", tokenRefresher);
150 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
151 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
152 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
153 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
156 assertTrue(website.contains("<li class=\"active\">Overview</li>"));
158 assertEquals(MieleCloudBindingIntegrationTestConstants.ALTERNATIVE_ACCESS_TOKEN,
159 bridge.getProperties().get(MieleCloudBindingConstants.PROPERTY_ACCESS_TOKEN));
163 public void whenNoBridgeUidIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
166 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
167 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
170 assertTrue(website.contains("Pairing failed!"));
171 assertTrue(website.contains("Missing bridge UID."));
175 public void whenAnEmptyBridgeUidIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
178 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
179 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "=&" + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "="
180 + MieleCloudBindingIntegrationTestConstants.EMAIL);
183 assertTrue(website.contains("Pairing failed!"));
184 assertTrue(website.contains("Missing bridge UID."));
188 public void whenAMalformedBridgeUidIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
191 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
192 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "=gen!e!sis&"
193 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
196 assertTrue(website.contains("Pairing failed!"));
197 assertTrue(website.contains("Malformed bridge UID."));
201 public void whenNoEmailIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
204 Website website = getCrawler()
205 .doGetRelative("/mielecloud/createBridgeThing?" + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
206 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString());
209 assertTrue(website.contains("Pairing failed!"));
210 assertTrue(website.contains("Missing e-mail address."));
214 public void whenAnEmptyEmailIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
217 Website website = getCrawler()
218 .doGetRelative("/mielecloud/createBridgeThing?" + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
219 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
220 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=");
223 assertTrue(website.contains("Pairing failed!"));
224 assertTrue(website.contains("Missing e-mail address."));