From ebaedd7eb228e79470861f115f9250bfa8925dcf Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Thu, 24 Sep 2026 18:47:55 +0530 Subject: [PATCH 01/10] Fix issue --- .../sdm/model/CreateDraftEntriesRequest.java | 12 +++++ .../handler/SDMCustomServiceHandler.java | 46 ++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/model/CreateDraftEntriesRequest.java b/sdm/src/main/java/com/sap/cds/sdm/model/CreateDraftEntriesRequest.java index a6cdc370c..606db6277 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/model/CreateDraftEntriesRequest.java +++ b/sdm/src/main/java/com/sap/cds/sdm/model/CreateDraftEntriesRequest.java @@ -17,6 +17,7 @@ public class CreateDraftEntriesRequest { private final String repositoryId; private final String folderId; private final Map customPropertyValues; + private final List sourceObjectIds; private CreateDraftEntriesRequest(Builder builder) { this.attachmentsMetadata = builder.attachmentsMetadata; @@ -28,6 +29,7 @@ private CreateDraftEntriesRequest(Builder builder) { this.repositoryId = builder.repositoryId; this.folderId = builder.folderId; this.customPropertyValues = builder.customPropertyValues; + this.sourceObjectIds = builder.sourceObjectIds; } // Getters @@ -67,6 +69,10 @@ public Map getCustomPropertyValues() { return customPropertyValues; } + public List getSourceObjectIds() { + return sourceObjectIds; + } + public static Builder builder() { return new Builder(); } @@ -81,6 +87,7 @@ public static class Builder { private String repositoryId; private String folderId; private Map customPropertyValues; + private List sourceObjectIds; public Builder attachmentsMetadata(List> attachmentsMetadata) { this.attachmentsMetadata = attachmentsMetadata; @@ -127,6 +134,11 @@ public Builder customPropertyValues(Map customPropertyValues) { return this; } + public Builder sourceObjectIds(List sourceObjectIds) { + this.sourceObjectIds = sourceObjectIds; + return this; + } + public CreateDraftEntriesRequest build() { return new CreateDraftEntriesRequest(this); } diff --git a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java index d7789e67c..ac39e6a9c 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java @@ -1,7 +1,10 @@ package com.sap.cds.sdm.service.handler; import com.sap.cds.Result; +import com.sap.cds.Row; import com.sap.cds.ql.Insert; +import com.sap.cds.ql.Select; +import com.sap.cds.ql.Update; import com.sap.cds.reflect.CdsAssociationType; import com.sap.cds.reflect.CdsElement; import com.sap.cds.reflect.CdsEntity; @@ -192,6 +195,7 @@ public void copyAttachments(AttachmentCopyEventContext context) throws IOExcepti .repositoryId(repositoryId) .folderId(folderId) .customPropertyValues(null) + .sourceObjectIds(objectIds) .build(); // Pass the entity for type conversion @@ -1930,10 +1934,34 @@ private void createDraftEntries( String newObjectId = attachmentMetadata.get("cmis:objectId"); logger.debug("Processing draft entry for objectId: {}, fileName: {}", newObjectId, fileName); + // Read status and scannedAt from the source attachment so copies preserve the original values. + String resolvedStatus = "Clean"; + Instant resolvedScannedAt = Instant.now(); + List sourceObjectIds = request.getSourceObjectIds(); + if (targetEntity != null && sourceObjectIds != null && i < sourceObjectIds.size()) { + String sourceObjectId = sourceObjectIds.get(i); + Optional sourceRow = + persistenceService + .run( + Select.from(targetEntity) + .columns("status", "scannedAt") + .where(doc -> doc.get("objectId").eq(sourceObjectId)) + .limit(1)) + .first(); + if (sourceRow.isPresent()) { + Object statusVal = sourceRow.get().get("status"); + Object scannedAtVal = sourceRow.get().get("scannedAt"); + if (statusVal != null) resolvedStatus = statusVal.toString(); + if (scannedAtVal instanceof Instant) resolvedScannedAt = (Instant) scannedAtVal; + } + } + logger.debug( + "Resolved status={}, scannedAt={} for source attachment at index {}", resolvedStatus, resolvedScannedAt, i); + updatedFields.put(OBJECT_ID_KEY, newObjectId); updatedFields.put("repositoryId", request.getRepositoryId()); updatedFields.put("folderId", request.getFolderId()); - updatedFields.put("status", "Clean"); + updatedFields.put("status", resolvedStatus); updatedFields.put("uploadStatus", SDMConstants.UPLOAD_STATUS_SUCCESS); updatedFields.put("mimeType", mimeType); updatedFields.put("type", cmisDocument.getType()); // Individual type for each attachment @@ -2000,6 +2028,22 @@ private void createDraftEntries( throw new ServiceException( "Failed to insert attachment entry in DB after retries: " + e.getMessage(), e); } + // newDraft strips @readonly fields; DB DEFAULT 'Unscanned' applies for status. + // Bypass handler chain via persistenceService to persist status=Clean and scannedAt. + if (targetEntity != null) { + Map scanFields = new HashMap<>(); + scanFields.put("status", resolvedStatus); + scanFields.put("scannedAt", resolvedScannedAt); + String draftEntityName = targetEntity.getQualifiedName() + "_drafts"; + var scanUpdate = + Update.entity(draftEntityName) + .data(scanFields) + .where(doc -> doc.get("objectId").eq(newObjectId)); + persistenceService.run(scanUpdate); + logger.debug( + "Set status={}, scannedAt={} for copied draft attachment: {}", + resolvedStatus, resolvedScannedAt, newObjectId); + } } else { logger.error("No suitable service found for entity: {}", request.getParentEntity()); throw new ServiceException( From 798f220617f5ae8b3e7a3f980e57e0c019233357 Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Thu, 24 Sep 2026 18:49:57 +0530 Subject: [PATCH 02/10] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c188cfe7d..4a3bbe258 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.10.1-SNAPSHOT + 1.0.0-RC1 21 ${java.version} ${java.version} From 9d10942ac00403c2c9a8d4f70e1bf1b291e19683 Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Thu, 24 Sep 2026 18:53:38 +0530 Subject: [PATCH 03/10] spotless fix --- .../sdm/service/handler/SDMCustomServiceHandler.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java index ac39e6a9c..4db9e2dba 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java @@ -1934,7 +1934,8 @@ private void createDraftEntries( String newObjectId = attachmentMetadata.get("cmis:objectId"); logger.debug("Processing draft entry for objectId: {}, fileName: {}", newObjectId, fileName); - // Read status and scannedAt from the source attachment so copies preserve the original values. + // Read status and scannedAt from the source attachment so copies preserve the original + // values. String resolvedStatus = "Clean"; Instant resolvedScannedAt = Instant.now(); List sourceObjectIds = request.getSourceObjectIds(); @@ -1956,7 +1957,10 @@ private void createDraftEntries( } } logger.debug( - "Resolved status={}, scannedAt={} for source attachment at index {}", resolvedStatus, resolvedScannedAt, i); + "Resolved status={}, scannedAt={} for source attachment at index {}", + resolvedStatus, + resolvedScannedAt, + i); updatedFields.put(OBJECT_ID_KEY, newObjectId); updatedFields.put("repositoryId", request.getRepositoryId()); @@ -2042,7 +2046,9 @@ private void createDraftEntries( persistenceService.run(scanUpdate); logger.debug( "Set status={}, scannedAt={} for copied draft attachment: {}", - resolvedStatus, resolvedScannedAt, newObjectId); + resolvedStatus, + resolvedScannedAt, + newObjectId); } } else { logger.error("No suitable service found for entity: {}", request.getParentEntity()); From 3a37b78ec93286fb0c09756a4b7b50e2b09c6898 Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Thu, 24 Sep 2026 19:03:26 +0530 Subject: [PATCH 04/10] unit test cases fix --- .../sdm/service/handler/SDMCustomServiceHandlerTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMCustomServiceHandlerTest.java b/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMCustomServiceHandlerTest.java index d992c9a86..f451c7e07 100644 --- a/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMCustomServiceHandlerTest.java +++ b/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMCustomServiceHandlerTest.java @@ -416,6 +416,12 @@ void testCopyAttachments_MixedValidAndInvalidSecondaryProps_CopiesValidRejectsIn when(sdmService.copyAttachment(any(), any(SDMCredentials.class), anyBoolean(), any())) .thenReturn(attachmentData); + // Mock persistenceService.run for the source-status query in createDraftEntries + com.sap.cds.Result mockSelectResult = mock(com.sap.cds.Result.class); + when(mockSelectResult.first()).thenReturn(Optional.empty()); + when(persistenceService.run(any(com.sap.cds.ql.cqn.CqnSelect.class))) + .thenReturn(mockSelectResult); + // Act sdmCustomServiceHandler.copyAttachments(context); From d46930910c077fcefd12707d16a09e1d9c526fe7 Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Thu, 24 Sep 2026 19:11:37 +0530 Subject: [PATCH 05/10] unit test cases fix --- .../applicationservice/SDMReadAttachmentsHandlerTest.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sdm/src/test/java/unit/com/sap/cds/sdm/handler/applicationservice/SDMReadAttachmentsHandlerTest.java b/sdm/src/test/java/unit/com/sap/cds/sdm/handler/applicationservice/SDMReadAttachmentsHandlerTest.java index a4f1ed451..7c2a179c8 100644 --- a/sdm/src/test/java/unit/com/sap/cds/sdm/handler/applicationservice/SDMReadAttachmentsHandlerTest.java +++ b/sdm/src/test/java/unit/com/sap/cds/sdm/handler/applicationservice/SDMReadAttachmentsHandlerTest.java @@ -25,6 +25,7 @@ import java.lang.reflect.Method; import java.util.*; import org.ehcache.Cache; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.InjectMocks; @@ -48,6 +49,13 @@ public class SDMReadAttachmentsHandlerTest { private static final String REPOSITORY_ID_KEY = "testRepoId"; + @AfterEach + void tearDown() throws Exception { + java.lang.reflect.Field field = CacheConfig.class.getDeclaredField("errorMessageCache"); + field.setAccessible(true); + field.set(null, null); + } + @Test void testModifyCqnForAttachmentsEntity_Success() throws IOException { // Arrange From 54dd5f9ce3ec3407277ab81ebd563653f0c704e0 Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Thu, 24 Sep 2026 19:23:07 +0530 Subject: [PATCH 06/10] Revert "Update pom.xml" This reverts commit 798f220617f5ae8b3e7a3f980e57e0c019233357. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4a3bbe258..c188cfe7d 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ - 1.0.0-RC1 + 1.10.1-SNAPSHOT 21 ${java.version} ${java.version} From 30dc4142719044ec62fc8d98535ecafa52cf0291 Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Thu, 24 Sep 2026 19:39:17 +0530 Subject: [PATCH 07/10] sonar fix --- .../handler/SDMCustomServiceHandler.java | 60 ++++++++++++------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java index 4db9e2dba..aaad3b5aa 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java @@ -1934,28 +1934,10 @@ private void createDraftEntries( String newObjectId = attachmentMetadata.get("cmis:objectId"); logger.debug("Processing draft entry for objectId: {}, fileName: {}", newObjectId, fileName); - // Read status and scannedAt from the source attachment so copies preserve the original - // values. - String resolvedStatus = "Clean"; - Instant resolvedScannedAt = Instant.now(); - List sourceObjectIds = request.getSourceObjectIds(); - if (targetEntity != null && sourceObjectIds != null && i < sourceObjectIds.size()) { - String sourceObjectId = sourceObjectIds.get(i); - Optional sourceRow = - persistenceService - .run( - Select.from(targetEntity) - .columns("status", "scannedAt") - .where(doc -> doc.get("objectId").eq(sourceObjectId)) - .limit(1)) - .first(); - if (sourceRow.isPresent()) { - Object statusVal = sourceRow.get().get("status"); - Object scannedAtVal = sourceRow.get().get("scannedAt"); - if (statusVal != null) resolvedStatus = statusVal.toString(); - if (scannedAtVal instanceof Instant) resolvedScannedAt = (Instant) scannedAtVal; - } - } + SourceScanState scanState = + resolveSourceScanState(targetEntity, request.getSourceObjectIds(), i); + String resolvedStatus = scanState.status; + Instant resolvedScannedAt = scanState.scannedAt; logger.debug( "Resolved status={}, scannedAt={} for source attachment at index {}", resolvedStatus, @@ -2059,6 +2041,40 @@ private void createDraftEntries( logger.debug("Completed creating draft entries for copied attachments"); } + private SourceScanState resolveSourceScanState( + CdsEntity targetEntity, List sourceObjectIds, int index) { + if (targetEntity == null || sourceObjectIds == null || index >= sourceObjectIds.size()) { + return new SourceScanState("Clean", Instant.now()); + } + String sourceObjectId = sourceObjectIds.get(index); + Optional sourceRow = + persistenceService + .run( + Select.from(targetEntity) + .columns("status", "scannedAt") + .where(doc -> doc.get("objectId").eq(sourceObjectId)) + .limit(1)) + .first(); + if (sourceRow.isEmpty()) { + return new SourceScanState("Clean", Instant.now()); + } + Object statusVal = sourceRow.get().get("status"); + Object scannedAtVal = sourceRow.get().get("scannedAt"); + String status = statusVal != null ? statusVal.toString() : "Clean"; + Instant scannedAt = scannedAtVal instanceof Instant inst ? inst : Instant.now(); + return new SourceScanState(status, scannedAt); + } + + private static final class SourceScanState { + final String status; + final Instant scannedAt; + + SourceScanState(String status, Instant scannedAt) { + this.status = status; + this.scannedAt = scannedAt; + } + } + /** * Rolls back successfully moved attachments when database update fails. Moves attachments back to * their original source folder in parallel. Continues with remaining rollbacks even if individual From 2c37ed226bd19b2e792a9dfd259fdc3cb1e0a967 Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Fri, 25 Sep 2026 12:23:09 +0530 Subject: [PATCH 08/10] Update SDMCustomServiceHandler.java --- .../cds/sdm/service/handler/SDMCustomServiceHandler.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java index aaad3b5aa..ed8dee87e 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java @@ -2051,7 +2051,7 @@ private SourceScanState resolveSourceScanState( persistenceService .run( Select.from(targetEntity) - .columns("status", "scannedAt") + .columns("status") .where(doc -> doc.get("objectId").eq(sourceObjectId)) .limit(1)) .first(); @@ -2059,10 +2059,8 @@ private SourceScanState resolveSourceScanState( return new SourceScanState("Clean", Instant.now()); } Object statusVal = sourceRow.get().get("status"); - Object scannedAtVal = sourceRow.get().get("scannedAt"); String status = statusVal != null ? statusVal.toString() : "Clean"; - Instant scannedAt = scannedAtVal instanceof Instant inst ? inst : Instant.now(); - return new SourceScanState(status, scannedAt); + return new SourceScanState(status, Instant.now()); } private static final class SourceScanState { From dfb86e59ca8a129aacad2cb132ad646164fc4560 Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Fri, 25 Sep 2026 17:41:53 +0530 Subject: [PATCH 09/10] cleanup after changes --- .../sdm/model/CreateDraftEntriesRequest.java | 12 ---- .../handler/SDMCustomServiceHandler.java | 56 ++----------------- 2 files changed, 4 insertions(+), 64 deletions(-) diff --git a/sdm/src/main/java/com/sap/cds/sdm/model/CreateDraftEntriesRequest.java b/sdm/src/main/java/com/sap/cds/sdm/model/CreateDraftEntriesRequest.java index 606db6277..a6cdc370c 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/model/CreateDraftEntriesRequest.java +++ b/sdm/src/main/java/com/sap/cds/sdm/model/CreateDraftEntriesRequest.java @@ -17,7 +17,6 @@ public class CreateDraftEntriesRequest { private final String repositoryId; private final String folderId; private final Map customPropertyValues; - private final List sourceObjectIds; private CreateDraftEntriesRequest(Builder builder) { this.attachmentsMetadata = builder.attachmentsMetadata; @@ -29,7 +28,6 @@ private CreateDraftEntriesRequest(Builder builder) { this.repositoryId = builder.repositoryId; this.folderId = builder.folderId; this.customPropertyValues = builder.customPropertyValues; - this.sourceObjectIds = builder.sourceObjectIds; } // Getters @@ -69,10 +67,6 @@ public Map getCustomPropertyValues() { return customPropertyValues; } - public List getSourceObjectIds() { - return sourceObjectIds; - } - public static Builder builder() { return new Builder(); } @@ -87,7 +81,6 @@ public static class Builder { private String repositoryId; private String folderId; private Map customPropertyValues; - private List sourceObjectIds; public Builder attachmentsMetadata(List> attachmentsMetadata) { this.attachmentsMetadata = attachmentsMetadata; @@ -134,11 +127,6 @@ public Builder customPropertyValues(Map customPropertyValues) { return this; } - public Builder sourceObjectIds(List sourceObjectIds) { - this.sourceObjectIds = sourceObjectIds; - return this; - } - public CreateDraftEntriesRequest build() { return new CreateDraftEntriesRequest(this); } diff --git a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java index ed8dee87e..6dac45d51 100644 --- a/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java +++ b/sdm/src/main/java/com/sap/cds/sdm/service/handler/SDMCustomServiceHandler.java @@ -1,9 +1,7 @@ package com.sap.cds.sdm.service.handler; import com.sap.cds.Result; -import com.sap.cds.Row; import com.sap.cds.ql.Insert; -import com.sap.cds.ql.Select; import com.sap.cds.ql.Update; import com.sap.cds.reflect.CdsAssociationType; import com.sap.cds.reflect.CdsElement; @@ -195,7 +193,6 @@ public void copyAttachments(AttachmentCopyEventContext context) throws IOExcepti .repositoryId(repositoryId) .folderId(folderId) .customPropertyValues(null) - .sourceObjectIds(objectIds) .build(); // Pass the entity for type conversion @@ -1934,20 +1931,10 @@ private void createDraftEntries( String newObjectId = attachmentMetadata.get("cmis:objectId"); logger.debug("Processing draft entry for objectId: {}, fileName: {}", newObjectId, fileName); - SourceScanState scanState = - resolveSourceScanState(targetEntity, request.getSourceObjectIds(), i); - String resolvedStatus = scanState.status; - Instant resolvedScannedAt = scanState.scannedAt; - logger.debug( - "Resolved status={}, scannedAt={} for source attachment at index {}", - resolvedStatus, - resolvedScannedAt, - i); - updatedFields.put(OBJECT_ID_KEY, newObjectId); updatedFields.put("repositoryId", request.getRepositoryId()); updatedFields.put("folderId", request.getFolderId()); - updatedFields.put("status", resolvedStatus); + updatedFields.put("status", "Clean"); updatedFields.put("uploadStatus", SDMConstants.UPLOAD_STATUS_SUCCESS); updatedFields.put("mimeType", mimeType); updatedFields.put("type", cmisDocument.getType()); // Individual type for each attachment @@ -2018,8 +2005,8 @@ private void createDraftEntries( // Bypass handler chain via persistenceService to persist status=Clean and scannedAt. if (targetEntity != null) { Map scanFields = new HashMap<>(); - scanFields.put("status", resolvedStatus); - scanFields.put("scannedAt", resolvedScannedAt); + scanFields.put("status", "Clean"); + scanFields.put("scannedAt", Instant.now()); String draftEntityName = targetEntity.getQualifiedName() + "_drafts"; var scanUpdate = Update.entity(draftEntityName) @@ -2027,10 +2014,7 @@ private void createDraftEntries( .where(doc -> doc.get("objectId").eq(newObjectId)); persistenceService.run(scanUpdate); logger.debug( - "Set status={}, scannedAt={} for copied draft attachment: {}", - resolvedStatus, - resolvedScannedAt, - newObjectId); + "Set status=Clean, scannedAt=now for copied draft attachment: {}", newObjectId); } } else { logger.error("No suitable service found for entity: {}", request.getParentEntity()); @@ -2041,38 +2025,6 @@ private void createDraftEntries( logger.debug("Completed creating draft entries for copied attachments"); } - private SourceScanState resolveSourceScanState( - CdsEntity targetEntity, List sourceObjectIds, int index) { - if (targetEntity == null || sourceObjectIds == null || index >= sourceObjectIds.size()) { - return new SourceScanState("Clean", Instant.now()); - } - String sourceObjectId = sourceObjectIds.get(index); - Optional sourceRow = - persistenceService - .run( - Select.from(targetEntity) - .columns("status") - .where(doc -> doc.get("objectId").eq(sourceObjectId)) - .limit(1)) - .first(); - if (sourceRow.isEmpty()) { - return new SourceScanState("Clean", Instant.now()); - } - Object statusVal = sourceRow.get().get("status"); - String status = statusVal != null ? statusVal.toString() : "Clean"; - return new SourceScanState(status, Instant.now()); - } - - private static final class SourceScanState { - final String status; - final Instant scannedAt; - - SourceScanState(String status, Instant scannedAt) { - this.status = status; - this.scannedAt = scannedAt; - } - } - /** * Rolls back successfully moved attachments when database update fails. Moves attachments back to * their original source folder in parallel. Continues with remaining rollbacks even if individual From af92cf119cb1af014c0f17868d7c902872b97c9f Mon Sep 17 00:00:00 2001 From: Ankush Kumar Garg Date: Fri, 25 Sep 2026 17:46:26 +0530 Subject: [PATCH 10/10] Update SDMCustomServiceHandlerTest.java --- .../sdm/service/handler/SDMCustomServiceHandlerTest.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMCustomServiceHandlerTest.java b/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMCustomServiceHandlerTest.java index f451c7e07..d992c9a86 100644 --- a/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMCustomServiceHandlerTest.java +++ b/sdm/src/test/java/unit/com/sap/cds/sdm/service/handler/SDMCustomServiceHandlerTest.java @@ -416,12 +416,6 @@ void testCopyAttachments_MixedValidAndInvalidSecondaryProps_CopiesValidRejectsIn when(sdmService.copyAttachment(any(), any(SDMCredentials.class), anyBoolean(), any())) .thenReturn(attachmentData); - // Mock persistenceService.run for the source-status query in createDraftEntries - com.sap.cds.Result mockSelectResult = mock(com.sap.cds.Result.class); - when(mockSelectResult.first()).thenReturn(Optional.empty()); - when(persistenceService.run(any(com.sap.cds.ql.cqn.CqnSelect.class))) - .thenReturn(mockSelectResult); - // Act sdmCustomServiceHandler.copyAttachments(context);