diff --git a/CHANGELOG.md b/CHANGELOG.md index b31c580..03ffdc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ - Redact the `Authorization` header when HTTP request logging is enabled - Add `Castle#close()` (`AutoCloseable`) to shut down the HTTP dispatcher and connection pool; it also clears the SDK singleton when this instance is the singleton - Accept an empty response body in `CastleResponse` +- Return `Integer` from generated getters whose backing field is nullable (`BaseList#getDefaultItemArchivationTime`, `DeviceScreen#getScreen`, `IP#getAsn`, and the `ListItemsBatchResponse` counters) - Remove `CastleUserDeviceContext` and `DeviceUserAgent` - Remove the legacy `authenticate` and `track` endpoints - Remove device management (`approve`, `report`, `userDevices`, `device`) and impersonation (`impersonateStart`, `impersonateEnd`) diff --git a/src/main/java/io/castle/client/model/generated/BaseList.java b/src/main/java/io/castle/client/model/generated/BaseList.java index d6dc4aa..b512229 100755 --- a/src/main/java/io/castle/client/model/generated/BaseList.java +++ b/src/main/java/io/castle/client/model/generated/BaseList.java @@ -103,7 +103,7 @@ public BaseList defaultItemArchivationTime(Integer defaultItemArchivationTime) { * @return defaultItemArchivationTime **/ @ApiModelProperty(example = "2592000", value = "Default time, in seconds, after which Items in this List automatically gets archived after they are created. It is possible to override this value when creating the individual List Items") - public int getDefaultItemArchivationTime() { + public Integer getDefaultItemArchivationTime() { return defaultItemArchivationTime; } diff --git a/src/main/java/io/castle/client/model/generated/DeviceScreen.java b/src/main/java/io/castle/client/model/generated/DeviceScreen.java index f25da37..f1d1413 100755 --- a/src/main/java/io/castle/client/model/generated/DeviceScreen.java +++ b/src/main/java/io/castle/client/model/generated/DeviceScreen.java @@ -39,7 +39,7 @@ public DeviceScreen screen(Integer screen) { * @return screen **/ @ApiModelProperty(example = "2", value = "") - public int getScreen() { + public Integer getScreen() { return screen; } diff --git a/src/main/java/io/castle/client/model/generated/IP.java b/src/main/java/io/castle/client/model/generated/IP.java index 2202660..ce65097 100755 --- a/src/main/java/io/castle/client/model/generated/IP.java +++ b/src/main/java/io/castle/client/model/generated/IP.java @@ -51,7 +51,7 @@ public IP asn(Integer asn) { * @return asn **/ @ApiModelProperty(example = "14618", required = true, value = "") - public int getAsn() { + public Integer getAsn() { return asn; } diff --git a/src/main/java/io/castle/client/model/generated/ListItemsBatchResponse.java b/src/main/java/io/castle/client/model/generated/ListItemsBatchResponse.java index c1b3d1a..32e0e97 100755 --- a/src/main/java/io/castle/client/model/generated/ListItemsBatchResponse.java +++ b/src/main/java/io/castle/client/model/generated/ListItemsBatchResponse.java @@ -52,7 +52,7 @@ public ListItemsBatchResponse totalReceived(Integer totalReceived) { * @return totalReceived **/ @ApiModelProperty(required = true, value = "Total number of items received") - public int getTotalReceived() { + public Integer getTotalReceived() { return totalReceived; } @@ -70,7 +70,7 @@ public ListItemsBatchResponse totalProcessed(int totalProcessed) { * @return totalProcessed **/ @ApiModelProperty(required = true, value = "Total number of items processed without any errors") - public int getTotalProcessed() { + public Integer getTotalProcessed() { return totalProcessed; } @@ -88,7 +88,7 @@ public ListItemsBatchResponse created(int created) { * @return created **/ @ApiModelProperty(value = "Number of items created") - public int getCreated() { + public Integer getCreated() { return created; } @@ -106,7 +106,7 @@ public ListItemsBatchResponse updated(int updated) { * @return updated **/ @ApiModelProperty(value = "Number of items updated") - public int getUpdated() { + public Integer getUpdated() { return updated; } @@ -124,7 +124,7 @@ public ListItemsBatchResponse replaced(int replaced) { * @return replaced **/ @ApiModelProperty(value = "Total number of items replaced") - public int getReplaced() { + public Integer getReplaced() { return replaced; } @@ -142,7 +142,7 @@ public ListItemsBatchResponse errored(int errored) { * @return errored **/ @ApiModelProperty(value = "Total number of items that errored") - public int getErrored() { + public Integer getErrored() { return errored; } diff --git a/src/test/java/io/castle/client/CastleFilterHttpTest.java b/src/test/java/io/castle/client/CastleFilterHttpTest.java index 04f23a2..1950089 100644 --- a/src/test/java/io/castle/client/CastleFilterHttpTest.java +++ b/src/test/java/io/castle/client/CastleFilterHttpTest.java @@ -236,7 +236,7 @@ public class CastleFilterHttpTest extends AbstractCastleHttpLayerTest { Assert.assertEquals("en", response.getDevice().getSoftware().getLanguages().get(1)); Assert.assertEquals("91.0.4472", response.getDevice().getSoftware().getVersion().getFull()); Assert.assertEquals("91", response.getDevice().getSoftware().getVersion().getMajor()); - Assert.assertEquals(2, response.getDevice().getScreen().getScreen()); + Assert.assertEquals(Integer.valueOf(2), response.getDevice().getScreen().getScreen()); Assert.assertEquals("landscape", response.getDevice().getScreen().getOrientation()); Assert.assertEquals("America/New_York", response.getDevice().getTimezone().getName()); Assert.assertEquals(-300, response.getDevice().getTimezone().getOffset()); @@ -264,7 +264,7 @@ public class CastleFilterHttpTest extends AbstractCastleHttpLayerTest { Assert.assertFalse(response.getEmail().getDomainDetails().getDmarcRecord().isExists()); Assert.assertFalse(response.getEmail().getDomainDetails().getMxRecords().isNullMx()); Assert.assertEquals("/v1/risk", response.getEndpoint()); - Assert.assertEquals(14618, response.getIp().getAsn()); + Assert.assertEquals(Integer.valueOf(14618), response.getIp().getAsn()); Assert.assertEquals("Ashburn", response.getIp().getLocation().getCity()); Assert.assertEquals("NA", response.getIp().getLocation().getContinentCode()); Assert.assertEquals("US", response.getIp().getLocation().getCountryCode()); diff --git a/src/test/java/io/castle/client/CastleListItemsTest.java b/src/test/java/io/castle/client/CastleListItemsTest.java index 0853708..2a04118 100644 --- a/src/test/java/io/castle/client/CastleListItemsTest.java +++ b/src/test/java/io/castle/client/CastleListItemsTest.java @@ -83,12 +83,12 @@ public void createOrUpdateListItems() throws InterruptedException { ListItemsBatchResponse response = sdk.onRequest(request).createOrUpdateListItems("2ee938c8-24c2-4c26-9d25-19511dd75029", items); // Check response object - Assert.assertEquals(135, response.getTotalReceived()); - Assert.assertEquals(130, response.getTotalProcessed()); - Assert.assertEquals(5, response.getErrored()); - Assert.assertEquals(10, response.getReplaced()); - Assert.assertEquals(20, response.getUpdated()); - Assert.assertEquals(100, response.getCreated()); + Assert.assertEquals(Integer.valueOf(135), response.getTotalReceived()); + Assert.assertEquals(Integer.valueOf(130), response.getTotalProcessed()); + Assert.assertEquals(Integer.valueOf(5), response.getErrored()); + Assert.assertEquals(Integer.valueOf(10), response.getReplaced()); + Assert.assertEquals(Integer.valueOf(20), response.getUpdated()); + Assert.assertEquals(Integer.valueOf(100), response.getCreated()); // Then RecordedRequest recordedRequest = server.takeRequest(); diff --git a/src/test/java/io/castle/client/CastleListsHttpTest.java b/src/test/java/io/castle/client/CastleListsHttpTest.java index 3275fb2..bd9675b 100644 --- a/src/test/java/io/castle/client/CastleListsHttpTest.java +++ b/src/test/java/io/castle/client/CastleListsHttpTest.java @@ -45,7 +45,7 @@ public void updateList() throws InterruptedException { Assert.assertEquals("Malicious IPs", response.getName()); Assert.assertEquals("We block these IPs from withdrawing funds. Please be careful.", response.getDescription()); Assert.assertEquals(ListColor.RED, response.getColor()); - Assert.assertEquals(2592000, response.getDefaultItemArchivationTime()); + Assert.assertEquals(Integer.valueOf(2592000), response.getDefaultItemArchivationTime()); Assert.assertEquals("2ee938c8-24c2-4c26-9d25-19511dd75029", response.getId()); Assert.assertEquals("device.fingerprint", response.getPrimaryField()); Assert.assertEquals("ip.value", response.getSecondaryField()); @@ -88,7 +88,7 @@ public void listAllLists() throws InterruptedException { Assert.assertEquals("Malicious IPs", list.getName()); Assert.assertEquals("We block these IPs from withdrawing funds. Please be careful.", list.getDescription()); Assert.assertEquals(ListColor.RED, list.getColor()); - Assert.assertEquals(2592000, list.getDefaultItemArchivationTime()); + Assert.assertEquals(Integer.valueOf(2592000), list.getDefaultItemArchivationTime()); Assert.assertEquals("2ee938c8-24c2-4c26-9d25-19511dd75029", list.getId()); Assert.assertEquals("device.fingerprint", list.getPrimaryField()); Assert.assertEquals("ip.value", list.getSecondaryField()); @@ -128,7 +128,7 @@ public void listAllLists() throws InterruptedException { Assert.assertEquals("Malicious IPs", response.getName()); Assert.assertEquals("We block these IPs from withdrawing funds. Please be careful.", response.getDescription()); Assert.assertEquals(ListColor.RED, response.getColor()); - Assert.assertEquals(2592000, response.getDefaultItemArchivationTime()); + Assert.assertEquals(Integer.valueOf(2592000), response.getDefaultItemArchivationTime()); Assert.assertEquals("2ee938c8-24c2-4c26-9d25-19511dd75029", response.getId()); Assert.assertEquals("device.fingerprint", response.getPrimaryField()); Assert.assertEquals("ip.value", response.getSecondaryField()); @@ -191,7 +191,7 @@ public void searchList() throws InterruptedException { Assert.assertEquals("Malicious IPs", list.getName()); Assert.assertEquals("We block these IPs from withdrawing funds. Please be careful.", list.getDescription()); Assert.assertEquals(ListColor.RED, list.getColor()); - Assert.assertEquals(2592000, list.getDefaultItemArchivationTime()); + Assert.assertEquals(Integer.valueOf(2592000), list.getDefaultItemArchivationTime()); Assert.assertEquals("2ee938c8-24c2-4c26-9d25-19511dd75029", list.getId()); Assert.assertEquals("device.fingerprint", list.getPrimaryField()); Assert.assertEquals("ip.value", list.getSecondaryField()); @@ -233,7 +233,7 @@ public void createList() throws InterruptedException { Assert.assertEquals("Malicious IPs", response.getName()); Assert.assertEquals("We block these IPs from withdrawing funds. Please be careful.", response.getDescription()); Assert.assertEquals(ListColor.RED, response.getColor()); - Assert.assertEquals(2592000, response.getDefaultItemArchivationTime()); + Assert.assertEquals(Integer.valueOf(2592000), response.getDefaultItemArchivationTime()); Assert.assertEquals("2ee938c8-24c2-4c26-9d25-19511dd75029", response.getId()); Assert.assertEquals("device.fingerprint", response.getPrimaryField()); Assert.assertEquals("ip.value", response.getSecondaryField()); @@ -415,4 +415,13 @@ public void compareListResponseJson() { // Compare the JSON strings Assert.assertEquals(JsonParser.parseString(providedJson), JsonParser.parseString(listJson)); } + + @Test + public void listResponseAllowsMissingArchivationTime() { + ListResponse response = new CastleGsonModel().getGson().fromJson( + "{\"name\":\"demo\",\"id\":\"abc\",\"primary_field\":\"user.email\"}", + ListResponse.class); + + Assert.assertNull(response.getDefaultItemArchivationTime()); + } } diff --git a/src/test/java/io/castle/client/CastleRiskHttpTest.java b/src/test/java/io/castle/client/CastleRiskHttpTest.java index 59bd295..cae714b 100644 --- a/src/test/java/io/castle/client/CastleRiskHttpTest.java +++ b/src/test/java/io/castle/client/CastleRiskHttpTest.java @@ -223,7 +223,7 @@ public class CastleRiskHttpTest extends AbstractCastleHttpLayerTest { Assert.assertEquals("America/New_York", response.getDevice().getTimezone().getName()); Assert.assertEquals(-300, response.getDevice().getTimezone().getOffset()); - Assert.assertEquals(2, response.getDevice().getScreen().getScreen()); + Assert.assertEquals(Integer.valueOf(2), response.getDevice().getScreen().getScreen()); Assert.assertEquals("landscape", response.getDevice().getScreen().getOrientation()); Assert.assertEquals("ASZoelALT5-PaVw2pAVMXg", response.getId()); @@ -427,4 +427,15 @@ public void compareRiskJson() { // Compare the JSON strings Assert.assertEquals(JsonParser.parseString(providedJson), JsonParser.parseString(riskJson)); } + + @Test + public void expandedEventAllowsMissingOptionalIntegers() { + FilterAndRiskResponse response = new CastleGsonModel().getGson().fromJson( + "{\"type\":\"$login\",\"status\":\"$succeeded\",\"id\":\"evt_1\"," + + "\"device\":{\"screen\":{}},\"ip\":{}}", + FilterAndRiskResponse.class); + + Assert.assertNull(response.getDevice().getScreen().getScreen()); + Assert.assertNull(response.getIp().getAsn()); + } }