Skip to content
Snippets Groups Projects
Commit f58500d0 authored by Kishore Battula's avatar Kishore Battula
Browse files

Merge branch 'haaggarw/ChangingDeleteApiCall' into 'master'

Removing exists method to call createItem and deleteItem in CosmosStore

See merge request !14
parents 635e4184 7c4ecf13
No related branches found
No related tags found
1 merge request!14Removing exists method to call createItem and deleteItem in CosmosStore
Pipeline #6323 passed
...@@ -64,13 +64,21 @@ public class ActionRepository implements IActionRepo { ...@@ -64,13 +64,21 @@ public class ActionRepository implements IActionRepo {
try { try {
mutex.lock(); 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()); 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 { } finally {
mutex.unlock(); mutex.unlock();
...@@ -93,11 +101,18 @@ public class ActionRepository implements IActionRepo { ...@@ -93,11 +101,18 @@ public class ActionRepository implements IActionRepo {
@Override @Override
public boolean delete(String id) { 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; return false;
} }
cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getActionContainerName(), id, dpsHeaders.getPartitionId());
return true; return true;
} }
...@@ -113,10 +128,6 @@ public class ActionRepository implements IActionRepo { ...@@ -113,10 +128,6 @@ public class ActionRepository implements IActionRepo {
.stream().map(this::convertToActionClass).collect(Collectors.toList()); .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){ private Action convertToActionClass(ActionDoc doc){
Action action = new Action(); Action action = new Action();
action.setId(doc.getId()); action.setId(doc.getId());
......
...@@ -61,13 +61,21 @@ public class DdmsRepository implements IDdmsRepository { ...@@ -61,13 +61,21 @@ public class DdmsRepository implements IDdmsRepository {
try { try {
mutex.lock(); 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()); 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 { } finally {
mutex.unlock(); mutex.unlock();
...@@ -107,18 +115,21 @@ public class DdmsRepository implements IDdmsRepository { ...@@ -107,18 +115,21 @@ public class DdmsRepository implements IDdmsRepository {
@Override @Override
public boolean delete(String id) { 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; return false;
} }
cosmosStore.deleteItem(dpsHeaders.getPartitionId(), azureBootstrapConfig.getCosmosDBName(), cosmosContainerConfig.getDdmsContainerName(), id, dpsHeaders.getPartitionId());
return true; 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){ private Ddms ConvertToDdmsClass(DdmsDoc doc){
Ddms ddms= new Ddms(); Ddms ddms= new Ddms();
ddms.setId(doc.getId()); ddms.setId(doc.getId());
......
...@@ -30,7 +30,6 @@ import org.opengroup.osdu.register.provider.azure.di.AzureBootstrapConfig; ...@@ -30,7 +30,6 @@ import org.opengroup.osdu.register.provider.azure.di.AzureBootstrapConfig;
import org.opengroup.osdu.register.provider.azure.di.CosmosContainerConfig; import org.opengroup.osdu.register.provider.azure.di.CosmosContainerConfig;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -43,6 +42,7 @@ import static org.mockito.ArgumentMatchers.any; ...@@ -43,6 +42,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
...@@ -70,9 +70,6 @@ public class ActionRepositoryTest { ...@@ -70,9 +70,6 @@ public class ActionRepositoryTest {
@Mock @Mock
private JaxRsDpsLog logger; private JaxRsDpsLog logger;
@Mock
private Map<String, String> logHeaders;
@InjectMocks @InjectMocks
private ActionRepository repo; private ActionRepository repo;
...@@ -101,9 +98,7 @@ public class ActionRepositoryTest { ...@@ -101,9 +98,7 @@ public class ActionRepositoryTest {
@Test @Test
public void createActionThrows409WhenIdExists() { public void createActionThrows409WhenIdExists() {
Action action = createAction(); Action action = createAction();
Optional<ActionDoc> cosmosItem = Optional.of(new ActionDoc(action, dataPartitionId)); doThrow(new AppException(409, "Reason", "Message")).when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), any());
doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId), any());
AppException exception = assertThrows(AppException.class, () -> { AppException exception = assertThrows(AppException.class, () -> {
repo.createAction(action); repo.createAction(action);
...@@ -112,7 +107,6 @@ public class ActionRepositoryTest { ...@@ -112,7 +107,6 @@ public class ActionRepositoryTest {
assertEquals(409, exception.getError().getCode()); assertEquals(409, exception.getError().getCode());
assertEquals("Conflict", exception.getError().getReason()); assertEquals("Conflict", exception.getError().getReason());
assertEquals(String.format("An action already exists with the id: %s", action.getId()), exception.getError().getMessage()); 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(dpsHeaders, times(2)).getPartitionId();
verify(logger, times(1)).error(String.format("An action already exists with the id: %s", action.getId())); verify(logger, times(1)).error(String.format("An action already exists with the id: %s", action.getId()));
} }
...@@ -120,18 +114,14 @@ public class ActionRepositoryTest { ...@@ -120,18 +114,14 @@ public class ActionRepositoryTest {
@Test @Test
public void createActionDocumentInsertedSuccessfully() { public void createActionDocumentInsertedSuccessfully() {
Action action = createAction(); Action action = createAction();
doNothing().when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), any());
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());
Action output = repo.createAction(action); Action output = repo.createAction(action);
assertEquals(action, output); assertEquals(action, output);
verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId, ActionDoc.class); verify(azureBootstrapConfig, times(1)).getCosmosDBName();
verify(azureBootstrapConfig, times(2)).getCosmosDBName(); verify(cosmosContainerConfig, times(1)).getActionContainerName();
verify(cosmosContainerConfig, times(2)).getActionContainerName(); verify(dpsHeaders, times(2)).getPartitionId();
verify(dpsHeaders, times(4)).getPartitionId();
} }
@Test @Test
...@@ -172,34 +162,30 @@ public class ActionRepositoryTest { ...@@ -172,34 +162,30 @@ public class ActionRepositoryTest {
@Test @Test
public void deleteActionReturnsFalseWhenIdNotFound() { 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); boolean output = repo.delete(actionId);
assertFalse(output); 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(azureBootstrapConfig, times(1)).getCosmosDBName();
verify(cosmosContainerConfig, times(1)).getActionContainerName(); verify(cosmosContainerConfig, times(1)).getActionContainerName();
verify(dpsHeaders, times(2)).getPartitionId(); verify(dpsHeaders, times(2)).getPartitionId();
verify(logger, times(1)).error("Action with id id-1 does not exist.");
} }
@Test @Test
public void deleteActionReturnsTrueWhenDeletedSuccessfully() { public void deleteActionReturnsTrueWhenDeletedSuccessfully() {
Action action = createAction(); doNothing().when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(actionContainer), eq(actionId), eq(dataPartitionId));
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());
boolean output = repo.delete(actionId); boolean output = repo.delete(actionId);
assertTrue(output); 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(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, actionContainer, actionId, dataPartitionId);
verify(azureBootstrapConfig, times(2)).getCosmosDBName(); verify(azureBootstrapConfig, times(1)).getCosmosDBName();
verify(cosmosContainerConfig, times(2)).getActionContainerName(); verify(cosmosContainerConfig, times(1)).getActionContainerName();
verify(dpsHeaders, times(4)).getPartitionId(); verify(dpsHeaders, times(2)).getPartitionId();
} }
@Test @Test
......
...@@ -31,7 +31,6 @@ import org.opengroup.osdu.register.provider.azure.di.CosmosContainerConfig; ...@@ -31,7 +31,6 @@ import org.opengroup.osdu.register.provider.azure.di.CosmosContainerConfig;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
...@@ -44,6 +43,7 @@ import static org.mockito.ArgumentMatchers.any; ...@@ -44,6 +43,7 @@ import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.lenient;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
...@@ -71,9 +71,6 @@ public class DdmsRepositoryTest { ...@@ -71,9 +71,6 @@ public class DdmsRepositoryTest {
@Mock @Mock
private JaxRsDpsLog logger; private JaxRsDpsLog logger;
@Mock
private Map<String, String> logHeaders;
@InjectMocks @InjectMocks
private DdmsRepository repo; private DdmsRepository repo;
...@@ -87,9 +84,7 @@ public class DdmsRepositoryTest { ...@@ -87,9 +84,7 @@ public class DdmsRepositoryTest {
@Test @Test
public void createDdmsThrows409WhenIdExists() { public void createDdmsThrows409WhenIdExists() {
Ddms ddms = createDdms(); Ddms ddms = createDdms();
Optional<DdmsDoc> cosmosItem = Optional.of(new DdmsDoc()); doThrow(new AppException(409, "Reason", "Message")).when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), any());
doReturn(cosmosItem).when(cosmosStore).findItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId), any());
AppException exception = assertThrows(AppException.class, () -> { AppException exception = assertThrows(AppException.class, () -> {
repo.create(ddms); repo.create(ddms);
...@@ -98,7 +93,6 @@ public class DdmsRepositoryTest { ...@@ -98,7 +93,6 @@ public class DdmsRepositoryTest {
assertEquals(409, exception.getError().getCode()); assertEquals(409, exception.getError().getCode());
assertEquals("Conflict", exception.getError().getReason()); assertEquals("Conflict", exception.getError().getReason());
assertEquals(String.format("A DDMS already exists with the same id: %s", ddms.getId()), exception.getError().getMessage()); 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(cosmosContainerConfig, times(1)).getDdmsContainerName();
verify(dpsHeaders, times(2)).getPartitionId(); verify(dpsHeaders, times(2)).getPartitionId();
verify(logger, times(1)).error(String.format("A DDMS already exists with the same id: %s", ddms.getId())); 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 { ...@@ -107,18 +101,14 @@ public class DdmsRepositoryTest {
@Test @Test
public void createDdmsDocumentInsertedSuccessfully() { public void createDdmsDocumentInsertedSuccessfully() {
Ddms ddms = createDdms(); Ddms ddms = createDdms();
doNothing().when(cosmosStore).createItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), any());
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());
Ddms output = repo.create(ddms); Ddms output = repo.create(ddms);
assertEquals(ddms, output); assertEquals(ddms, output);
verify(cosmosStore, times(1)).findItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId, DdmsDoc.class); verify(azureBootstrapConfig, times(1)).getCosmosDBName();
verify(azureBootstrapConfig, times(2)).getCosmosDBName(); verify(cosmosContainerConfig, times(1)).getDdmsContainerName();
verify(cosmosContainerConfig, times(2)).getDdmsContainerName(); verify(dpsHeaders, times(2)).getPartitionId();
verify(dpsHeaders, times(4)).getPartitionId();
} }
@Test @Test
...@@ -160,34 +150,30 @@ public class DdmsRepositoryTest { ...@@ -160,34 +150,30 @@ public class DdmsRepositoryTest {
@Test @Test
public void deleteDdmsReturnsFalseWhenIdNotFound() { 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); boolean output = repo.delete(ddmsId);
assertFalse(output); 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(azureBootstrapConfig, times(1)).getCosmosDBName();
verify(cosmosContainerConfig, times(1)).getDdmsContainerName(); verify(cosmosContainerConfig, times(1)).getDdmsContainerName();
verify(dpsHeaders, times(2)).getPartitionId(); verify(dpsHeaders, times(2)).getPartitionId();
verify(logger, times(1)).error(String.format("DDMS with id %s does not exist.", ddmsId));
} }
@Test @Test
public void deleteDdmsReturnsTrueWhenDeletedSuccessfully() { public void deleteDdmsReturnsTrueWhenDeletedSuccessfully() {
Ddms ddms = createDdms(); doNothing().when(cosmosStore).deleteItem(eq(dataPartitionId), eq(cosmosDatabase), eq(ddmsContainer), eq(ddmsId), eq(dataPartitionId));
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());
boolean output = repo.delete(ddmsId); boolean output = repo.delete(ddmsId);
assertTrue(output); 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(cosmosStore, times(1)).deleteItem(dataPartitionId, cosmosDatabase, ddmsContainer, ddmsId, dataPartitionId);
verify(azureBootstrapConfig, times(2)).getCosmosDBName(); verify(azureBootstrapConfig, times(1)).getCosmosDBName();
verify(cosmosContainerConfig, times(2)).getDdmsContainerName(); verify(cosmosContainerConfig, times(1)).getDdmsContainerName();
verify(dpsHeaders, times(4)).getPartitionId(); verify(dpsHeaders, times(2)).getPartitionId();
} }
@Test @Test
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment