diff --git a/src/main/java/com/crowdin/client/sourcefiles/model/FileInfo.java b/src/main/java/com/crowdin/client/sourcefiles/model/FileInfo.java index a06efa86..5374a1c8 100644 --- a/src/main/java/com/crowdin/client/sourcefiles/model/FileInfo.java +++ b/src/main/java/com/crowdin/client/sourcefiles/model/FileInfo.java @@ -1,5 +1,7 @@ package com.crowdin.client.sourcefiles.model; +import com.crowdin.client.core.http.impl.json.EmptyArrayToNullDeserializer; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import lombok.Data; import java.util.Map; @@ -20,5 +22,6 @@ public class FileInfo { /** * Custom fields (Enterprise only) */ + @JsonDeserialize(using = EmptyArrayToNullDeserializer.class) private Map fields; } diff --git a/src/test/java/com/crowdin/client/sourcefiles/FileOptionsDeserializationTest.java b/src/test/java/com/crowdin/client/sourcefiles/FileOptionsDeserializationTest.java index 2fd2aafa..f51cddf1 100644 --- a/src/test/java/com/crowdin/client/sourcefiles/FileOptionsDeserializationTest.java +++ b/src/test/java/com/crowdin/client/sourcefiles/FileOptionsDeserializationTest.java @@ -8,6 +8,7 @@ import static java.util.Collections.singletonList; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; public class FileOptionsDeserializationTest { @@ -172,6 +173,30 @@ public void exportOptionsSerialization() { jsonTransformer.convert(md)); } + @Test + public void fieldsEmptyArrayDeserializesToNullForFile() { + // Enterprise API returns an empty array instead of an object when a file has no custom fields + FileResponseObject response = jsonTransformer.parse( + "{\"data\":{\"id\":1,\"revisionId\":1,\"fields\":[]}}", FileResponseObject.class); + assertInstanceOf(File.class, response.getData()); + assertNull(response.getData().getFields()); + } + + @Test + public void fieldsEmptyArrayDeserializesToNullForFileInfo() { + FileResponseObject response = jsonTransformer.parse( + "{\"data\":{\"id\":1,\"fields\":[]}}", FileResponseObject.class); + assertInstanceOf(FileInfo.class, response.getData()); + assertNull(response.getData().getFields()); + } + + @Test + public void fieldsObjectIsStillDeserialized() { + FileResponseObject response = jsonTransformer.parse( + "{\"data\":{\"id\":1,\"revisionId\":1,\"fields\":{\"some-field\":\"value\"}}}", FileResponseObject.class); + assertEquals("value", response.getData().getFields().get("some-field")); + } + private void assertImportRoundTrip(String fileType, ImportOptions options) { File file = parseFile(fileType, "importOptions", jsonTransformer.convert(options)); assertInstanceOf(ImportOptions.class, file.getImportOptions());