Skip to content

Commit c9a396b

Browse files
authored
Deserialize null capabilities in Device entities as empty sets
1 parent fc0a7b7 commit c9a396b

File tree

2 files changed

+27
-0
lines changed
  • service/src

2 files changed

+27
-0
lines changed

service/src/main/java/org/whispersystems/textsecuregcm/storage/Device.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77

88
import com.fasterxml.jackson.annotation.JsonProperty;
9+
import com.fasterxml.jackson.annotation.JsonSetter;
910
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
1011
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
1112
import java.time.Duration;
@@ -178,6 +179,7 @@ public Set<DeviceCapability> getCapabilities() {
178179
return capabilities;
179180
}
180181

182+
@JsonSetter
181183
public void setCapabilities(@Nullable final Set<DeviceCapability> capabilities) {
182184
this.capabilities = (capabilities == null || capabilities.isEmpty())
183185
? Collections.emptySet()

service/src/test/java/org/whispersystems/textsecuregcm/storage/DeviceTest.java

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,15 @@
66
package org.whispersystems.textsecuregcm.storage;
77

88
import static org.junit.jupiter.api.Assertions.assertEquals;
9+
import static org.junit.jupiter.api.Assertions.assertNotNull;
910

1011
import java.time.Duration;
1112
import java.time.Instant;
13+
import com.fasterxml.jackson.core.JsonProcessingException;
14+
import org.junit.jupiter.api.Test;
1215
import org.junit.jupiter.params.ParameterizedTest;
1316
import org.junit.jupiter.params.provider.CsvSource;
17+
import org.whispersystems.textsecuregcm.util.SystemMapper;
1418

1519
class DeviceTest {
1620

@@ -42,4 +46,25 @@ public void testIsExpired(final boolean primary, final Duration timeSinceLastSee
4246
assertEquals(expectExpired, device.isExpired());
4347
}
4448

49+
@Test
50+
void deserializeCapabilities() throws JsonProcessingException {
51+
{
52+
final Device device = SystemMapper.jsonMapper().readValue("""
53+
{
54+
"capabilities": null
55+
}
56+
""", Device.class);
57+
58+
assertNotNull(device.getCapabilities(),
59+
"Device deserialization should populate null capabilities with an empty set");
60+
}
61+
62+
{
63+
final Device device = SystemMapper.jsonMapper().readValue("{}", Device.class);
64+
65+
assertNotNull(device.getCapabilities(),
66+
"Device deserialization should populate null capabilities with an empty set");
67+
}
68+
}
69+
4570
}

0 commit comments

Comments
 (0)