diff --git a/storage-core/src/main/java/org/opengroup/osdu/storage/conversion/DpsConversionService.java b/storage-core/src/main/java/org/opengroup/osdu/storage/conversion/DpsConversionService.java index 742585bda97c699306a1fe17dc7cefc5b71e5a74..0c778ce755da03e2898e014e0bd16775574ab4a6 100644 --- a/storage-core/src/main/java/org/opengroup/osdu/storage/conversion/DpsConversionService.java +++ b/storage-core/src/main/java/org/opengroup/osdu/storage/conversion/DpsConversionService.java @@ -36,8 +36,10 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @Service @@ -60,26 +62,36 @@ public class DpsConversionService { List<JsonObject> recordsWithGeoJsonBlock = new ArrayList<>(); List<ConversionRecord> recordsWithoutConversionBlock = this.classifyRecords(originalRecords, conversionStatuses, recordsWithMetaBlock, recordsWithGeoJsonBlock); - List<ConversionRecord> allRecords = recordsWithoutConversionBlock; + Map<String, ConversionRecord> conversionResults = new HashMap<>(); + addOrUpdateRecordStatus(conversionResults, recordsWithoutConversionBlock); if (!conversionStatuses.isEmpty()) { RecordsAndStatuses crsConversionResult = null; - List<ConversionRecord> conversionRecords = new ArrayList<>(); if (!recordsWithGeoJsonBlock.isEmpty()) { + List<ConversionRecord> geoConvertedRecords = new ArrayList<>(); crsConversionResult = this.crsConversionService.doCrsGeoJsonConversion(recordsWithGeoJsonBlock, conversionStatuses); - conversionRecords = this.getConversionRecords(crsConversionResult); + geoConvertedRecords = this.getConversionRecords(crsConversionResult); + addOrUpdateRecordStatus(conversionResults, geoConvertedRecords); } if (!recordsWithMetaBlock.isEmpty()) { + List<ConversionRecord> metaConvertedRecords = new ArrayList<>(); crsConversionResult = this.crsConversionService.doCrsConversion(recordsWithMetaBlock, conversionStatuses); - conversionRecords = this.getConversionRecords(crsConversionResult); - this.unitConversionService.convertUnitsToSI(conversionRecords); - this.datesConversionService.convertDatesToISO(conversionRecords); + metaConvertedRecords = this.getConversionRecords(crsConversionResult); + this.unitConversionService.convertUnitsToSI(metaConvertedRecords); + this.datesConversionService.convertDatesToISO(metaConvertedRecords); + addOrUpdateRecordStatus(conversionResults, metaConvertedRecords); } - allRecords.addAll(conversionRecords); } - this.checkMismatchAndLogMissing(originalRecords, allRecords); + List<ConversionRecord> out = new ArrayList<>(conversionResults.values()); + this.checkMismatchAndLogMissing(originalRecords, out); + return this.makeResponseStatus(out); + } - return this.MakeResponseStatus(allRecords); + private void addOrUpdateRecordStatus(Map<String, ConversionRecord> out, List<ConversionRecord> result) { + for (ConversionRecord conversionRecord: result) { + String recordId = conversionRecord.getRecordId(); + out.put(recordId, conversionRecord); + } } private List<ConversionRecord> classifyRecords(List<JsonObject> originalRecords, List<ConversionStatus.ConversionStatusBuilder> conversionStatuses, List<JsonObject> recordsWithMetaBlock, List<JsonObject> recordsWithGeoJsonBlock) { @@ -147,7 +159,7 @@ public class DpsConversionService { return null; } - private RecordsAndStatuses MakeResponseStatus(List<ConversionRecord> conversionRecords) { + private RecordsAndStatuses makeResponseStatus(List<ConversionRecord> conversionRecords) { RecordsAndStatuses result = new RecordsAndStatuses(); List<JsonObject> records = new ArrayList<>(); List<ConversionStatus> conversionStatuses = new ArrayList<>(); diff --git a/storage-core/src/test/java/org/opengroup/osdu/storage/conversion/ConversionServiceTest.java b/storage-core/src/test/java/org/opengroup/osdu/storage/conversion/ConversionServiceTest.java index 011d614c73e9c69afedf9da286b57be4733d186d..77ea520d36420ba731166e634f3d65f296858732 100644 --- a/storage-core/src/test/java/org/opengroup/osdu/storage/conversion/ConversionServiceTest.java +++ b/storage-core/src/test/java/org/opengroup/osdu/storage/conversion/ConversionServiceTest.java @@ -33,6 +33,8 @@ import org.opengroup.osdu.core.common.model.storage.ConversionStatus; import java.util.ArrayList; import java.util.List; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -81,9 +83,9 @@ public class ConversionServiceTest { private static final String INVALID_COORDINATES_ANY_CRS_RECORD = "{\"id\":\"geo-json-multi-polygon-test\",\"kind\":\"geo-json-multi-polygon:test:1.0.0\",\"acl\":{\"viewers\":[\"viewers@unittest.com\"],\"owners\":[\"owners@unittest.com\"]},\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"data\":{\"SpatialLocation\":{\"AsIngestedCoordinates\":{\"features\":[{\"geometry\":{\"coordinates\":[[[[30,20],[45,40],[10,40],[30,20]]],[[15,5],[40,10],[10,20],[5,10],[15,5]]],\"bbox\":null,\"type\":\"AnyCrsMultiPolygon\"},\"bbox\":null,\"properties\":{},\"type\":\"AnyCrsFeature\"}],\"bbox\":null,\"properties\":{},\"persistableReferenceCrs\":\"reference\",\"persistableReferenceUnitZ\":\"reference\",\"type\":\"AnyCrsFeatureCollection\"},\"msg\":\"testing record 2\",\"X\":16.00,\"Y\":10.00,\"Z\":0}}}"; private static final String ERRONEOUS_ANY_CRS_RECORD_1 = "{\"id\":\"geo-json-point-test\",\"kind\":\"geo-json-point:test:1.0.0\",\"acl\":{\"viewers\":[\"viewers@unittest.com\"],\"owners\":[\"owners@unittest.com\"]},\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"data\":{\"SpatialLocation\":{\"AsIngestedCoordinates\":{\"Type\":\"AnyCrsFeatureCollection\",\"CoordinateReferenceSystemID\":\"NAD27\",\"VerticalCoordinateReferenceSystemID\":null,\"PersistableReferenceCrs\":null,\"PersistableReferenceVerticalCrs\":null,\"PersistableReferenceUnitZ\":null,\"Features\":[{\"Type\":\"AnyCrsFeature\",\"Properties\":null,\"Geometry\":{\"Coordinates\":[30.8793048,-87.7801454],\"Type\":\"AnyCrsPoint\",\"Bbox\":null}}],\"Bbox\":null},\"Wgs84Coordinates\":null}}}"; - private static final String COMBINED_ANY_CRS_META_FOR_RECORD = "{\"id\":\"geo-json-point-test\",\"kind\":\"geo-json-point:test:1.0.0\",\"acl\":{\"viewers\":[\"viewers@unittest.com\"],\"owners\":[\"owners@unittest.com\"]},\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"data\":{\"SpudDate\":\"03/28/2012\",\"SpatialLocation\":{\"AsIngestedCoordinates\":{\"features\":[{\"geometry\":{\"coordinates\":[313405.9477893702,6544797.620047403,6.561679790026246],\"bbox\":null,\"type\":\"AnyCrsPoint\"},\"bbox\":null,\"properties\":{},\"type\":\"AnyCrsFeature\"}],\"bbox\":null,\"properties\":{},\"persistableReferenceCrs\":\"reference\",\"persistableReferenceUnitZ\":\"reference\",\"type\":\"AnyCrsFeatureCollection\"},\"msg\":\"testing record 2\",\"X\":16.00,\"Y\":10.00,\"Z\":0}},\"meta\":[{\"propertyValues\":[\"MM/dd/yyyy\"],\"persistableReference\":\"{\\\"type\\\": \\\"DAT\\\", \\\"format\\\": \\\"MM/dd/yyyy\\\"}\",\"uncertainty\":0,\"kind\":\"DateTime\",\"propertyNames\":[\"SpudDate\"]}]}"; - private static final String COMBINED_ANY_CRS_CONVERTED_RECORD = "{\"acl\":{\"owners\":[\"owners@unittest.com\"],\"viewers\":[\"viewers@unittest.com\"]},\"data\":{\"SpudDate\":\"03/28/2012\",\"SpatialLocation\":{\"AsIngestedCoordinates\":{\"bbox\":null,\"features\":[{\"bbox\":null,\"geometry\":{\"bbox\":null,\"coordinates\":[313405.9477893702,6544797.620047403,6.561679790026246],\"type\":\"AnyCrsPoint\"},\"properties\":{},\"type\":\"AnyCrsFeature\"}],\"persistableReferenceCrs\":\"reference\",\"persistableReferenceUnitZ\":\"reference\",\"properties\":{},\"type\":\"AnyCrsFeatureCollection\"},\"msg\":\"testing record 2\",\"Wgs84Coordinates\":{\"bbox\":null,\"features\":[{\"bbox\":null,\"geometry\":{\"bbox\":null,\"coordinates\":[5.7500000010406245,59.000000000399105,1.9999999999999998],\"type\":\"Point\"},\"properties\":{},\"type\":\"Feature\"}],\"persistableReferenceCrs\":null,\"persistableReferenceUnitZ\":\"reference\",\"properties\":{},\"type\":\"FeatureCollection\"},\"X\":16,\"Y\":10,\"Z\":0}},\"id\":\"geo-json-point-test\",\"kind\":\"geo-json-point:test:1.0.0\",\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"meta\":[{\"propertyValues\":[\"MM/dd/yyyy\"],\"persistableReference\":\"{\\\"type\\\": \\\"DAT\\\", \\\"format\\\": \\\"MM/dd/yyyy\\\"}\",\"uncertainty\":0,\"kind\":\"DateTime\",\"propertyNames\":[\"SpudDate\"]}]}"; - private static final String COMBINED_ANY_CRS_META_FOR_CONVERTED_RECORD = "{\"acl\":{\"owners\":[\"owners@unittest.com\"],\"viewers\":[\"viewers@unittest.com\"]},\"data\":{\"SpudDate\":\"2012-03-28\",\"SpatialLocation\":{\"AsIngestedCoordinates\":{\"bbox\":null,\"features\":[{\"bbox\":null,\"geometry\":{\"bbox\":null,\"coordinates\":[313405.9477893702,6544797.620047403,6.561679790026246],\"type\":\"AnyCrsPoint\"},\"properties\":{},\"type\":\"AnyCrsFeature\"}],\"persistableReferenceCrs\":\"reference\",\"persistableReferenceUnitZ\":\"reference\",\"properties\":{},\"type\":\"AnyCrsFeatureCollection\"},\"msg\":\"testing record 2\",\"Wgs84Coordinates\":{\"bbox\":null,\"features\":[{\"bbox\":null,\"geometry\":{\"bbox\":null,\"coordinates\":[5.7500000010406245,59.000000000399105,1.9999999999999998],\"type\":\"Point\"},\"properties\":{},\"type\":\"Feature\"}],\"persistableReferenceCrs\":null,\"persistableReferenceUnitZ\":\"reference\",\"properties\":{},\"type\":\"FeatureCollection\"},\"X\":16,\"Y\":10,\"Z\":0}},\"id\":\"geo-json-point-test\",\"kind\":\"geo-json-point:test:1.0.0\",\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"meta\":[{\"propertyValues\":[\"MM/dd/yyyy\"],\"persistableReference\":\"{\\\"format\\\":\\\"yyyy-MM-dd\\\",\\\"type\\\":\\\"DAT\\\"}\",\"uncertainty\":0,\"kind\":\"DateTime\",\"propertyNames\":[\"SpudDate\"]}]}"; + private static final String COMBINED_ANY_CRS_META_FOR_RECORD = "{\"id\":\"geo-json-with-meta-point-test\",\"kind\":\"geo-json-point:test:1.0.0\",\"acl\":{\"viewers\":[\"viewers@unittest.com\"],\"owners\":[\"owners@unittest.com\"]},\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"data\":{\"SpudDate\":\"03/28/2012\",\"SpatialLocation\":{\"AsIngestedCoordinates\":{\"features\":[{\"geometry\":{\"coordinates\":[313405.9477893702,6544797.620047403,6.561679790026246],\"bbox\":null,\"type\":\"AnyCrsPoint\"},\"bbox\":null,\"properties\":{},\"type\":\"AnyCrsFeature\"}],\"bbox\":null,\"properties\":{},\"persistableReferenceCrs\":\"reference\",\"persistableReferenceUnitZ\":\"reference\",\"type\":\"AnyCrsFeatureCollection\"},\"msg\":\"testing record 2\",\"X\":16.00,\"Y\":10.00,\"Z\":0}},\"meta\":[{\"propertyValues\":[\"MM/dd/yyyy\"],\"persistableReference\":\"{\\\"type\\\": \\\"DAT\\\", \\\"format\\\": \\\"MM/dd/yyyy\\\"}\",\"uncertainty\":0,\"kind\":\"DateTime\",\"propertyNames\":[\"SpudDate\"]}]}"; + private static final String COMBINED_ANY_CRS_CONVERTED_RECORD = "{\"acl\":{\"owners\":[\"owners@unittest.com\"],\"viewers\":[\"viewers@unittest.com\"]},\"data\":{\"SpudDate\":\"03/28/2012\",\"SpatialLocation\":{\"AsIngestedCoordinates\":{\"bbox\":null,\"features\":[{\"bbox\":null,\"geometry\":{\"bbox\":null,\"coordinates\":[313405.9477893702,6544797.620047403,6.561679790026246],\"type\":\"AnyCrsPoint\"},\"properties\":{},\"type\":\"AnyCrsFeature\"}],\"persistableReferenceCrs\":\"reference\",\"persistableReferenceUnitZ\":\"reference\",\"properties\":{},\"type\":\"AnyCrsFeatureCollection\"},\"msg\":\"testing record 2\",\"Wgs84Coordinates\":{\"bbox\":null,\"features\":[{\"bbox\":null,\"geometry\":{\"bbox\":null,\"coordinates\":[5.7500000010406245,59.000000000399105,1.9999999999999998],\"type\":\"Point\"},\"properties\":{},\"type\":\"Feature\"}],\"persistableReferenceCrs\":null,\"persistableReferenceUnitZ\":\"reference\",\"properties\":{},\"type\":\"FeatureCollection\"},\"X\":16,\"Y\":10,\"Z\":0}},\"id\":\"geo-json-with-meta-point-test\",\"kind\":\"geo-json-point:test:1.0.0\",\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"meta\":[{\"propertyValues\":[\"MM/dd/yyyy\"],\"persistableReference\":\"{\\\"type\\\": \\\"DAT\\\", \\\"format\\\": \\\"MM/dd/yyyy\\\"}\",\"uncertainty\":0,\"kind\":\"DateTime\",\"propertyNames\":[\"SpudDate\"]}]}"; + private static final String COMBINED_ANY_CRS_META_FOR_CONVERTED_RECORD = "{\"acl\":{\"owners\":[\"owners@unittest.com\"],\"viewers\":[\"viewers@unittest.com\"]},\"data\":{\"SpudDate\":\"2012-03-28\",\"SpatialLocation\":{\"AsIngestedCoordinates\":{\"bbox\":null,\"features\":[{\"bbox\":null,\"geometry\":{\"bbox\":null,\"coordinates\":[313405.9477893702,6544797.620047403,6.561679790026246],\"type\":\"AnyCrsPoint\"},\"properties\":{},\"type\":\"AnyCrsFeature\"}],\"persistableReferenceCrs\":\"reference\",\"persistableReferenceUnitZ\":\"reference\",\"properties\":{},\"type\":\"AnyCrsFeatureCollection\"},\"msg\":\"testing record 2\",\"Wgs84Coordinates\":{\"bbox\":null,\"features\":[{\"bbox\":null,\"geometry\":{\"bbox\":null,\"coordinates\":[5.7500000010406245,59.000000000399105,1.9999999999999998],\"type\":\"Point\"},\"properties\":{},\"type\":\"Feature\"}],\"persistableReferenceCrs\":null,\"persistableReferenceUnitZ\":\"reference\",\"properties\":{},\"type\":\"FeatureCollection\"},\"X\":16,\"Y\":10,\"Z\":0}},\"id\":\"geo-json-with-meta-point-test\",\"kind\":\"geo-json-point:test:1.0.0\",\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"meta\":[{\"propertyValues\":[\"MM/dd/yyyy\"],\"persistableReference\":\"{\\\"format\\\":\\\"yyyy-MM-dd\\\",\\\"type\\\":\\\"DAT\\\"}\",\"uncertainty\":0,\"kind\":\"DateTime\",\"propertyNames\":[\"SpudDate\"]}]}"; private static final String SPATIAL_LOCATION_ARRAY_RECORD = "{\"id\":\"geo-json-point-test\",\"kind\":\"geo-json-point:test:1.0.0\",\"acl\":{\"viewers\":[\"viewers@unittest.com\"],\"owners\":[\"owners@unittest.com\"]},\"legal\":{\"legaltags\":[\"unit-test-legal\"],\"otherRelevantDataCountries\":[\"AA\"]},\"data\":{\"SpatialLocation\":[{\"AsIngestedCoordinates\":{\"features\":[{\"geometry\":{\"coordinates\":[313405.9477893702,6544797.620047403,6.561679790026246],\"bbox\":null,\"type\":\"AnyCrsPoint\"},\"bbox\":null,\"properties\":{},\"type\":\"AnyCrsFeature\"}],\"bbox\":null,\"properties\":{},\"persistableReferenceCrs\":\"reference\",\"persistableReferenceUnitZ\":\"reference\",\"type\":\"CrsFeatureCollection\"},\"msg\":\"testing record 2\",\"X\":16.00,\"Y\":10.00,\"Z\":0}]}}"; @Test @@ -91,10 +93,10 @@ public class ConversionServiceTest { this.originalRecords.add(this.jsonParser.parse(RECORD_2).getAsJsonObject()); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(RECORD_2)); - Assert.assertEquals(CrsConversionServiceErrorMessages.MISSING_META_BLOCK, result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(RECORD_2)); + assertEquals(CrsConversionServiceErrorMessages.MISSING_META_BLOCK, result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -102,10 +104,10 @@ public class ConversionServiceTest { this.originalRecords.add(this.jsonParser.parse(RECORD_4).getAsJsonObject()); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(RECORD_4)); - Assert.assertEquals(CrsConversionServiceErrorMessages.MISSING_META_BLOCK, result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(RECORD_4)); + assertEquals(CrsConversionServiceErrorMessages.MISSING_META_BLOCK, result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -132,9 +134,9 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(2, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(CONVERTED_RECORD_1)); - Assert.assertTrue(result.getRecords().get(1).toString().equalsIgnoreCase(CONVERTED_RECORD_3)); + assertEquals(2, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(CONVERTED_RECORD_1)); + assertTrue(result.getRecords().get(1).toString().equalsIgnoreCase(CONVERTED_RECORD_3)); } @Test @@ -166,11 +168,11 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(3, result.getRecords().size()); + assertEquals(3, result.getRecords().size()); - Assert.assertTrue(result.getRecords().contains(this.jsonParser.parse(CONVERTED_RECORD_1).getAsJsonObject())); - Assert.assertTrue(result.getRecords().contains(this.jsonParser.parse(CONVERTED_RECORD_3).getAsJsonObject())); - Assert.assertTrue(result.getRecords().contains(this.jsonParser.parse(RECORD_2).getAsJsonObject())); + assertTrue(result.getRecords().contains(this.jsonParser.parse(CONVERTED_RECORD_1).getAsJsonObject())); + assertTrue(result.getRecords().contains(this.jsonParser.parse(CONVERTED_RECORD_3).getAsJsonObject())); + assertTrue(result.getRecords().contains(this.jsonParser.parse(RECORD_2).getAsJsonObject())); } @Test @@ -195,14 +197,14 @@ public class ConversionServiceTest { RecordsAndStatuses result = this.sut.doConversion(inputRecords); List<ConversionStatus> resultStatuses = result.getConversionStatuses(); - Assert.assertTrue(resultStatuses.get(0).getErrors().size() == 0); + assertTrue(resultStatuses.get(0).getErrors().size() == 0); List<JsonObject> resultRecords = result.getRecords(); - Assert.assertEquals(1, resultRecords.size()); + assertEquals(1, resultRecords.size()); JsonObject resultRecord = resultRecords.get(0); JsonElement data = resultRecord.get("data"); double actualMDValue = data.getAsJsonObject().get("MD").getAsDouble(); - Assert.assertEquals(3.048, actualMDValue, 0.00001); + assertEquals(3.048, actualMDValue, 0.00001); } @Test @@ -237,13 +239,13 @@ public class ConversionServiceTest { RecordsAndStatuses result = this.sut.doConversion(inputRecords); List<ConversionStatus> resultStatuses = result.getConversionStatuses(); List<JsonObject> resultRecords = result.getRecords(); - Assert.assertEquals(2, resultRecords.size()); - Assert.assertTrue(resultRecords.get(0).toString().equalsIgnoreCase(CONVERTED_RECORD_1)); - Assert.assertTrue(resultStatuses.get(1).getErrors().size() == 0); + assertEquals(2, resultRecords.size()); + assertTrue(resultRecords.get(0).toString().equalsIgnoreCase(CONVERTED_RECORD_1)); + assertTrue(resultStatuses.get(1).getErrors().size() == 0); JsonObject resultRecord = resultRecords.get(1); JsonElement data = resultRecord.get("data"); double actualMDValue = data.getAsJsonObject().get("MD").getAsDouble(); - Assert.assertEquals(3.048, actualMDValue, 0.00001); + assertEquals(3.048, actualMDValue, 0.00001); } @Test @@ -274,11 +276,11 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(2, result.getRecords().size()); + assertEquals(2, result.getRecords().size()); verify(this.logger).warning("Missing record after conversion: unit-test-3"); - Assert.assertTrue(result.getRecords().contains(this.jsonParser.parse(CONVERTED_RECORD_1).getAsJsonObject())); - Assert.assertTrue(result.getRecords().contains(this.jsonParser.parse(RECORD_2).getAsJsonObject())); + assertTrue(result.getRecords().contains(this.jsonParser.parse(CONVERTED_RECORD_1).getAsJsonObject())); + assertTrue(result.getRecords().contains(this.jsonParser.parse(RECORD_2).getAsJsonObject())); } @Test @@ -286,10 +288,10 @@ public class ConversionServiceTest { this.originalRecords.add(this.jsonParser.parse(GEO_JSON_RECORD).getAsJsonObject()); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(GEO_JSON_RECORD)); - Assert.assertEquals(CrsConversionServiceErrorMessages.MISSING_AS_INGESTED_COORDINATES, result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(GEO_JSON_RECORD)); + assertEquals(CrsConversionServiceErrorMessages.MISSING_AS_INGESTED_COORDINATES, result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -298,10 +300,10 @@ public class ConversionServiceTest { String type = "CrsFeatureCollection"; RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(GEO_JSON_RECORD_1)); - Assert.assertEquals(String.format(CrsConversionServiceErrorMessages.MISSING_AS_INGESTED_TYPE, type), result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(GEO_JSON_RECORD_1)); + assertEquals(String.format(CrsConversionServiceErrorMessages.MISSING_AS_INGESTED_TYPE, type), result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -310,10 +312,10 @@ public class ConversionServiceTest { String type = "SpatialLocation"; RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(SPATIAL_LOCATION_ARRAY_RECORD)); - Assert.assertEquals(String.format(UNEXPECTED_DATA_FORMAT_JSON_OBJECT, type), result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(SPATIAL_LOCATION_ARRAY_RECORD)); + assertEquals(String.format(UNEXPECTED_DATA_FORMAT_JSON_OBJECT, type), result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -334,8 +336,8 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_POINT_CONVERTED_RECORD)); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_POINT_CONVERTED_RECORD)); } @Test @@ -356,8 +358,8 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_MULTIPOINT_CONVERTED_RECORD)); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_MULTIPOINT_CONVERTED_RECORD)); } @Test @@ -378,8 +380,8 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_POLYGON_CONVERTED_RECORD)); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_POLYGON_CONVERTED_RECORD)); } @Test @@ -400,8 +402,8 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_MULTI_POLYGON_CONVERTED_RECORD)); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_MULTI_POLYGON_CONVERTED_RECORD)); } @Test @@ -422,8 +424,8 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_LINE_STRING_CONVERTED_RECORD)); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_LINE_STRING_CONVERTED_RECORD)); } @Test @@ -444,8 +446,8 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_MULTI_LINE_STRING_CONVERTED_RECORD)); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_MULTI_LINE_STRING_CONVERTED_RECORD)); } @Test @@ -466,12 +468,13 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_GEOMETRY_COLLECTION_CONVERTED_RECORD)); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_GEOMETRY_COLLECTION_CONVERTED_RECORD)); } @Test public void should_returnRecordsAfterCrsConversion_whenProvidedRecordWithAsIngestedCoordinatesWithMultipleTypes() { + final String pointRecordId = "geo-json-point-test"; this.originalRecords.add(this.jsonParser.parse(ANY_CRS_POINT_RECORD).getAsJsonObject()); this.originalRecords.add(this.jsonParser.parse(ANY_CRS_POLYGON_RECORD).getAsJsonObject()); @@ -481,7 +484,7 @@ public class ConversionServiceTest { List<ConversionStatus> conversionStatuses = new ArrayList<>(); ConversionStatus conversionStatus1 = new ConversionStatus(); conversionStatus1.setStatus(ConvertStatus.SUCCESS.toString()); - conversionStatus1.setId("geo-json-point-test"); + conversionStatus1.setId(pointRecordId); ConversionStatus conversionStatus2 = new ConversionStatus(); conversionStatus2.setStatus(ConvertStatus.SUCCESS.toString()); conversionStatus2.setId("geo-json-polygon-test"); @@ -494,9 +497,47 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(2, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ANY_CRS_POINT_CONVERTED_RECORD)); - Assert.assertTrue(result.getRecords().get(1).toString().equalsIgnoreCase(ANY_CRS_POLYGON_CONVERTED_RECORD)); + assertEquals(2, result.getRecords().size()); + result.getRecords().stream().map(r -> pointRecordId.equalsIgnoreCase(r.get("id").getAsString()) + ? r.toString().equalsIgnoreCase(ANY_CRS_POINT_CONVERTED_RECORD) + : r.toString().equalsIgnoreCase(ANY_CRS_POLYGON_CONVERTED_RECORD)).forEach(Assert::assertTrue); + } + + @Test + public void should_returnRecordsAfterCrsConversion_whenProvidedRecordWithAsIngestedCoordinatesWithMetaVariationTypes() { + final String geoPointNoMetaRecordId = "geo-json-point-test"; + final String geoPointWithMetaRecordId = "geo-json-with-meta-point-test"; + this.originalRecords.add(this.jsonParser.parse(ANY_CRS_POINT_RECORD).getAsJsonObject()); + this.originalRecords.add(this.jsonParser.parse(COMBINED_ANY_CRS_META_FOR_RECORD).getAsJsonObject()); + + List<JsonObject> convertedRecords = new ArrayList<>(); + convertedRecords.add(this.jsonParser.parse(ANY_CRS_POINT_CONVERTED_RECORD).getAsJsonObject()); + convertedRecords.add(this.jsonParser.parse(COMBINED_ANY_CRS_CONVERTED_RECORD).getAsJsonObject()); + List<ConversionStatus> conversionStatuses = new ArrayList<>(); + ConversionStatus conversionStatus1 = new ConversionStatus(); + conversionStatus1.setStatus(ConvertStatus.SUCCESS.toString()); + conversionStatus1.setId(geoPointNoMetaRecordId); + ConversionStatus conversionStatus2 = new ConversionStatus(); + conversionStatus2.setStatus(ConvertStatus.SUCCESS.toString()); + conversionStatus2.setId(geoPointWithMetaRecordId); + conversionStatuses.add(conversionStatus1); + conversionStatuses.add(conversionStatus2); + RecordsAndStatuses crsConversionResult = new RecordsAndStatuses(); + crsConversionResult.setConversionStatuses(conversionStatuses); + crsConversionResult.setRecords(convertedRecords); + + when(this.crsConversionService.doCrsConversion(any(), any())).thenReturn(crsConversionResult); + when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); + RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); + + assertEquals(2, result.getRecords().size()); + for (JsonObject r : result.getRecords()) { + if (geoPointNoMetaRecordId.equalsIgnoreCase(r.get("id").getAsString())) { + assertTrue(r.toString().equalsIgnoreCase(ANY_CRS_POINT_CONVERTED_RECORD)); + } else { + assertEquals(r, this.jsonParser.parse(COMBINED_ANY_CRS_META_FOR_CONVERTED_RECORD)); + } + } } @Test @@ -504,12 +545,12 @@ public class ConversionServiceTest { this.originalRecords.add(this.jsonParser.parse(ERRONEOUS_ANY_CRS_RECORD_1).getAsJsonObject()); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(2, result.getConversionStatuses().get(0).getErrors().size()); - Assert.assertEquals(ConvertStatus.NO_FRAME_OF_REFERENCE.toString(), result.getConversionStatuses().get(0).getStatus()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ERRONEOUS_ANY_CRS_RECORD_1)); - Assert.assertEquals(String.format(CrsConversionServiceErrorMessages.MISSING_AS_INGESTED_TYPE, ""), result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(2, result.getConversionStatuses().get(0).getErrors().size()); + assertEquals(ConvertStatus.NO_FRAME_OF_REFERENCE.toString(), result.getConversionStatuses().get(0).getStatus()); + assertEquals(1, result.getRecords().size()); + assertTrue(result.getRecords().get(0).toString().equalsIgnoreCase(ERRONEOUS_ANY_CRS_RECORD_1)); + assertEquals(String.format(CrsConversionServiceErrorMessages.MISSING_AS_INGESTED_TYPE, ""), result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -528,11 +569,11 @@ public class ConversionServiceTest { crsConversionResult.setRecords(this.originalRecords); when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(1, result.getConversionStatuses().get(0).getErrors().size()); - Assert.assertEquals(ConvertStatus.ERROR.toString(), result.getConversionStatuses().get(0).getStatus()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertEquals(TIMEOUT_FAILURE, result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(1, result.getConversionStatuses().get(0).getErrors().size()); + assertEquals(ConvertStatus.ERROR.toString(), result.getConversionStatuses().get(0).getStatus()); + assertEquals(1, result.getRecords().size()); + assertEquals(TIMEOUT_FAILURE, result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -551,11 +592,11 @@ public class ConversionServiceTest { crsConversionResult.setRecords(this.originalRecords); when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(1, result.getConversionStatuses().get(0).getErrors().size()); - Assert.assertEquals(ConvertStatus.ERROR.toString(), result.getConversionStatuses().get(0).getStatus()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertEquals(OTHER_FAILURE, result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(1, result.getConversionStatuses().get(0).getErrors().size()); + assertEquals(ConvertStatus.ERROR.toString(), result.getConversionStatuses().get(0).getStatus()); + assertEquals(1, result.getRecords().size()); + assertEquals(OTHER_FAILURE, result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -575,11 +616,11 @@ public class ConversionServiceTest { crsConversionResult.setRecords(this.originalRecords); when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getConversionStatuses().size()); - Assert.assertEquals(1, result.getConversionStatuses().get(0).getErrors().size()); - Assert.assertEquals(ConvertStatus.ERROR.toString(), result.getConversionStatuses().get(0).getStatus()); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertEquals(INVALID_COORDINATES, result.getConversionStatuses().get(0).getErrors().get(0)); + assertEquals(1, result.getConversionStatuses().size()); + assertEquals(1, result.getConversionStatuses().get(0).getErrors().size()); + assertEquals(ConvertStatus.ERROR.toString(), result.getConversionStatuses().get(0).getStatus()); + assertEquals(1, result.getRecords().size()); + assertEquals(INVALID_COORDINATES, result.getConversionStatuses().get(0).getErrors().get(0)); } @Test @@ -591,7 +632,7 @@ public class ConversionServiceTest { List<ConversionStatus> conversionStatuses = new ArrayList<>(); ConversionStatus conversionStatus = new ConversionStatus(); conversionStatus.setStatus(ConvertStatus.SUCCESS.toString()); - conversionStatus.setId("geo-json-point-test"); + conversionStatus.setId("geo-json-with-meta-point-test"); conversionStatuses.add(conversionStatus); RecordsAndStatuses crsConversionResult = new RecordsAndStatuses(); crsConversionResult.setConversionStatuses(conversionStatuses); @@ -601,7 +642,7 @@ public class ConversionServiceTest { when(this.crsConversionService.doCrsGeoJsonConversion(any(), any())).thenReturn(crsConversionResult); RecordsAndStatuses result = this.sut.doConversion(this.originalRecords); - Assert.assertEquals(1, result.getRecords().size()); - Assert.assertEquals(result.getRecords().get(0), this.jsonParser.parse(COMBINED_ANY_CRS_META_FOR_CONVERTED_RECORD)); + assertEquals(1, result.getRecords().size()); + assertEquals(result.getRecords().get(0), this.jsonParser.parse(COMBINED_ANY_CRS_META_FOR_CONVERTED_RECORD)); } }