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