From 7c4ecf13ab60fd5f8c0ce63bb05c0ce7c265b5c2 Mon Sep 17 00:00:00 2001
From: Harshit Aggarwal <haaggarw@microsoft.com>
Date: Fri, 21 Aug 2020 10:24:40 +0530
Subject: [PATCH] changing delete api call in action and ddms repo

---
 .../azure/action/ActionRepository.java        | 37 +++++++++++------
 .../provider/azure/ddms/DdmsRepository.java   | 37 +++++++++++------
 .../azure/action/ActionRepositoryTest.java    | 40 ++++++-------------
 .../azure/ddms/DdmsRepositoryTest.java        | 40 ++++++-------------
 4 files changed, 74 insertions(+), 80 deletions(-)

diff --git a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/action/ActionRepository.java b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/action/ActionRepository.java
index c28557ef7..01350ceab 100644
--- a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/action/ActionRepository.java
+++ b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/action/ActionRepository.java
@@ -64,13 +64,21 @@ public class ActionRepository implements IActionRepo {
         try {
             mutex.lock();
 
-            if (exists(action.getId())) {
-                logger.error(String.format("An action already exists with the id: %s", action.getId()));
-                throw new AppException(409, "Conflict", String.format("An action already exists with the id: %s", action.getId()));
-            }
-
             ActionDoc doc = new ActionDoc(action, dpsHeaders.getPartitionId());
-            cosmosStore.upsertItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), doc);
+
+            try {
+                cosmosStore.createItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), doc);
+            }
+            catch (AppException e) {
+                if(e.getError().getCode() == 409) {
+                    logger.error(String.format("An action already exists with the id: %s", action.getId()));
+                    throw new AppException(409, "Conflict", String.format("An action already exists with the id: %s", action.getId()));
+                }
+                else {
+                    logger.error(e.getMessage());
+                    throw new AppException(e.getError().getCode(), e.getError().getReason(), e.getMessage());
+                }
+            }
 
         } finally {
             mutex.unlock();
@@ -93,11 +101,18 @@ public class ActionRepository implements IActionRepo {
 
     @Override
     public boolean delete(String id) {
-        if(!exists(id)){
+        try {
+            cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), id, dpsHeaders.getPartitionId());
+        }
+        catch (AppException e) {
+            if(e.getError().getCode() == 404) {
+                logger.error(String.format("Action with id %s does not exist.", id));
+            }
+            else {
+                logger.error(e.getMessage());
+            }
             return false;
         }
-
-        cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), id, dpsHeaders.getPartitionId());
         return true;
     }
 
@@ -113,10 +128,6 @@ public class ActionRepository implements IActionRepo {
                 .stream().map(this::convertToActionClass).collect(Collectors.toList());
     }
 
-    private boolean exists(String id) {
-        return cosmosStore.findItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), id, dpsHeaders.getPartitionId(), ActionDoc.class).isPresent();
-    }
-
     private Action convertToActionClass(ActionDoc doc){
         Action action = new Action();
         action.setId(doc.getId());
diff --git a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepository.java b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepository.java
index 7a8ed6dcb..608842be5 100644
--- a/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepository.java
+++ b/provider/register-azure/src/main/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepository.java
@@ -61,13 +61,21 @@ public class DdmsRepository implements IDdmsRepository {
         try {
             mutex.lock();
 
-            if(exists(ddms.getId())){
-                logger.error(String.format("A DDMS already exists with the same id: %s", ddms.getId()));
-                throw new AppException(409, "Conflict", String.format("A DDMS already exists with the same id: %s", ddms.getId()));
-            }
-
             DdmsDoc doc = new DdmsDoc(ddms, dpsHeaders.getPartitionId());
-            cosmosStore.upsertItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), doc);
+
+            try {
+                cosmosStore.createItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), doc);
+            }
+            catch (AppException e) {
+                if(e.getError().getCode() == 409) {
+                    logger.error(String.format("A DDMS already exists with the same id: %s", ddms.getId()));
+                    throw new AppException(409, "Conflict", String.format("A DDMS already exists with the same id: %s", ddms.getId()));
+                }
+                else {
+                    logger.error(e.getMessage());
+                    throw new AppException(e.getError().getCode(), e.getError().getReason(), e.getMessage());
+                }
+            }
 
         } finally {
             mutex.unlock();
@@ -107,18 +115,21 @@ public class DdmsRepository implements IDdmsRepository {
     @Override
     public boolean delete(String id) {
 
-        if(!exists(id)){
+        try {
+            cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), id, dpsHeaders.getPartitionId());
+        }
+        catch (AppException e) {
+            if(e.getError().getCode() == 404) {
+                logger.error(String.format("DDMS with id %s does not exist.", id));
+            }
+            else {
+                logger.error(e.getMessage());
+            }
             return false;
         }
-
-        cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), id, dpsHeaders.getPartitionId());
         return true;
     }
 
