Deserialize null capabilities in `Device` entities as empty sets

This commit is contained in:
Jon Chambers 2024-11-01 16:48:56 -04:00 committed by GitHub
parent fc0a7b7657
commit c9a396b9e3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 27 additions and 0 deletions

View File

@ -6,6 +6,7 @@ package org.whispersystems.textsecuregcm.storage;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import java.time.Duration;
@ -178,6 +179,7 @@ public class Device {
return capabilities;
}
@JsonSetter
public void setCapabilities(@Nullable final Set<DeviceCapability> capabilities) {
this.capabilities = (capabilities == null || capabilities.isEmpty())
? Collections.emptySet()

View File

@ -6,11 +6,15 @@
package org.whispersystems.textsecuregcm.storage;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import java.time.Duration;
import java.time.Instant;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.whispersystems.textsecuregcm.util.SystemMapper;
class DeviceTest {
@ -42,4 +46,25 @@ class DeviceTest {
assertEquals(expectExpired, device.isExpired());
}
@Test
void deserializeCapabilities() throws JsonProcessingException {
{
final Device device = SystemMapper.jsonMapper().readValue("""
{
"capabilities": null
}
""", Device.class);
assertNotNull(device.getCapabilities(),
"Device deserialization should populate null capabilities with an empty set");
}
{
final Device device = SystemMapper.jsonMapper().readValue("{}", Device.class);
assertNotNull(device.getCapabilities(),
"Device deserialization should populate null capabilities with an empty set");
}
}
}