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.surepetcare.internal.data;
15 import static org.junit.jupiter.api.Assertions.*;
17 import java.time.ZoneOffset;
18 import java.time.ZonedDateTime;
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;
26 * The {@link SurePetcareTopologyTest} class implements unit test case for {@link SurePetcareTopology}
28 * @author Rene Scherer - Initial contribution
31 public class SurePetcareTopologyTest {
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);
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);
49 fail("GSON returned null");
54 public void testTopologyEmpty() {
55 String testResponse = "{}";
56 SurePetcareTopology response = SurePetcareConstants.GSON.fromJson(testResponse, SurePetcareTopology.class);
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);
69 fail("GSON returned null");
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);
78 if (response != null) {
79 assertNull(response.user);
81 fail("GSON returned null");
86 public void testDateFormats() {
87 String testResponse = """
98 "created_at": "2021-04-24T11:41:15+00:00",
99 "updated_at": "2023-12-16T21:08:19.637892+00:00",
104 "name": "(UTC+02:00) Europe/Zurich",
105 "timezone": "Europe/Zurich",
107 "created_at": "2017-08-03T08:35:34+00:00",
108 "updated_at": "2017-08-03T08:37:15+00:00"
119 SurePetcareTopology response = SurePetcareConstants.GSON.fromJson(testResponse, SurePetcareTopology.class);
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);