-    private boolean exists(String id) {
-        return cosmosStore.findItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), id, dpsHeaders.getPartitionId(), DdmsDoc.class).isPresent();
-    }
-
     private Ddms ConvertToDdmsClass(DdmsDoc doc){
         Ddms ddms= new Ddms();
         ddms.setId(doc.getId());
diff --git a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/action/ActionRepositoryTest.java b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/action/ActionRepositoryTest.java
index 4a97c6ba1..6eac4245a 100644
--- a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/action/ActionRepositoryTest.java
+++ b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/action/ActionRepositoryTest.java
@@ -30,7 +30,6 @@ import org.opengroup.osdu.register.provider.azure.di.AzureBootstrapConfig;
 import org.opengroup.osdu.register.provider.azure.di.CosmosContainerConfig;
 
 import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -43,6 +42,7 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -70,9 +70,6 @@ public class ActionRepositoryTest {
     @Mock
     private JaxRsDpsLog logger;
 
-    @Mock
-    private Map<String, String> logHeaders;
-
     @InjectMocks
     private ActionRepository repo;
 
@@ -101,9 +98,7 @@ public class ActionRepositoryTest {
     @Test
     public void createActionThrows409WhenIdExists() {
         Action action = createAction();
-        Optional<ActionDoc> cosmosItem = Optional.of(new ActionDoc(action, dataPartitionId));
-
-        doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any());
+        doThrow(new AppException(409, "Reason", "Message")).when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), any());
 
         AppException exception = assertThrows(AppException.class, () -> {
             repo.createAction(action);
@@ -112,7 +107,6 @@ public class ActionRepositoryTest {
         assertEquals(409, exception.getError().getCode());
         assertEquals("Conflict", exception.getError().getReason());
         assertEquals(String.format("An action already exists with the id: %s", action.getId()), exception.getError().getMessage());
-        verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class);
         verify(dpsHeaders, times(2)).getPartitionId();
         verify(logger, times(1)).error(String.format("An action already exists with the id: %s", action.getId()));
     }
@@ -120,18 +114,14 @@ public class ActionRepositoryTest {
     @Test
     public void createActionDocumentInsertedSuccessfully() {
         Action action = createAction();
-
-        Optional<ActionDoc> cosmosItem = Optional.empty();
-        doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any());
-        doNothing().when(cosmosStore).upsertItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), any());
+        doNothing().when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), any());
 
         Action output = repo.createAction(action);
 
         assertEquals(action, output);
-        verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class);
-        verify(azureBootstrapConfig, times(2)).getCosmosDBName();
-        verify(cosmosContainerConfig, times(2)).getActionContainerName();
-        verify(dpsHeaders, times(4)).getPartitionId();
+        verify(azureBootstrapConfig, times(1)).getCosmosDBName();
+        verify(cosmosContainerConfig, times(1)).getActionContainerName();
+        verify(dpsHeaders, times(2)).getPartitionId();
     }
 
     @Test
@@ -172,34 +162,30 @@ public class ActionRepositoryTest {
     @Test
     public void deleteActionReturnsFalseWhenIdNotFound() {
 
-        doReturn(Optional.empty()).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any());
+        doThrow(new AppException(404, "Reason", "Message")).when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId));
 
         boolean output = repo.delete(actionId);
 
         assertFalse(output);
-        verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class);
+        verify(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId);
         verify(azureBootstrapConfig, times(1)).getCosmosDBName();
         verify(cosmosContainerConfig, times(1)).getActionContainerName();
         verify(dpsHeaders, times(2)).getPartitionId();
+        verify(logger, times(1)).error("Action with id id-1 does not exist.");
     }
 
     @Test
     public void deleteActionReturnsTrueWhenDeletedSuccessfully() {
 
-        Action action = createAction();
-        ActionDoc doc = new ActionDoc(action, dataPartitionId);
-
-        Optional<ActionDoc> cosmosItem = Optional.of(doc);
-        doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any());
+        doNothing().when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId));
 
         boolean output = repo.delete(actionId);
 
         assertTrue(output);
-        verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class);
         verify(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId);
-        verify(azureBootstrapConfig, times(2)).getCosmosDBName();
-        verify(cosmosContainerConfig, times(2)).getActionContainerName();
-        verify(dpsHeaders, times(4)).getPartitionId();
+        verify(azureBootstrapConfig, times(1)).getCosmosDBName();
+        verify(cosmosContainerConfig, times(1)).getActionContainerName();
+        verify(dpsHeaders, times(2)).getPartitionId();
     }
 
     @Test
