]> git.basschouten.com Git - openhab-addons.git/blob
934a43beae37c4c483f1483f5624e6e8577895c1
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
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
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.mielecloud.internal.config;
14
15 import static org.junit.jupiter.api.Assertions.assertEquals;
16 import static org.mockito.Mockito.*;
17
18 import java.util.Arrays;
19 import java.util.Collections;
20 import java.util.List;
21
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;
33
34 /**
35  * @author Björn Lange - Initial Contribution
36  */
37 @NonNullByDefault
38 public class ThingsTemplateGeneratorTest {
39     private static final String BRIDGE_ID = "genesis";
40     private static final String ALTERNATIVE_BRIDGE_ID = "mielebridge";
41
42     private static final String LOCALE = "en";
43     private static final String ALTERNATIVE_LOCALE = "de";
44
45     private static final String EMAIL = "openhab@openhab.org";
46     private static final String ALTERNATIVE_EMAIL = "everyone@openhab.org";
47
48     @Test
49     public void whenBridgeIdAndAccessTokenAndLocaleAreProvidedThenAValidBridgeConfigurationTemplateIsGenerated() {
50         // given:
51         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
52
53         // when:
54         String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, LOCALE);
55
56         // then:
57         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ]", template);
58     }
59
60     @Test
61     public void whenAnAlternativeBridgeIdIsProvidedThenAValidBridgeConfigurationTemplateWithThatIdIsGenerated() {
62         // given:
63         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
64
65         // when:
66         String template = templateGenerator.createBridgeConfigurationTemplate(ALTERNATIVE_BRIDGE_ID, EMAIL, LOCALE);
67
68         // then:
69         assertEquals("Bridge mielecloud:account:mielebridge [ email=\"openhab@openhab.org\", locale=\"en\" ]",
70                 template);
71     }
72
73     @Test
74     public void whenAnAlternativeAccessTokenIsProvidedThenAValidBridgeConfigurationTemplateWithThatAccessTokenIsGenerated() {
75         // given:
76         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
77
78         // when:
79         String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, LOCALE);
80
81         // then:
82         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ]", template);
83     }
84
85     @Test
86     public void whenAnAlternativeLocaleIsProvidedThenAValidBridgeConfigurationTemplateWithThatLocaleIsGenerated() {
87         // given:
88         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
89
90         // when:
91         String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, ALTERNATIVE_LOCALE);
92
93         // then:
94         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"de\" ]", template);
95     }
96
97     @Test
98     public void whenAnAlternativeEmailIsProvidedThenAValidBridgeConfigurationTemplateWithThatEmailIsGenerated() {
99         // given:
100         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
101
102         // when:
103         String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, ALTERNATIVE_EMAIL, LOCALE);
104
105         // then:
106         assertEquals("Bridge mielecloud:account:genesis [ email=\"everyone@openhab.org\", locale=\"en\" ]", template);
107     }
108
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);
113
114         Bridge bridge = mock(Bridge.class);
115         when(bridge.getUID()).thenReturn(new ThingUID(MieleCloudBindingConstants.THING_TYPE_BRIDGE, id));
116         when(bridge.getConfiguration()).thenReturn(configuration);
117
118         return bridge;
119     }
120
121     private Thing createThingMock(ThingTypeUID thingTypeUid, String deviceIdentifier, @Nullable String label,
122             String bridgeId) {
123         Configuration configuration = mock(Configuration.class);
124         when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_DEVICE_IDENTIFIER)).thenReturn(deviceIdentifier);
125
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);
131         return thing;
132     }
133
134     private DiscoveryResult createDiscoveryResultMock(ThingTypeUID thingTypeUid, String id, String label,
135             String bridgeId) {
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;
143     }
144
145     @Test
146     public void whenNoThingsArePairedAndNoInboxEntriesAreAvailableThenAnEmptyConfigurationTemplateIsGenerated() {
147         // given:
148         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
149
150         Bridge bridge = createBridgeMock(MieleCloudBindingTestConstants.BRIDGE_ID, LOCALE, EMAIL);
151
152         // when:
153         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
154                 Collections.emptyList());
155
156         // then:
157         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ] {\n}",
158                 template);
159     }
160
161     @Test
162     public void whenPairedThingsArePresentThenTheyArePresentInTheConfigurationTemplate() {
163         // given:
164         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
165
166         Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, ALTERNATIVE_EMAIL);
167
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);
172
173         List<Thing> pairedThings = Arrays.asList(thing1, thing2);
174
175         // when:
176         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, pairedThings,
177                 Collections.emptyList());
178
179         // then:
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);
183     }
184
185     @Test
186     public void whenDiscoveryResultsAreInTheInboxThenTheyArePresentInTheConfigurationTemplate() {
187         // given:
188         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
189
190         Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, ALTERNATIVE_EMAIL);
191
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);
198
199         List<DiscoveryResult> discoveredThings = Arrays.asList(discoveryResult1, discoveryResult2);
200
201         // when:
202         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
203                 discoveredThings);
204
205         // then:
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}",
209                 template);
210     }
211
212     @Test
213     public void whenThingsArePresentAndDiscoveryResultsAreInTheInboxThenTheyArePresentInTheConfigurationTemplate() {
214         // given:
215         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
216
217         Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, EMAIL);
218
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);
223
224         List<Thing> pairedThings = Arrays.asList(thing1, thing2);
225
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);
232
233         List<DiscoveryResult> discoveredThings = Arrays.asList(discoveryResult1, discoveryResult2);
234
235         // when:
236         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, pairedThings,
237                 discoveredThings);
238
239         // then:
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}",
245                 template);
246     }
247
248     @Test
249     public void whenNoLocaleIsConfiguredThenTheDefaultIsUsed() {
250         // given:
251         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
252
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);
256
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);
261
262         // when:
263         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
264                 Collections.emptyList());
265
266         // then:
267         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ] {\n}",
268                 template);
269     }
270 }