2 * Copyright (c) 2010-2023 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;
15 import static org.junit.jupiter.api.Assertions.assertEquals;
16 import static org.mockito.Mockito.*;
18 import java.util.Arrays;
19 import java.util.Collections;
20 import java.util.List;
22 import org.eclipse.jdt.annotation.NonNullByDefault;
23 import org.eclipse.jdt.annotation.Nullable;
24 import org.junit.jupiter.api.Test;
25 import org.openhab.binding.mielecloud.internal.MieleCloudBindingConstants;
26 import org.openhab.binding.mielecloud.internal.MieleCloudBindingTestConstants;
27 import org.openhab.core.config.core.Configuration;
28 import org.openhab.core.config.discovery.DiscoveryResult;
29 import org.openhab.core.thing.Bridge;
30 import org.openhab.core.thing.Thing;
31 import org.openhab.core.thing.ThingTypeUID;
32 import org.openhab.core.thing.ThingUID;
35 * @author Björn Lange - Initial Contribution
38 public class ThingsTemplateGeneratorTest {
39 private static final String BRIDGE_ID = "genesis";
40 private static final String ALTERNATIVE_BRIDGE_ID = "mielebridge";
42 private static final String LOCALE = "en";
43 private static final String ALTERNATIVE_LOCALE = "de";
45 private static final String EMAIL = "openhab@openhab.org";
46 private static final String ALTERNATIVE_EMAIL = "everyone@openhab.org";
49 public void whenBridgeIdAndAccessTokenAndLocaleAreProvidedThenAValidBridgeConfigurationTemplateIsGenerated() {
51 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
54 String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, LOCALE);
57 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ]", template);
61 public void whenAnAlternativeBridgeIdIsProvidedThenAValidBridgeConfigurationTemplateWithThatIdIsGenerated() {
63 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
66 String template = templateGenerator.createBridgeConfigurationTemplate(ALTERNATIVE_BRIDGE_ID, EMAIL, LOCALE);
69 assertEquals("Bridge mielecloud:account:mielebridge [ email=\"openhab@openhab.org\", locale=\"en\" ]",
74 public void whenAnAlternativeAccessTokenIsProvidedThenAValidBridgeConfigurationTemplateWithThatAccessTokenIsGenerated() {
76 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
79 String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, LOCALE);
82 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ]", template);
86 public void whenAnAlternativeLocaleIsProvidedThenAValidBridgeConfigurationTemplateWithThatLocaleIsGenerated() {
88 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
91 String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, ALTERNATIVE_LOCALE);
94 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"de\" ]", template);
98 public void whenAnAlternativeEmailIsProvidedThenAValidBridgeConfigurationTemplateWithThatEmailIsGenerated() {
100 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
103 String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, ALTERNATIVE_EMAIL, LOCALE);
106 assertEquals("Bridge mielecloud:account:genesis [ email=\"everyone@openhab.org\", locale=\"en\" ]", template);
109 private Bridge createBridgeMock(String id, String locale, String email) {
110 Configuration configuration = mock(Configuration.class);
111 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_LOCALE)).thenReturn(locale);
112 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_EMAIL)).thenReturn(email);
114 Bridge bridge = mock(Bridge.class);
115 when(bridge.getUID()).thenReturn(new ThingUID(MieleCloudBindingConstants.THING_TYPE_BRIDGE, id));
116 when(bridge.getConfiguration()).thenReturn(configuration);
121 private Thing createThingMock(ThingTypeUID thingTypeUid, String deviceIdentifier, @Nullable String label,
123 Configuration configuration = mock(Configuration.class);
124 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_DEVICE_IDENTIFIER)).thenReturn(deviceIdentifier);
126 Thing thing = mock(Thing.class);
127 when(thing.getThingTypeUID()).thenReturn(thingTypeUid);
128 when(thing.getUID()).thenReturn(new ThingUID(thingTypeUid, deviceIdentifier, bridgeId));
129 when(thing.getLabel()).thenReturn(label);
130 when(thing.getConfiguration()).thenReturn(configuration);
134 private DiscoveryResult createDiscoveryResultMock(ThingTypeUID thingTypeUid, String id, String label,
136 DiscoveryResult discoveryResult = mock(DiscoveryResult.class);
137 when(discoveryResult.getLabel()).thenReturn(label);
138 when(discoveryResult.getThingTypeUID()).thenReturn(thingTypeUid);
139 when(discoveryResult.getThingUID()).thenReturn(new ThingUID(thingTypeUid, id, bridgeId));
140 when(discoveryResult.getProperties())
141 .thenReturn(Collections.singletonMap(MieleCloudBindingConstants.CONFIG_PARAM_DEVICE_IDENTIFIER, id));
142 return discoveryResult;
146 public void whenNoThingsArePairedAndNoInboxEntriesAreAvailableThenAnEmptyConfigurationTemplateIsGenerated() {
148 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
150 Bridge bridge = createBridgeMock(MieleCloudBindingTestConstants.BRIDGE_ID, LOCALE, EMAIL);
153 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
154 Collections.emptyList());
157 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ] {\n}",
162 public void whenPairedThingsArePresentThenTheyArePresentInTheConfigurationTemplate() {
164 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
166 Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, ALTERNATIVE_EMAIL);
168 Thing thing1 = createThingMock(MieleCloudBindingConstants.THING_TYPE_OVEN, "000137439123", "Oven H7860XY",
169 ALTERNATIVE_BRIDGE_ID);
170 Thing thing2 = createThingMock(MieleCloudBindingConstants.THING_TYPE_HOB, "000160106123", null,
171 ALTERNATIVE_BRIDGE_ID);
173 List<Thing> pairedThings = Arrays.asList(thing1, thing2);
176 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, pairedThings,
177 Collections.emptyList());
180 assertEquals("Bridge mielecloud:account:mielebridge [ email=\"everyone@openhab.org\", locale=\"de\" ] {\n"
181 + " Thing oven 000137439123 \"Oven H7860XY\" [ deviceIdentifier=\"000137439123\" ]\n"
182 + " Thing hob 000160106123 [ deviceIdentifier=\"000160106123\" ]\n}", template);
186 public void whenDiscoveryResultsAreInTheInboxThenTheyArePresentInTheConfigurationTemplate() {
188 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
190 Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, ALTERNATIVE_EMAIL);
192 DiscoveryResult discoveryResult1 = createDiscoveryResultMock(
193 MieleCloudBindingConstants.THING_TYPE_FRIDGE_FREEZER, "000154106123", "Fridge-Freezer Kitchen",
194 ALTERNATIVE_BRIDGE_ID);
195 DiscoveryResult discoveryResult2 = createDiscoveryResultMock(
196 MieleCloudBindingConstants.THING_TYPE_WASHING_MACHINE, "000189106123", "Washing Machine",
197 ALTERNATIVE_BRIDGE_ID);
199 List<DiscoveryResult> discoveredThings = Arrays.asList(discoveryResult1, discoveryResult2);
202 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
206 assertEquals("Bridge mielecloud:account:mielebridge [ email=\"everyone@openhab.org\", locale=\"de\" ] {\n"
207 + " Thing fridge_freezer 000154106123 \"Fridge-Freezer Kitchen\" [ deviceIdentifier=\"000154106123\" ]\n"
208 + " Thing washing_machine 000189106123 \"Washing Machine\" [ deviceIdentifier=\"000189106123\" ]\n}",
213 public void whenThingsArePresentAndDiscoveryResultsAreInTheInboxThenTheyArePresentInTheConfigurationTemplate() {
215 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
217 Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, EMAIL);
219 Thing thing1 = createThingMock(MieleCloudBindingConstants.THING_TYPE_OVEN, "000137439123", "Oven H7860XY",
220 ALTERNATIVE_BRIDGE_ID);
221 Thing thing2 = createThingMock(MieleCloudBindingConstants.THING_TYPE_HOB, "000160106123", null,
222 ALTERNATIVE_BRIDGE_ID);
224 List<Thing> pairedThings = Arrays.asList(thing1, thing2);
226 DiscoveryResult discoveryResult1 = createDiscoveryResultMock(
227 MieleCloudBindingConstants.THING_TYPE_FRIDGE_FREEZER, "000154106123", "Fridge-Freezer Kitchen",
228 ALTERNATIVE_BRIDGE_ID);
229 DiscoveryResult discoveryResult2 = createDiscoveryResultMock(
230 MieleCloudBindingConstants.THING_TYPE_WASHING_MACHINE, "000189106123", "Washing Machine",
231 ALTERNATIVE_BRIDGE_ID);
233 List<DiscoveryResult> discoveredThings = Arrays.asList(discoveryResult1, discoveryResult2);
236 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, pairedThings,
240 assertEquals("Bridge mielecloud:account:mielebridge [ email=\"openhab@openhab.org\", locale=\"de\" ] {\n"
241 + " Thing oven 000137439123 \"Oven H7860XY\" [ deviceIdentifier=\"000137439123\" ]\n"
242 + " Thing hob 000160106123 [ deviceIdentifier=\"000160106123\" ]\n"
243 + " Thing fridge_freezer 000154106123 \"Fridge-Freezer Kitchen\" [ deviceIdentifier=\"000154106123\" ]\n"
244 + " Thing washing_machine 000189106123 \"Washing Machine\" [ deviceIdentifier=\"000189106123\" ]\n}",
249 public void whenNoLocaleIsConfiguredThenTheDefaultIsUsed() {
251 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
253 Configuration configuration = mock(Configuration.class);
254 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_LOCALE)).thenReturn(null);
255 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_EMAIL)).thenReturn(EMAIL);
257 Bridge bridge = mock(Bridge.class);
258 when(bridge.getUID()).thenReturn(
259 new ThingUID(MieleCloudBindingConstants.THING_TYPE_BRIDGE, MieleCloudBindingTestConstants.BRIDGE_ID));
260 when(bridge.getConfiguration()).thenReturn(configuration);
263 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
264 Collections.emptyList());
267 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ] {\n}",