]> git.basschouten.com Git - openhab-addons.git/blob
2efd61b8d92a9561f9e055ba4edbe4496b11acee
[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 import java.util.Map;
22
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;
34
35 /**
36  * @author Björn Lange - Initial Contribution
37  */
38 @NonNullByDefault
39 public class ThingsTemplateGeneratorTest {
40     private static final String BRIDGE_ID = "genesis";
41     private static final String ALTERNATIVE_BRIDGE_ID = "mielebridge";
42
43     private static final String LOCALE = "en";
44     private static final String ALTERNATIVE_LOCALE = "de";
45
46     private static final String EMAIL = "openhab@openhab.org";
47     private static final String ALTERNATIVE_EMAIL = "everyone@openhab.org";
48
49     @Test
50     public void whenBridgeIdAndAccessTokenAndLocaleAreProvidedThenAValidBridgeConfigurationTemplateIsGenerated() {
51         // given:
52         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
53
54         // when:
55         String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, LOCALE);
56
57         // then:
58         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ]", template);
59     }
60
61     @Test
62     public void whenAnAlternativeBridgeIdIsProvidedThenAValidBridgeConfigurationTemplateWithThatIdIsGenerated() {
63         // given:
64         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
65
66         // when:
67         String template = templateGenerator.createBridgeConfigurationTemplate(ALTERNATIVE_BRIDGE_ID, EMAIL, LOCALE);
68
69         // then:
70         assertEquals("Bridge mielecloud:account:mielebridge [ email=\"openhab@openhab.org\", locale=\"en\" ]",
71                 template);
72     }
73
74     @Test
75     public void whenAnAlternativeAccessTokenIsProvidedThenAValidBridgeConfigurationTemplateWithThatAccessTokenIsGenerated() {
76         // given:
77         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
78
79         // when:
80         String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, LOCALE);
81
82         // then:
83         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ]", template);
84     }
85
86     @Test
87     public void whenAnAlternativeLocaleIsProvidedThenAValidBridgeConfigurationTemplateWithThatLocaleIsGenerated() {
88         // given:
89         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
90
91         // when:
92         String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, EMAIL, ALTERNATIVE_LOCALE);
93
94         // then:
95         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"de\" ]", template);
96     }
97
98     @Test
99     public void whenAnAlternativeEmailIsProvidedThenAValidBridgeConfigurationTemplateWithThatEmailIsGenerated() {
100         // given:
101         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
102
103         // when:
104         String template = templateGenerator.createBridgeConfigurationTemplate(BRIDGE_ID, ALTERNATIVE_EMAIL, LOCALE);
105
106         // then:
107         assertEquals("Bridge mielecloud:account:genesis [ email=\"everyone@openhab.org\", locale=\"en\" ]", template);
108     }
109
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);
114
115         Bridge bridge = mock(Bridge.class);
116         when(bridge.getUID()).thenReturn(new ThingUID(MieleCloudBindingConstants.THING_TYPE_BRIDGE, id));
117         when(bridge.getConfiguration()).thenReturn(configuration);
118
119         return bridge;
120     }
121
122     private Thing createThingMock(ThingTypeUID thingTypeUid, String deviceIdentifier, @Nullable String label,
123             String bridgeId) {
124         Configuration configuration = mock(Configuration.class);
125         when(configuration.get(MieleCloudBindingConstants.CONFIG_PARAM_DEVICE_IDENTIFIER)).thenReturn(deviceIdentifier);
126
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);
132         return thing;
133     }
134
135     private DiscoveryResult createDiscoveryResultMock(ThingTypeUID thingTypeUid, String id, String label,
136             String bridgeId) {
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;
144     }
145
146     @Test
147     public void whenNoThingsArePairedAndNoInboxEntriesAreAvailableThenAnEmptyConfigurationTemplateIsGenerated() {
148         // given:
149         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
150
151         Bridge bridge = createBridgeMock(MieleCloudBindingTestConstants.BRIDGE_ID, LOCALE, EMAIL);
152
153         // when:
154         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
155                 Collections.emptyList());
156
157         // then:
158         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ] {\n}",
159                 template);
160     }
161
162     @Test
163     public void whenPairedThingsArePresentThenTheyArePresentInTheConfigurationTemplate() {
164         // given:
165         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
166
167         Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, ALTERNATIVE_EMAIL);
168
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);
173
174         List<Thing> pairedThings = Arrays.asList(thing1, thing2);
175
176         // when:
177         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, pairedThings,
178                 Collections.emptyList());
179
180         // then:
181         assertEquals("""
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" ]
185                 }\
186                 """, template);
187     }
188
189     @Test
190     public void whenDiscoveryResultsAreInTheInboxThenTheyArePresentInTheConfigurationTemplate() {
191         // given:
192         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
193
194         Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, ALTERNATIVE_EMAIL);
195
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);
202
203         List<DiscoveryResult> discoveredThings = Arrays.asList(discoveryResult1, discoveryResult2);
204
205         // when:
206         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
207                 discoveredThings);
208
209         // then:
210         assertEquals("""
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" ]
214                 }\
215                 """, template);
216     }
217
218     @Test
219     public void whenThingsArePresentAndDiscoveryResultsAreInTheInboxThenTheyArePresentInTheConfigurationTemplate() {
220         // given:
221         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
222
223         Bridge bridge = createBridgeMock(ALTERNATIVE_BRIDGE_ID, ALTERNATIVE_LOCALE, EMAIL);
224
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);
229
230         List<Thing> pairedThings = Arrays.asList(thing1, thing2);
231
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);
238
239         List<DiscoveryResult> discoveredThings = Arrays.asList(discoveryResult1, discoveryResult2);
240
241         // when:
242         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, pairedThings,
243                 discoveredThings);
244
245         // then:
246         assertEquals("""
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" ]
252                 }\
253                 """, template);
254     }
255
256     @Test
257     public void whenNoLocaleIsConfiguredThenTheDefaultIsUsed() {
258         // given:
259         ThingsTemplateGenerator templateGenerator = new ThingsTemplateGenerator();
260
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);
264
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);
269
270         // when:
271         String template = templateGenerator.createBridgeAndThingConfigurationTemplate(bridge, Collections.emptyList(),
272                 Collections.emptyList());
273
274         // then:
275         assertEquals("Bridge mielecloud:account:genesis [ email=\"openhab@openhab.org\", locale=\"en\" ] {\n}",
276                 template);
277     }
278 }