From e254d81167d10bb50ffba2b945089c80d73eb754 Mon Sep 17 00:00:00 2001
From: MZhu9 <ujr7dj3ljx3fpstxflyytui5kziqgnbscv3po6mrm3ikbn52frqq>
Date: Tue, 3 Oct 2023 09:34:32 -0500
Subject: [PATCH] correct shallow copy bug

---
 .../indexer/service/StorageServiceImpl.java   |  5 ++-
 .../service/StorageServiceImplTest.java       | 37 +++++++++++++++++++
 2 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/StorageServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/StorageServiceImpl.java
index cfcf8ce96..fecc1082d 100644
--- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/StorageServiceImpl.java
+++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/StorageServiceImpl.java
@@ -147,8 +147,9 @@ public class StorageServiceImpl implements StorageService {
         }
         try {
             Records records = this.objectMapper.readValue(response.getBody(), Records.class);
-            ids.removeAll(records.getRecords().stream().map(Records.Entity::getId).collect(Collectors.toList()));
-            records.setNotFound(ids);
+            List<String> notFoundRecordIds = new ArrayList<>(ids);
+            notFoundRecordIds.removeAll(records.getRecords().stream().map(Records.Entity::getId).collect(Collectors.toList()));
+            records.setNotFound(notFoundRecordIds);
             return records;
         } catch (JsonProcessingException e) {
             throw new AppException(RequestStatus.INVALID_RECORD, "Invalid request", "Successful Storage service response with wrong json", e);
diff --git a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/StorageServiceImplTest.java b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/StorageServiceImplTest.java
index 437f8714f..07220cddc 100644
--- a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/StorageServiceImplTest.java
+++ b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/StorageServiceImplTest.java
@@ -190,6 +190,43 @@ public class StorageServiceImplTest {
     @Test
     public void should_returnStorageRecords_givenRecordIds_getValidStorageRecordsTest() throws URISyntaxException {
 
+        String validDataFromStorage = "{\"records\":[{\"id\":\"tenant1:doc:1dbf528e0e0549cab7a08f29fbfc8465\", \"version\":1, \"kind\":\"tenant:test:test:1.0.0\"}," +
+                "{\"id\":\"tenant1:doc:15e790a69beb4d789b1f979e2af2e813\", \"version\":1, \"kind\":\"tenant:test:test:1.0.0\"}]}";
+
+        HttpResponse httpResponse = mock(HttpResponse.class);
+        when(httpResponse.getBody()).thenReturn(validDataFromStorage);
+
+        when(configurationProperties.getStorageQueryRecordHost()).thenReturn("storageUrl");
+        when(this.httpClientHandler.sendRequest(any(), any())).thenReturn(httpResponse);
+        List<String> idsCopy = new ArrayList<>();
+        idsCopy.addAll(ids);
+        Records storageRecords = this.sut.getStorageRecords(idsCopy);
+
+        assertEquals(2, storageRecords.getRecords().size());
+        assertEquals(0, storageRecords.getNotFound().size());
+    }
+
+    @Test
+    public void should_returnStorageRecords_givenRecordIds_allFound_getValidStorageRecordsTest() throws URISyntaxException {
+
+        String validDataFromStorage = "{\"records\":[]}";
+
+        HttpResponse httpResponse = mock(HttpResponse.class);
+        when(httpResponse.getBody()).thenReturn(validDataFromStorage);
+
+        when(configurationProperties.getStorageQueryRecordHost()).thenReturn("storageUrl");
+        when(this.httpClientHandler.sendRequest(any(), any())).thenReturn(httpResponse);
+        List<String> idsCopy = new ArrayList<>();
+        idsCopy.addAll(ids);
+        Records storageRecords = this.sut.getStorageRecords(idsCopy);
+
+        assertEquals(0, storageRecords.getRecords().size());
+        assertEquals(2, storageRecords.getNotFound().size());
+    }
+
+    @Test
+    public void should_returnStorageRecords_givenRecordIds_noneFound_getValidStorageRecordsTest() throws URISyntaxException {
+
         String validDataFromStorage = "{\"records\":[{\"id\":\"tenant1:doc:1dbf528e0e0549cab7a08f29fbfc8465\", \"version\":1, \"kind\":\"tenant:test:test:1.0.0\"}]}";
 
         HttpResponse httpResponse = mock(HttpResponse.class);
-- 
GitLab