2 * Copyright (c) 2010-2021 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.util.AbstractConfigFlowTest;
29 import org.openhab.binding.mielecloud.internal.util.MieleCloudBindingIntegrationTestConstants;
30 import org.openhab.binding.mielecloud.internal.util.Website;
31 import org.openhab.core.config.discovery.inbox.Inbox;
32 import org.openhab.core.thing.Thing;
33 import org.openhab.core.thing.ThingRegistry;
34 import org.openhab.core.thing.binding.ThingHandler;
37 * @author Björn Lange - Initial Contribution
40 public class CreateBridgeServletTest extends AbstractConfigFlowTest {
42 public void whenBridgeCreationFailsThenAWarningIsShownOnTheSuccessPage() throws Exception {
44 MieleCloudConfigService configService = getService(MieleCloudConfigService.class);
45 assertNotNull(configService);
47 CreateBridgeServlet createBridgeServlet = configService.getCreateBridgeServlet();
48 assertNotNull(createBridgeServlet);
50 Inbox inbox = mock(Inbox.class);
51 when(inbox.add(any())).thenReturn(true);
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 when(inbox.add(any())).thenReturn(false);
78 setPrivate(Objects.requireNonNull(createBridgeServlet), "inbox", inbox);
80 ThingRegistry thingRegistry = mock(ThingRegistry.class);
81 when(thingRegistry.get(any())).thenReturn(null);
82 setPrivate(Objects.requireNonNull(createBridgeServlet), "thingRegistry", thingRegistry);
85 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
86 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
87 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
88 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
91 assertTrue(website.contains("Pairing successful!"));
92 assertTrue(website.contains(
93 "Could not auto reconfigure the bridge. Bridge thing or thing handler is not available. Please try the configuration flow again."));
97 public void whenBridgeReconfigurationFailsDueToMissingBridgeHandlerThenAWarningIsShownOnTheSuccessPage()
100 MieleCloudConfigService configService = getService(MieleCloudConfigService.class);
101 assertNotNull(configService);
103 CreateBridgeServlet createBridgeServlet = configService.getCreateBridgeServlet();
104 assertNotNull(createBridgeServlet);
106 Inbox inbox = mock(Inbox.class);
107 when(inbox.add(any())).thenReturn(false);
108 setPrivate(Objects.requireNonNull(createBridgeServlet), "inbox", inbox);
110 Thing bridge = mock(Thing.class);
111 when(bridge.getHandler()).thenReturn(null);
113 ThingRegistry thingRegistry = mock(ThingRegistry.class);
114 when(thingRegistry.get(any())).thenReturn(bridge);
115 setPrivate(Objects.requireNonNull(createBridgeServlet), "thingRegistry", thingRegistry);
118 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
119 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
120 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
121 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
124 assertTrue(website.contains("Pairing successful!"));
125 assertTrue(website.contains(
126 "Could not auto reconfigure the bridge. Bridge thing or thing handler is not available. Please try the configuration flow again."));
130 public void whenBridgeIsReconfiguredThenTheConfigurationParametersAreUpdatedAndTheOverviewPageIsDisplayed()
135 MieleCloudConfigService configService = getService(MieleCloudConfigService.class);
136 assertNotNull(configService);
138 CreateBridgeServlet createBridgeServlet = configService.getCreateBridgeServlet();
139 assertNotNull(createBridgeServlet);
141 OAuthTokenRefresher tokenRefresher = mock(OAuthTokenRefresher.class);
142 when(tokenRefresher.getAccessTokenFromStorage(anyString()))
143 .thenReturn(Optional.of(MieleCloudBindingIntegrationTestConstants.ALTERNATIVE_ACCESS_TOKEN));
145 Thing bridge = getThingRegistry().get(MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID);
146 assertNotNull(bridge);
147 ThingHandler bridgeHandler = bridge.getHandler();
148 assertNotNull(bridgeHandler);
149 setPrivate(Objects.requireNonNull(bridgeHandler), "tokenRefresher", tokenRefresher);
152 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
153 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
154 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
155 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
158 assertTrue(website.contains("<li class=\"active\">Overview</li>"));
160 assertEquals(MieleCloudBindingIntegrationTestConstants.ALTERNATIVE_ACCESS_TOKEN,
161 bridge.getProperties().get(MieleCloudBindingConstants.PROPERTY_ACCESS_TOKEN));
165 public void whenNoBridgeUidIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
168 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
169 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
172 assertTrue(website.contains("Pairing failed!"));
173 assertTrue(website.contains("Missing bridge UID."));
177 public void whenAnEmptyBridgeUidIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
180 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
181 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "=&" + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "="
182 + MieleCloudBindingIntegrationTestConstants.EMAIL);
185 assertTrue(website.contains("Pairing failed!"));
186 assertTrue(website.contains("Missing bridge UID."));
190 public void whenAMalformedBridgeUidIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
193 Website website = getCrawler().doGetRelative("/mielecloud/createBridgeThing?"
194 + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "=gen!e!sis&"
195 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=" + MieleCloudBindingIntegrationTestConstants.EMAIL);
198 assertTrue(website.contains("Pairing failed!"));
199 assertTrue(website.contains("Malformed bridge UID."));
203 public void whenNoEmailIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
206 Website website = getCrawler()
207 .doGetRelative("/mielecloud/createBridgeThing?" + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
208 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString());
211 assertTrue(website.contains("Pairing failed!"));
212 assertTrue(website.contains("Missing e-mail address."));
216 public void whenAnEmptyEmailIsPassedToBridgeCreationThenTheBrowserIsRedirectedToTheFailurePageAndAnErrorIsShown()
219 Website website = getCrawler()
220 .doGetRelative("/mielecloud/createBridgeThing?" + CreateBridgeServlet.BRIDGE_UID_PARAMETER_NAME + "="
221 + MieleCloudBindingIntegrationTestConstants.BRIDGE_THING_UID.getAsString() + "&"
222 + CreateBridgeServlet.EMAIL_PARAMETER_NAME + "=");
225 assertTrue(website.contains("Pairing failed!"));
226 assertTrue(website.contains("Missing e-mail address."));