]> git.basschouten.com Git - openhab-addons.git/blob
d4b43ed43f70c8124921885317114bd4f239c100
[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.surepetcare.internal.data;
14
15 import static org.junit.jupiter.api.Assertions.*;
16
17 import java.time.ZoneOffset;
18 import java.time.ZonedDateTime;
19
20 import org.eclipse.jdt.annotation.NonNullByDefault;
21 import org.junit.jupiter.api.Test;
22 import org.openhab.binding.surepetcare.internal.SurePetcareConstants;
23 import org.openhab.binding.surepetcare.internal.dto.SurePetcareTopology;
24
25 /**
26  * The {@link SurePetcareTopologyTest} class implements unit test case for {@link SurePetcareTopology}
27  *
28  * @author Rene Scherer - Initial contribution
29  */
30 @NonNullByDefault
31 public class SurePetcareTopologyTest {
32
33     @Test
34     public void testTopologyPopulated() {
35         String testResponse = "{\"devices\":[{\"id\":23912},{\"id\":23481}],\"households\":[{\"id\":83271}],\"pets\":[{\"id\":12345}],\"photos\":[{\"id\":64257,\"version\":\"MA==\",\"created_at\":\"2019-10-04T16:03:20+00:00\",\"updated_at\":\"2019-10-04T16:03:20+00:00\"}],\"user\":{\"id\":33421,\"version\":\"MA==\",\"created_at\":\"2019-09-18T16:09:30+00:00\",\"updated_at\":\"2019-09-18T16:09:30+00:00\"}}";
36         SurePetcareTopology response = SurePetcareConstants.GSON.fromJson(testResponse, SurePetcareTopology.class);
37
38         if (response != null) {
39             assertNotNull(response.devices);
40             assertEquals(2, response.devices.size());
41             assertNotNull(response.households);
42             assertEquals(1, response.households.size());
43             assertNotNull(response.pets);
44             assertEquals(1, response.pets.size());
45             assertNotNull(response.photos);
46             assertEquals(1, response.photos.size());
47             assertNotNull(response.user);
48         } else {
49             fail("GSON returned null");
50         }
51     }
52
53     @Test
54     public void testTopologyEmpty() {
55         String testResponse = "{}";
56         SurePetcareTopology response = SurePetcareConstants.GSON.fromJson(testResponse, SurePetcareTopology.class);
57
58         if (response != null) {
59             assertNotNull(response.tags);
60             assertEquals(0, response.tags.size());
61             assertNotNull(response.households);
62             assertEquals(0, response.households.size());
63             assertNotNull(response.pets);
64             assertEquals(0, response.pets.size());
65             assertNotNull(response.devices);
66             assertEquals(0, response.devices.size());
67             assertNull(response.user);
68         } else {
69             fail("GSON returned null");
70         }
71     }
72
73     @Test
74     public void testGetUserNull() {
75         String testResponse = "{\"devices\":[{\"id\":23912},{\"id\":23481}],\"households\":[{\"id\":83271}],\"pets\":[{\"id\":12345}],\"photos\":[{\"id\":64257,\"version\":\"MA==\",\"created_at\":\"2019-10-04T16:03:20+00:00\",\"updated_at\":\"2019-10-04T16:03:20+00:00\"}]}";
76         SurePetcareTopology response = SurePetcareConstants.GSON.fromJson(testResponse, SurePetcareTopology.class);
77
78         if (response != null) {
79             assertNull(response.user);
80         } else {
81             fail("GSON returned null");
82         }
83     }
84
85     @Test
86     public void testDateFormats() {
87         String testResponse = """
88                 {
89                     "devices": [],
90                     "households": [
91                         {
92                             "id": 0,
93                             "name": "***",
94                             "share_code": "***",
95                             "created_user_id": 0,
96                             "timezone_id": 374,
97                             "version": "MTE=",
98                             "created_at": "2021-04-24T11:41:15+00:00",
99                             "updated_at": "2023-12-16T21:08:19.637892+00:00",
100                             "invites": [],
101                             "users": [],
102                             "timezone": {
103                                 "id": 374,
104                                 "name": "(UTC+02:00) Europe/Zurich",
105                                 "timezone": "Europe/Zurich",
106                                 "utc_offset": 7200,
107                                 "created_at": "2017-08-03T08:35:34+00:00",
108                                 "updated_at": "2017-08-03T08:37:15+00:00"
109                             }
110                         }
111                     ],
112                     "pets": [],
113                     "photos": [],
114                     "tags": [],
115                     "user": {}
116                 }
117                 """;
118
119         SurePetcareTopology response = SurePetcareConstants.GSON.fromJson(testResponse, SurePetcareTopology.class);
120
121         assertNotNull(response);
122         assertNotNull(response.households);
123         assertEquals(1, response.households.size());
124         assertEquals(ZonedDateTime.of(2021, 4, 24, 11, 41, 15, 0, ZoneOffset.UTC),
125                 response.households.get(0).createdAt);
126         assertEquals(ZonedDateTime.of(2023, 12, 16, 21, 8, 19, 637892000, ZoneOffset.UTC),
127                 response.households.get(0).updatedAt);
128     }
129 }