]> git.basschouten.com Git - openhab-addons.git/blob
b3b614adad092b3c74f7a51d0667594429c33ed4
[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.ecowatt.internal;
14
15 import static org.junit.jupiter.api.Assertions.*;
16
17 import java.io.IOException;
18 import java.io.InputStream;
19 import java.nio.charset.StandardCharsets;
20 import java.time.OffsetDateTime;
21 import java.time.ZonedDateTime;
22
23 import org.eclipse.jdt.annotation.NonNullByDefault;
24 import org.eclipse.jdt.annotation.Nullable;
25 import org.junit.jupiter.api.BeforeEach;
26 import org.junit.jupiter.api.Test;
27 import org.openhab.binding.ecowatt.internal.handler.EcowattHandler;
28 import org.openhab.binding.ecowatt.internal.restapi.EcowattApiResponse;
29 import org.openhab.core.library.types.DecimalType;
30 import org.openhab.core.types.State;
31 import org.openhab.core.types.UnDefType;
32
33 import com.google.gson.Gson;
34 import com.google.gson.GsonBuilder;
35 import com.google.gson.JsonDeserializer;
36
37 /**
38  * Tests of methods getting channel state from API response
39  *
40  * @author Laurent Garnier - Initial contribution
41  */
42 @NonNullByDefault
43 public class EcowattApiResponseTest {
44
45     private static final DecimalType STATE_ZERO = new DecimalType(0);
46     private static final DecimalType STATE_ONE = new DecimalType(1);
47     private static final DecimalType STATE_TWO = new DecimalType(2);
48     private static final DecimalType STATE_THREE = new DecimalType(3);
49
50     private final Gson gson = new GsonBuilder().registerTypeAdapter(ZonedDateTime.class,
51             (JsonDeserializer<ZonedDateTime>) (json, type, jsonDeserializationContext) -> OffsetDateTime
52                     .parse(json.getAsJsonPrimitive().getAsString()).toZonedDateTime())
53             .create();
54     private static @Nullable EcowattApiResponse apiResponse;
55
56     @BeforeEach
57     public void loadApiResponse() throws IOException {
58         InputStream resourceStream = getClass().getResourceAsStream("/ApiResponse.json");
59         assertNotNull(resourceStream);
60         final String response = new String(resourceStream.readAllBytes(), StandardCharsets.UTF_8);
61         apiResponse = gson.fromJson(response, EcowattApiResponse.class);
62         assertNotNull(apiResponse);
63     }
64
65     @Test
66     public void getDaySignalStateWithNullResponse() {
67         assertEquals(UnDefType.UNDEF,
68                 EcowattHandler.getDaySignalState(null, ZonedDateTime.parse("2022-09-19T21:30:00+02:00")));
69     }
70
71     @Test
72     public void getDaySignalStateWithSameOffset() {
73         ZonedDateTime dateTime = ZonedDateTime.parse("2022-09-19T21:30:00+02:00");
74         assertEquals(UnDefType.UNDEF, EcowattHandler.getDaySignalState(apiResponse, dateTime.minusDays(1)));
75         assertEquals(STATE_THREE, EcowattHandler.getDaySignalState(apiResponse, dateTime));
76         assertEquals(STATE_TWO, EcowattHandler.getDaySignalState(apiResponse, dateTime.plusDays(1)));
77         assertEquals(STATE_ONE, EcowattHandler.getDaySignalState(apiResponse, dateTime.plusDays(2)));
78         assertEquals(STATE_ONE, EcowattHandler.getDaySignalState(apiResponse, dateTime.plusDays(3)));
79         assertEquals(UnDefType.UNDEF, EcowattHandler.getDaySignalState(apiResponse, dateTime.plusDays(4)));
80     }
81
82     @Test
83     public void getDaySignalStateWithOtherOffset() {
84         ZonedDateTime dateTime = ZonedDateTime.parse("2022-09-20T00:30:00+05:00");
85         assertEquals(UnDefType.UNDEF, EcowattHandler.getDaySignalState(apiResponse, dateTime.minusDays(1)));
86         assertEquals(STATE_THREE, EcowattHandler.getDaySignalState(apiResponse, dateTime));
87         assertEquals(STATE_TWO, EcowattHandler.getDaySignalState(apiResponse, dateTime.plusDays(1)));
88         assertEquals(STATE_ONE, EcowattHandler.getDaySignalState(apiResponse, dateTime.plusDays(2)));
89         assertEquals(STATE_ONE, EcowattHandler.getDaySignalState(apiResponse, dateTime.plusDays(3)));
90         assertEquals(UnDefType.UNDEF, EcowattHandler.getDaySignalState(apiResponse, dateTime.plusDays(4)));
91     }
92
93     @Test
94     public void getHourSignalStateWithNullResponse() {
95         assertEquals(UnDefType.UNDEF,
96                 EcowattHandler.getHourSignalState(null, ZonedDateTime.parse("2022-09-19T00:30:00+02:00")));
97     }
98
99     @Test
100     public void getHourSignalStateWithSameOffset() {
101         ZonedDateTime dateTime = ZonedDateTime.parse("2022-09-19T00:30:00+02:00");
102
103         assertEquals(UnDefType.UNDEF, EcowattHandler.getHourSignalState(apiResponse, dateTime.minusHours(1)));
104
105         State expectedState;
106         for (int h = 0; h < 24; h++) {
107             switch (h) {
108                 case 2:
109                 case 3:
110                     expectedState = STATE_ZERO;
111                     break;
112                 case 7:
113                 case 11:
114                 case 19:
115                 case 21:
116                     expectedState = STATE_TWO;
117                     break;
118                 case 8:
119                 case 9:
120                 case 10:
121                 case 20:
122                     expectedState = STATE_THREE;
123                     break;
124                 default:
125                     expectedState = STATE_ONE;
126             }
127             assertEquals(expectedState, EcowattHandler.getHourSignalState(apiResponse, dateTime.plusHours(h)));
128         }
129
130         dateTime = dateTime.plusDays(1);
131         for (int h = 0; h < 24; h++) {
132             expectedState = h == 20 ? STATE_TWO : STATE_ONE;
133             assertEquals(expectedState, EcowattHandler.getHourSignalState(apiResponse, dateTime.plusHours(h)));
134         }
135
136         dateTime = dateTime.plusDays(1);
137         for (int h = 0; h < 24; h++) {
138             expectedState = STATE_ONE;
139             assertEquals(expectedState, EcowattHandler.getHourSignalState(apiResponse, dateTime.plusHours(h)));
140         }
141
142         dateTime = dateTime.plusDays(1);
143         for (int h = 0; h < 24; h++) {
144             expectedState = h == 23 ? UnDefType.UNDEF : STATE_ONE;
145             assertEquals(expectedState, EcowattHandler.getHourSignalState(apiResponse, dateTime.plusHours(h)));
146         }
147
148         dateTime = dateTime.plusDays(1);
149         assertEquals(UnDefType.UNDEF, EcowattHandler.getHourSignalState(apiResponse, dateTime));
150     }
151
152     @Test
153     public void getHourSignalStateWithOtherOffset() {
154         ZonedDateTime dateTime = ZonedDateTime.parse("2022-09-19T00:30:00+05:00");
155         State expectedState;
156         for (int h = 0; h < 24; h++) {
157             switch (h) {
158                 case 0:
159                 case 1:
160                 case 2:
161                     expectedState = UnDefType.UNDEF;
162                     break;
163                 case 5:
164                 case 6:
165                     expectedState = STATE_ZERO;
166                     break;
167                 case 10:
168                 case 14:
169                 case 22:
170                     expectedState = STATE_TWO;
171                     break;
172                 case 11:
173                 case 12:
174                 case 13:
175                 case 23:
176                     expectedState = STATE_THREE;
177                     break;
178                 default:
179                     expectedState = STATE_ONE;
180             }
181             assertEquals(expectedState, EcowattHandler.getHourSignalState(apiResponse, dateTime.plusHours(h)));
182         }
183     }
184 }