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.webservice.api;
15 import static org.junit.jupiter.api.Assertions.*;
16 import static org.mockito.Mockito.*;
18 import java.util.Objects;
19 import java.util.Optional;
21 import org.eclipse.jdt.annotation.NonNullByDefault;
22 import org.eclipse.jdt.annotation.Nullable;
23 import org.junit.jupiter.api.Test;
24 import org.openhab.binding.mielecloud.internal.webservice.api.json.DeviceType;
27 * @author Björn Lange - Initial contribution
30 public class WineStorageDeviceTemperatureStateTest {
31 private static final Integer TEMPERATURE_0 = 8;
32 private static final Integer TEMPERATURE_1 = 10;
33 private static final Integer TEMPERATURE_2 = 12;
35 private static final Integer TARGET_TEMPERATURE_0 = 5;
36 private static final Integer TARGET_TEMPERATURE_1 = 9;
37 private static final Integer TARGET_TEMPERATURE_2 = 11;
40 private DeviceState deviceState;
42 private DeviceState getDeviceState() {
43 assertNotNull(deviceState);
44 return Objects.requireNonNull(deviceState);
47 private void setUpDeviceStateMock(int numberOfTemperatures) {
48 deviceState = mock(DeviceState.class);
49 if (numberOfTemperatures > 0) {
50 when(getDeviceState().getTemperature(0)).thenReturn(Optional.of(TEMPERATURE_0));
51 when(getDeviceState().getTargetTemperature(0)).thenReturn(Optional.of(TARGET_TEMPERATURE_0));
53 when(getDeviceState().getTemperature(0)).thenReturn(Optional.empty());
54 when(getDeviceState().getTargetTemperature(0)).thenReturn(Optional.empty());
56 if (numberOfTemperatures > 1) {
57 when(getDeviceState().getTemperature(1)).thenReturn(Optional.of(TEMPERATURE_1));
58 when(getDeviceState().getTargetTemperature(1)).thenReturn(Optional.of(TARGET_TEMPERATURE_1));
60 when(getDeviceState().getTemperature(1)).thenReturn(Optional.empty());
61 when(getDeviceState().getTargetTemperature(1)).thenReturn(Optional.empty());
63 if (numberOfTemperatures > 2) {
64 when(getDeviceState().getTemperature(2)).thenReturn(Optional.of(TEMPERATURE_2));
65 when(getDeviceState().getTargetTemperature(2)).thenReturn(Optional.of(TARGET_TEMPERATURE_2));
67 when(getDeviceState().getTemperature(2)).thenReturn(Optional.empty());
68 when(getDeviceState().getTargetTemperature(2)).thenReturn(Optional.empty());
73 public void testGetTemperaturesForWineCabinetWithThreeCompartments() {
75 setUpDeviceStateMock(3);
76 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
77 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
80 Optional<Integer> temperature = state.getTemperature();
81 Optional<Integer> targetTemperature = state.getTargetTemperature();
84 assertFalse(temperature.isPresent());
85 assertFalse(targetTemperature.isPresent());
89 public void testGetTemperaturesForWineCabinetWithTwoCompartments() {
91 setUpDeviceStateMock(2);
92 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
93 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
96 Optional<Integer> temperature = state.getTemperature();
97 Optional<Integer> targetTemperature = state.getTargetTemperature();
100 assertFalse(temperature.isPresent());
101 assertFalse(targetTemperature.isPresent());
105 public void testGetTemperaturesForWineCabinetWithOneCompartment() {
107 setUpDeviceStateMock(1);
108 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
109 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
112 Integer temperature = state.getTemperature().get();
113 Integer targetTemperature = state.getTargetTemperature().get();
116 assertEquals(TEMPERATURE_0, temperature);
117 assertEquals(TARGET_TEMPERATURE_0, targetTemperature);
121 public void testGetTemperaturesForWineCabinetFreezerCombination() {
123 setUpDeviceStateMock(2);
124 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET_FREEZER_COMBINATION);
125 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
128 Optional<Integer> temperature = state.getTemperature();
129 Optional<Integer> targetTemperature = state.getTargetTemperature();
132 assertFalse(temperature.isPresent());
133 assertFalse(targetTemperature.isPresent());
137 public void testGetTemperaturesForOtherDeviceWithOneTemperature() {
139 setUpDeviceStateMock(1);
140 when(getDeviceState().getRawType()).thenReturn(DeviceType.OVEN);
141 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
144 Optional<Integer> temperature = state.getTemperature();
145 Optional<Integer> targetTemperature = state.getTargetTemperature();
148 assertFalse(temperature.isPresent());
149 assertFalse(targetTemperature.isPresent());
153 public void testGetTemperaturesWhenNoTemperaturesAreAvailable() {
155 setUpDeviceStateMock(0);
156 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
157 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
160 Optional<Integer> temperature = state.getTemperature();
161 Optional<Integer> targetTemperature = state.getTargetTemperature();
164 assertFalse(temperature.isPresent());
165 assertFalse(targetTemperature.isPresent());
169 public void testGetTopTemperaturesForWineCabinetWithThreeCompartments() {
171 setUpDeviceStateMock(3);
172 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
173 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
176 Integer temperature = state.getTopTemperature().get();
177 Integer targetTemperature = state.getTopTargetTemperature().get();
180 assertEquals(TEMPERATURE_0, temperature);
181 assertEquals(TARGET_TEMPERATURE_0, targetTemperature);
185 public void testGetTopTemperaturesForWineCabinetWithTwoCompartments() {
187 setUpDeviceStateMock(2);
188 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
189 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
192 Integer temperature = state.getTopTemperature().get();
193 Integer targetTemperature = state.getTopTargetTemperature().get();
196 assertEquals(TEMPERATURE_0, temperature);
197 assertEquals(TARGET_TEMPERATURE_0, targetTemperature);
201 public void testGetTopTemperaturesForWineCabinetWithOneCompartment() {
203 setUpDeviceStateMock(1);
204 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
205 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
208 Optional<Integer> temperature = state.getTopTemperature();
209 Optional<Integer> targetTemperature = state.getTopTargetTemperature();
212 assertFalse(temperature.isPresent());
213 assertFalse(targetTemperature.isPresent());
217 public void testGetTopTemperaturesForWineCabinetFreezerCombination() {
219 setUpDeviceStateMock(2);
220 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET_FREEZER_COMBINATION);
221 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
224 Integer temperature = state.getTopTemperature().get();
225 Integer targetTemperature = state.getTopTargetTemperature().get();
228 assertEquals(TEMPERATURE_0, temperature);
229 assertEquals(TARGET_TEMPERATURE_0, targetTemperature);
233 public void testGetTopTemperaturesForOtherDeviceWithTwoTemperatures() {
235 setUpDeviceStateMock(2);
236 when(getDeviceState().getRawType()).thenReturn(DeviceType.OVEN);
237 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
240 Optional<Integer> temperature = state.getTopTemperature();
241 Optional<Integer> targetTemperature = state.getTopTargetTemperature();
244 assertFalse(temperature.isPresent());
245 assertFalse(targetTemperature.isPresent());
249 public void testGetTopTemperaturesWhenNoTemperaturesAreAvailable() {
251 setUpDeviceStateMock(0);
252 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
253 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
256 Optional<Integer> temperature = state.getTopTemperature();
257 Optional<Integer> targetTemperature = state.getTopTargetTemperature();
260 assertFalse(temperature.isPresent());
261 assertFalse(targetTemperature.isPresent());
265 public void testGetMiddleTemperaturesForWineCabinetWithThreeCompartments() {
267 setUpDeviceStateMock(3);
268 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
269 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
272 Integer temperature = state.getMiddleTemperature().get();
273 Integer targetTemperature = state.getMiddleTargetTemperature().get();
276 assertEquals(TEMPERATURE_1, temperature);
277 assertEquals(TARGET_TEMPERATURE_1, targetTemperature);
281 public void testGetMiddleTemperaturesForWineCabinetWithTwoCompartments() {
283 setUpDeviceStateMock(2);
284 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
285 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
288 Optional<Integer> temperature = state.getMiddleTemperature();
289 Optional<Integer> targetTemperature = state.getMiddleTargetTemperature();
292 assertFalse(temperature.isPresent());
293 assertFalse(targetTemperature.isPresent());
297 public void testGetMiddleTemperaturesForWineCabinetWithOneCompartment() {
299 setUpDeviceStateMock(1);
300 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
301 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
304 Optional<Integer> temperature = state.getMiddleTemperature();
305 Optional<Integer> targetTemperature = state.getMiddleTargetTemperature();
308 assertFalse(temperature.isPresent());
309 assertFalse(targetTemperature.isPresent());
313 public void testGetMiddleTemperaturesForWineCabinetFreezerCombination() {
315 setUpDeviceStateMock(2);
316 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET_FREEZER_COMBINATION);
317 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
320 Optional<Integer> temperature = state.getMiddleTemperature();
321 Optional<Integer> targetTemperature = state.getMiddleTargetTemperature();
324 assertFalse(temperature.isPresent());
325 assertFalse(targetTemperature.isPresent());
329 public void testGetMiddleTemperaturesForOtherDeviceWithTwoTemperatures() {
331 setUpDeviceStateMock(2);
332 when(getDeviceState().getRawType()).thenReturn(DeviceType.OVEN);
333 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
336 Optional<Integer> temperature = state.getMiddleTemperature();
337 Optional<Integer> targetTemperature = state.getMiddleTargetTemperature();
340 assertFalse(temperature.isPresent());
341 assertFalse(targetTemperature.isPresent());
345 public void testGetMiddleTemperaturesWhenNoTemperaturesAreAvailable() {
347 setUpDeviceStateMock(0);
348 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
349 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
352 Optional<Integer> temperature = state.getMiddleTemperature();
353 Optional<Integer> targetTemperature = state.getMiddleTargetTemperature();
356 assertFalse(temperature.isPresent());
357 assertFalse(targetTemperature.isPresent());
361 public void testGetBottomTemperaturesForWineCabinetWithThreeCompartments() {
363 setUpDeviceStateMock(3);
364 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
365 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
368 Integer temperature = state.getBottomTemperature().get();
369 Integer targetTemperature = state.getBottomTargetTemperature().get();
372 assertEquals(TEMPERATURE_2, temperature);
373 assertEquals(TARGET_TEMPERATURE_2, targetTemperature);
377 public void testGetBottomTemperaturesForWineCabinetWithTwoCompartments() {
379 setUpDeviceStateMock(2);
380 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
381 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
384 Integer temperature = state.getBottomTemperature().get();
385 Integer targetTemperature = state.getBottomTargetTemperature().get();
388 assertEquals(TEMPERATURE_1, temperature);
389 assertEquals(TARGET_TEMPERATURE_1, targetTemperature);
393 public void testGetBottomTemperaturesForWineCabinetWithOneCompartment() {
395 setUpDeviceStateMock(1);
396 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
397 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
400 Optional<Integer> temperature = state.getBottomTemperature();
401 Optional<Integer> targetTemperature = state.getBottomTargetTemperature();
404 assertFalse(temperature.isPresent());
405 assertFalse(targetTemperature.isPresent());
409 public void testGetBottomTemperaturesForWineCabinetFreezerCombination() {
411 setUpDeviceStateMock(2);
412 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET_FREEZER_COMBINATION);
413 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
416 Integer temperature = state.getBottomTemperature().get();
417 Integer targetTemperature = state.getBottomTargetTemperature().get();
420 assertEquals(TEMPERATURE_1, temperature);
421 assertEquals(TARGET_TEMPERATURE_1, targetTemperature);
425 public void testGetBottomTemperaturesForOtherDeviceWithTwoTemperatures() {
427 setUpDeviceStateMock(2);
428 when(getDeviceState().getRawType()).thenReturn(DeviceType.OVEN);
429 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
432 Optional<Integer> temperature = state.getBottomTemperature();
433 Optional<Integer> targetTemperature = state.getBottomTargetTemperature();
436 assertFalse(temperature.isPresent());
437 assertFalse(targetTemperature.isPresent());
441 public void testGetBottomTemperaturesWhenNoTemperaturesAreAvailable() {
443 setUpDeviceStateMock(0);
444 when(getDeviceState().getRawType()).thenReturn(DeviceType.WINE_CABINET);
445 WineStorageDeviceTemperatureState state = new WineStorageDeviceTemperatureState(getDeviceState());
448 Optional<Integer> temperature = state.getBottomTemperature();
449 Optional<Integer> targetTemperature = state.getBottomTargetTemperature();
452 assertFalse(temperature.isPresent());
453 assertFalse(targetTemperature.isPresent());