From d1e38328faa68fbf3613485f6992fcfffacd6448 Mon Sep 17 00:00:00 2001 From: Neelesh Thakur <NThakur4@slb.com> Date: Mon, 6 Apr 2020 13:57:02 -0500 Subject: [PATCH] refine error message and add more tests --- .../indexer/util/parser/GeoShapeParser.java | 2 +- .../AttributeParsingServiceImplTest.java | 43 ++++++++++++++++++- .../util/parser/GeoShapeParserTest.java | 14 +++++- 3 files changed, 56 insertions(+), 3 deletions(-) diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/parser/GeoShapeParser.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/parser/GeoShapeParser.java index 9b3cc7981..08634523c 100644 --- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/parser/GeoShapeParser.java +++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/parser/GeoShapeParser.java @@ -50,7 +50,7 @@ public class GeoShapeParser { return shapeBuilder.toString().replaceAll("\\r", "").replaceAll("\\n", ""); } catch (ElasticsearchParseException | InvalidShapeException | IOException e) { - throw new IllegalArgumentException(e); + throw new IllegalArgumentException(e.getMessage(), e); } } diff --git a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/AttributeParsingServiceImplTest.java b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/AttributeParsingServiceImplTest.java index a9ae625fd..73da01c76 100644 --- a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/AttributeParsingServiceImplTest.java +++ b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/AttributeParsingServiceImplTest.java @@ -14,17 +14,21 @@ package org.opengroup.osdu.indexer.service; +import com.google.gson.Gson; import com.google.gson.internal.LinkedTreeMap; +import com.google.gson.reflect.TypeToken; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; -import org.opengroup.osdu.core.common.model.indexer.JobStatus; import org.opengroup.osdu.core.common.logging.JaxRsDpsLog; +import org.opengroup.osdu.core.common.model.indexer.JobStatus; import org.opengroup.osdu.indexer.util.parser.DateTimeParser; +import org.opengroup.osdu.indexer.util.parser.GeoShapeParser; import org.opengroup.osdu.indexer.util.parser.NumberParser; import org.springframework.test.context.junit4.SpringRunner; +import java.lang.reflect.Type; import java.util.HashMap; import java.util.Map; @@ -42,6 +46,8 @@ public class AttributeParsingServiceImplTest { @Mock private DateTimeParser dateTimeParser; @Mock + private GeoShapeParser geoShapeParser; + @Mock private JaxRsDpsLog log; @Mock private JobStatus jobStatus; @@ -217,4 +223,39 @@ public class AttributeParsingServiceImplTest { assertFalse(dataMap.isEmpty()); } + + @Test + public void should_returnGeoShape_given_validTreeMap_tryGetGeoShapeTest() { + final String shapeJson = "{\"type\":\"Polygon\",\"coordinates\":[[[100,0],[101,0],[101,1],[100,1],[100,0]]]}"; + Map<String, Object> storageData = new HashMap<>(); + storageData.put("location", parseJson(shapeJson)); + + when(this.geoShapeParser.parseGeoJson(storageData)).thenReturn(""); + + Map<String, Object> dataMap = new HashMap<>(); + + this.sut.tryParseGeojson("", "location", storageData, dataMap); + + assertFalse(dataMap.isEmpty()); + } + + @Test + public void should_throwException_given_geoShapeParingFailed() { + final String shapeJson = "{\"type\":\"Polygon\",\"coordinates\":[[[100,NaN],[101,0],[101,1],[100,1],[100,0]]]}"; + Map<String, Object> storageData = new HashMap<>(); + storageData.put("location", parseJson(shapeJson)); + + when(this.geoShapeParser.parseGeoJson(any())).thenThrow(new IllegalArgumentException("geo coordinates must be numbers")); + + Map<String, Object> dataMap = new HashMap<>(); + + this.sut.tryParseGeojson("", "location", storageData, dataMap); + + assertTrue(dataMap.isEmpty()); + } + + private Map<String, Object> parseJson(String json) { + Type type = new TypeToken<Map<String, Object>>() {}.getType(); + return new Gson().fromJson(json, type); + } } \ No newline at end of file diff --git a/indexer-core/src/test/java/org/opengroup/osdu/indexer/util/parser/GeoShapeParserTest.java b/indexer-core/src/test/java/org/opengroup/osdu/indexer/util/parser/GeoShapeParserTest.java index 1b6ad352d..8c1d36fe9 100644 --- a/indexer-core/src/test/java/org/opengroup/osdu/indexer/util/parser/GeoShapeParserTest.java +++ b/indexer-core/src/test/java/org/opengroup/osdu/indexer/util/parser/GeoShapeParserTest.java @@ -41,7 +41,6 @@ public class GeoShapeParserTest { @Rule public ExpectedException exceptionRule = ExpectedException.none(); - @Test public void should_throwException_provided_emptyGeoJson() { String shapeJson = "{}"; @@ -63,6 +62,12 @@ public class GeoShapeParserTest { this.validateInput(this.sut::parseGeoJson, shapeJson, "geo coordinates must be numbers"); } + @Test + public void should_throwException_parseInvalidPoint_missingLatitude() { + String shapeJson = "{\"type\":\"Point\",\"coordinates\":[-205.01621,\"\"]}"; + + this.validateInput(this.sut::parseGeoJson, shapeJson, "geo coordinates must be numbers"); + } @Test public void should_throwException_missingMandatoryAttribute() { @@ -113,6 +118,13 @@ public class GeoShapeParserTest { this.validateInput(this.sut::parseGeoJson, shapeJson, Strings.EMPTY); } + @Test + public void should_throwException_parseInvalidPolygon_malformedLatitude() { + String shapeJson = "{\"type\":\"Polygon\",\"coordinates\":[[[100,\"afgg\"],[101,0],[101,1],[100,1],[100,0]]]}"; + + this.validateInput(this.sut::parseGeoJson, shapeJson, "geo coordinates must be numbers"); + } + @Test public void should_parseValidMultiPolygon() { String shapeJson = "{\"type\":\"MultiPolygon\",\"coordinates\":[[[[107,7],[108,7],[108,8],[107,8],[107,7]]],[[[100,0],[101,0],[101,1],[100,1],[100,0]]]]}"; -- GitLab