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;
23 import org.eclipse.jdt.annotation.NonNullByDefault;
24 import org.eclipse.jdt.annotation.Nullable;
25 import org.junit.jupiter.api.Test;
26 import org.openhab.binding.mielecloud.internal.MieleCloudBindingConstants;
27 import org.openhab.binding.mielecloud.internal.MieleCloudBindingTestConstants;
28 import org.openhab.core.config.core.Configuration;
29 import org.openhab.core.config.discovery.DiscoveryResult;
30 import org.openhab.core.thing.Bridge;
31 import org.openhab.core.thing.Thing;
32 import org.openhab.core.thing.ThingTypeUID;
33 import org.openhab.core.thing.ThingUID;
36 * @author Björn Lange - Initial Contribution
39 public class ThingsTemplateGeneratorTest {
40 private static final String BRIDGE_ID = "genesis";
41 private static final String ALTERNATIVE_BRIDGE_ID = "mielebridge";
43 private static final String LOCALE = "en";
44 private static final String ALTERNATIVE_LOCALE = "de";
46 private static final String EMAIL = "openhab@openhab.org";
47 private static final String ALTERNATIVE_EMAIL = "everyone@openhab.org";
50 public void whenBridgeIdAndAccessTokenAndLocaleAreProvidedThenAValidBridgeConfigurationTemplateIsGenerated() {
52 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
55 String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, LOCALE);
58 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ]", template);
62 public void whenAnAlternativeBridgeIdIsProvidedThenAValidBridgeConfigurationTemplateWithThatIdIsGenerated() {
64 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
67 String template = templateGenerator.createBridgeConfigurationTemplate(ALTERNATIVE_BRIDGE_ID, EMAIL, LOCALE);
70 assertEquals("Bridge mielecloud:account:mielebridge [ email=\"openhab@openhab.org\", locale=\"en\" ]",
75 public void whenAnAlternativeAccessTokenIsProvidedThenAValidBridgeConfigurationTemplateWithThatAccessTokenIsGenerated() {
77 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
80 String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, LOCALE);
83 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ]", template);
87 public void whenAnAlternativeLocaleIsProvidedThenAValidBridgeConfigurationTemplateWithThatLocaleIsGenerated() {
89 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
92 String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, ALTERNATIVE_LOCALE);
95 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"de\" ]", template);
99 public void whenAnAlternativeEmailIsProvidedThenAValidBridgeConfigurationTemplateWithThatEmailIsGenerated() {
101 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
104 String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, ALTERNATIVE_EMAIL, LOCALE);
107 assertEquals("Bridge mielecloud:account:genesis [ email=\"everyone@openhab.org\", locale=\"en\" ]", template);
110 private Bridge createBridgeMock(String id, String locale, String email) {
111 Configuration configuration = mock(Configuration.class);
112 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_LOCALE)).thenReturn(locale);
113 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_EMAIL)).thenReturn(email);
115 Bridge bridge = mock(Bridge.class);
116 when(bridge.getUID()).thenReturn(new ThingUID(MieleCloudBindingConstants.THING_TYPE_BRIDGE, id));
117 when(bridge.getConfiguration()).thenReturn(configuration);
122 private Thing createThingMock(ThingTypeUID thingTypeUid, String deviceIdentifier, @Nullable String label,
124 Configuration configuration = mock(Configuration.class);
125 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_DEVICE_IDENTIFIER)).thenReturn(deviceIdentifier);
127 Thing thing = mock(Thing.class);
128 when(thing.getThingTypeUID()).thenReturn(thingTypeUid);
129 when(thing.getUID()).thenReturn(new ThingUID(thingTypeUid, deviceIdentifier, bridgeId));
130 when(thing.getLabel()).thenReturn(label);
131 when(thing.getConfiguration()).thenReturn(configuration);
135 private DiscoveryResult createDiscoveryResultMock(ThingTypeUID thingTypeUid, String id, String label,
137 DiscoveryResult discoveryResult = mock(DiscoveryResult.class);
138 when(discoveryResult.getLabel()).thenReturn(label);
139 when(discoveryResult.getThingTypeUID()).thenReturn(thingTypeUid);
140 when(discoveryResult.getThingUID()).thenReturn(new ThingUID(thingTypeUid, id, bridgeId));
141 when(discoveryResult.getProperties())
142 .thenReturn(Map.of(MieleCloudBindingConstants.CONFIG_PARAM_DEVICE_IDENTIFIER, id));
143 return discoveryResult;
147 public void whenNoThingsArePairedAndNoInboxEntriesAreAvailableThenAnEmptyConfigurationTemplateIsGenerated() {
149 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
151 Bridge bridge = createBridgeMock(MieleCloudBindingTestConstants.BRIDGE_ID, LOCALE, EMAIL);
154 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
155 Collections.emptyList());
158 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ] {\n}",
163 public void whenPairedThingsArePresentThenTheyArePresentInTheConfigurationTemplate() {
165 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
167 Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, ALTERNATIVE_EMAIL);
169 Thing thing1 = createThingMock(MieleCloudBindingConstants.THING_TYPE_OVEN, "000137439123", "Oven H7860XY",
170 ALTERNATIVE_BRIDGE_ID);
171 Thing thing2 = createThingMock(MieleCloudBindingConstants.THING_TYPE_HOB, "000160106123", null,
172 ALTERNATIVE_BRIDGE_ID);
174 List<Thing> pairedThings = Arrays.asList(thing1, thing2);
177 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, pairedThings,
178 Collections.emptyList());
182 Bridge mielecloud:account:mielebridge [ email="everyone@openhab.org", locale="de" ] {
183 Thing oven 000137439123 "Oven H7860XY" [ deviceIdentifier="000137439123" ]
184 Thing hob 000160106123 [ deviceIdentifier="000160106123" ]
190 public void whenDiscoveryResultsAreInTheInboxThenTheyArePresentInTheConfigurationTemplate() {
192 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
194 Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, ALTERNATIVE_EMAIL);
196 DiscoveryResult discoveryResult1 = createDiscoveryResultMock(
197 MieleCloudBindingConstants.THING_TYPE_FRIDGE_FREEZER, "000154106123", "Fridge-Freezer Kitchen",
198 ALTERNATIVE_BRIDGE_ID);
199 DiscoveryResult discoveryResult2 = createDiscoveryResultMock(
200 MieleCloudBindingConstants.THING_TYPE_WASHING_MACHINE, "000189106123", "Washing Machine",
201 ALTERNATIVE_BRIDGE_ID);
203 List<DiscoveryResult> discoveredThings = Arrays.asList(discoveryResult1, discoveryResult2);
206 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
211 Bridge mielecloud:account:mielebridge [ email="everyone@openhab.org", locale="de" ] {
212 Thing fridge_freezer 000154106123 "Fridge-Freezer Kitchen" [ deviceIdentifier="000154106123" ]
213 Thing washing_machine 000189106123 "Washing Machine" [ deviceIdentifier="000189106123" ]
219 public void whenThingsArePresentAndDiscoveryResultsAreInTheInboxThenTheyArePresentInTheConfigurationTemplate() {
221 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
223 Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, EMAIL);
225 Thing thing1 = createThingMock(MieleCloudBindingConstants.THING_TYPE_OVEN, "000137439123", "Oven H7860XY",
226 ALTERNATIVE_BRIDGE_ID);
227 Thing thing2 = createThingMock(MieleCloudBindingConstants.THING_TYPE_HOB, "000160106123", null,
228 ALTERNATIVE_BRIDGE_ID);
230 List<Thing> pairedThings = Arrays.asList(thing1, thing2);
232 DiscoveryResult discoveryResult1 = createDiscoveryResultMock(
233 MieleCloudBindingConstants.THING_TYPE_FRIDGE_FREEZER, "000154106123", "Fridge-Freezer Kitchen",
234 ALTERNATIVE_BRIDGE_ID);
235 DiscoveryResult discoveryResult2 = createDiscoveryResultMock(
236 MieleCloudBindingConstants.THING_TYPE_WASHING_MACHINE, "000189106123", "Washing Machine",
237 ALTERNATIVE_BRIDGE_ID);
239 List<DiscoveryResult> discoveredThings = Arrays.asList(discoveryResult1, discoveryResult2);
242 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, pairedThings,
247 Bridge mielecloud:account:mielebridge [ email="openhab@openhab.org", locale="de" ] {
248 Thing oven 000137439123 "Oven H7860XY" [ deviceIdentifier="000137439123" ]
249 Thing hob 000160106123 [ deviceIdentifier="000160106123" ]
250 Thing fridge_freezer 000154106123 "Fridge-Freezer Kitchen" [ deviceIdentifier="000154106123" ]
251 Thing washing_machine 000189106123 "Washing Machine" [ deviceIdentifier="000189106123" ]
257 public void whenNoLocaleIsConfiguredThenTheDefaultIsUsed() {
259 ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
261 Configuration configuration = mock(Configuration.class);
262 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_LOCALE)).thenReturn(null);
263 when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_EMAIL)).thenReturn(EMAIL);
265 Bridge bridge = mock(Bridge.class);
266 when(bridge.getUID()).thenReturn(
267 new ThingUID(MieleCloudBindingConstants.THING_TYPE_BRIDGE, MieleCloudBindingTestConstants.BRIDGE_ID));
268 when(bridge.getConfiguration()).thenReturn(configuration);
271 String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
272 Collections.emptyList());
275 assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ] {\n}",