diff --git a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepositoryTest.java b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepositoryTest.java
index 1e4354c93..256e9320a 100644
--- a/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepositoryTest.java
+++ b/provider/register-azure/src/test/java/org/opengroup/osdu/register/provider/azure/ddms/DdmsRepositoryTest.java
@@ -31,7 +31,6 @@ import org.opengroup.osdu.register.provider.azure.di.CosmosContainerConfig;
 
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
@@ -44,6 +43,7 @@ import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.lenient;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -71,9 +71,6 @@ public class DdmsRepositoryTest {
     @Mock
     private JaxRsDpsLog logger;
 
-    @Mock
-    private Map<String, String> logHeaders;
-
     @InjectMocks
     private DdmsRepository repo;
 
@@ -87,9 +84,7 @@ public class DdmsRepositoryTest {
     @Test
     public void createDdmsThrows409WhenIdExists() {
         Ddms ddms = createDdms();
-        Optional<DdmsDoc> cosmosItem = Optional.of(new DdmsDoc());
-
-        doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any());
+        doThrow(new AppException(409, "Reason", "Message")).when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), any());
 
         AppException exception = assertThrows(AppException.class, () -> {
             repo.create(ddms);
@@ -98,7 +93,6 @@ public class DdmsRepositoryTest {
         assertEquals(409, exception.getError().getCode());
         assertEquals("Conflict", exception.getError().getReason());
         assertEquals(String.format("A DDMS already exists with the same id: %s", ddms.getId()), exception.getError().getMessage());
-        verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class);
         verify(cosmosContainerConfig, times(1)).getDdmsContainerName();
         verify(dpsHeaders, times(2)).getPartitionId();
         verify(logger, times(1)).error(String.format("A DDMS already exists with the same id: %s", ddms.getId()));
@@ -107,18 +101,14 @@ public class DdmsRepositoryTest {
     @Test
     public void createDdmsDocumentInsertedSuccessfully() {
         Ddms ddms = createDdms();
-
-        Optional<DdmsDoc> cosmosItem = Optional.empty();
-        doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any());
-        doNothing().when(cosmosStore).upsertItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), any());
+        doNothing().when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), any());
 
         Ddms output = repo.create(ddms);
 
         assertEquals(ddms, output);
-        verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class);
-        verify(azureBootstrapConfig, times(2)).getCosmosDBName();
-        verify(cosmosContainerConfig, times(2)).getDdmsContainerName();
-        verify(dpsHeaders, times(4)).getPartitionId();
+        verify(azureBootstrapConfig, times(1)).getCosmosDBName();
+        verify(cosmosContainerConfig, times(1)).getDdmsContainerName();
+        verify(dpsHeaders, times(2)).getPartitionId();
     }
 
     @Test
@@ -160,34 +150,30 @@ public class DdmsRepositoryTest {
     @Test
     public void deleteDdmsReturnsFalseWhenIdNotFound() {
 
-        doReturn(Optional.empty()).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any());
+        doThrow(new AppException(404, "Reason", "Message")).when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId));
 
         boolean output = repo.delete(ddmsId);
 
         assertFalse(output);
-        verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class);
+        verify(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId);
         verify(azureBootstrapConfig, times(1)).getCosmosDBName();
         verify(cosmosContainerConfig, times(1)).getDdmsContainerName();
         verify(dpsHeaders, times(2)).getPartitionId();
+        verify(logger, times(1)).error(String.format("DDMS with id %s does not exist.", ddmsId));
     }
 
     @Test
     public void deleteDdmsReturnsTrueWhenDeletedSuccessfully() {
 
-        Ddms ddms = createDdms();
-        DdmsDoc doc = new DdmsDoc(ddms, dataPartitionId);
-
-        Optional<DdmsDoc> cosmosItem = Optional.of(doc);
-        doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any());
+        doNothing().when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId));
 
         boolean output = repo.delete(ddmsId);
 
         assertTrue(output);
-        verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class);
         verify(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId);
-        verify(azureBootstrapConfig, times(2)).getCosmosDBName();
-        verify(cosmosContainerConfig, times(2)).getDdmsContainerName();
-        verify(dpsHeaders, times(4)).getPartitionId();
+        verify(azureBootstrapConfig, times(1)).getCosmosDBName();
+        verify(cosmosContainerConfig, times(1)).getDdmsContainerName();
+        verify(dpsHeaders, times(2)).getPartitionId();
     }
 
     @Test
-- 
GitLab