This is an automated email from the ASF dual-hosted git repository.

pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 642f05e141 NIFI-14365 Filter collaboration by actual json value in 
GetBoxFileCollaborators
642f05e141 is described below

commit 642f05e14199d3e28fb214dab8f1e13d48f0bb15
Author: Alaksiej Ščarbaty <[email protected]>
AuthorDate: Thu Mar 13 13:27:07 2025 +0100

    NIFI-14365 Filter collaboration by actual json value in 
GetBoxFileCollaborators
    
    Signed-off-by: Pierre Villard <[email protected]>
    
    This closes #9801.
---
 .../processors/box/GetBoxFileCollaborators.java    |  16 ++-
 .../box/GetBoxFileCollaboratorsTest.java           | 116 +++++++++++++--------
 2 files changed, 89 insertions(+), 43 deletions(-)

diff --git 
a/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/src/main/java/org/apache/nifi/processors/box/GetBoxFileCollaborators.java
 
b/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/src/main/java/org/apache/nifi/processors/box/GetBoxFileCollaborators.java
index 25a8682a26..861173b978 100644
--- 
a/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/src/main/java/org/apache/nifi/processors/box/GetBoxFileCollaborators.java
+++ 
b/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/src/main/java/org/apache/nifi/processors/box/GetBoxFileCollaborators.java
@@ -267,7 +267,7 @@ public class GetBoxFileCollaborators extends 
AbstractProcessor {
             count++;
 
             final String status = collab.getStatus().toString().toLowerCase();
-            final String role = collab.getRole().toString().toLowerCase();
+            final String role = roleToJsonValue(collab.getRole());
 
             // Skip if not in allowed roles or statuses
             if ((allowedRoles != null && !allowedRoles.contains(role))
@@ -333,4 +333,18 @@ public class GetBoxFileCollaborators extends 
AbstractProcessor {
             attributes.put(key, String.join(",", values));
         }
     }
+
+    private static String roleToJsonValue(final BoxCollaboration.Role role) {
+        // BoxCollaboration.Role::toJSONString() is package-private, so we 
have to duplicate the mapping.
+        return switch (role) {
+            case EDITOR -> "editor";
+            case VIEWER -> "viewer";
+            case PREVIEWER -> "previewer";
+            case UPLOADER -> "uploader";
+            case PREVIEWER_UPLOADER -> "previewer uploader";
+            case VIEWER_UPLOADER -> "viewer uploader";
+            case CO_OWNER -> "co-owner";
+            case OWNER -> "owner";
+        };
+    }
 }
\ No newline at end of file
diff --git 
a/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/src/test/java/org/apache/nifi/processors/box/GetBoxFileCollaboratorsTest.java
 
b/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/src/test/java/org/apache/nifi/processors/box/GetBoxFileCollaboratorsTest.java
index b07e4e6af6..ee3e4464f4 100644
--- 
a/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/src/test/java/org/apache/nifi/processors/box/GetBoxFileCollaboratorsTest.java
+++ 
b/nifi-extension-bundles/nifi-box-bundle/nifi-box-processors/src/test/java/org/apache/nifi/processors/box/GetBoxFileCollaboratorsTest.java
@@ -36,8 +36,16 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import static com.box.sdk.BoxCollaboration.Role.CO_OWNER;
+import static com.box.sdk.BoxCollaboration.Role.EDITOR;
+import static com.box.sdk.BoxCollaboration.Role.PREVIEWER;
+import static com.box.sdk.BoxCollaboration.Role.VIEWER;
+import static com.box.sdk.BoxCollaboration.Role.VIEWER_UPLOADER;
+import static com.box.sdk.BoxCollaboration.Status.ACCEPTED;
+import static com.box.sdk.BoxCollaboration.Status.PENDING;
+import static com.box.sdk.BoxCollaborator.CollaboratorType.GROUP;
+import static com.box.sdk.BoxCollaborator.CollaboratorType.USER;
 import static org.mockito.Mockito.lenient;
-import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 @ExtendWith(MockitoExtension.class)
@@ -239,6 +247,37 @@ public class GetBoxFileCollaboratorsTest extends 
AbstractBoxFileTest {
         
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.viewer.users.logins",
 TEST_USER_EMAIL_3);
     }
 
+    @Test
+    void testGetCollaborationsForAllViewingRoles() {
+        testRunner.setProperty(GetBoxFileCollaborators.FILE_ID, TEST_FILE_ID);
+        testRunner.setProperty(GetBoxFileCollaborators.ROLES, 
"owner,co-owner,editor,viewer uploader,viewer");
+        testRunner.setProperty(GetBoxFileCollaborators.STATUSES, "accepted");
+
+        setupCollaborator(mockCollabInfo1, mockUserInfo1, USER, 
TEST_USER_ID_1, ACCEPTED, CO_OWNER);
+        setupCollaborator(mockCollabInfo2, mockUserInfo2, USER, 
TEST_USER_ID_2, ACCEPTED, EDITOR);
+        setupCollaborator(mockCollabInfo3, mockUserInfo3, USER, 
TEST_USER_ID_3, ACCEPTED, VIEWER);
+        setupCollaborator(mockCollabInfo4, mockGroupInfo1, GROUP, 
TEST_GROUP_ID_1, ACCEPTED, VIEWER_UPLOADER);
+        setupCollaborator(mockCollabInfo5, mockGroupInfo2, GROUP, 
TEST_GROUP_ID_2, ACCEPTED, PREVIEWER);
+        setupFileCollaborations();
+
+        testRunner.enqueue(new MockFlowFile(0));
+        testRunner.run();
+
+        
testRunner.assertAllFlowFilesTransferred(GetBoxFileCollaborators.REL_SUCCESS, 
1);
+        final List<MockFlowFile> flowFiles = 
testRunner.getFlowFilesForRelationship(GetBoxFileCollaborators.REL_SUCCESS);
+        final MockFlowFile flowFilesFirst = flowFiles.getFirst();
+
+        flowFilesFirst.assertAttributeEquals("box.collaborations.count", "5");
+        
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.co-owner.users.ids",
 TEST_USER_ID_1);
+        
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.co-owner.users.logins",
 TEST_USER_EMAIL_1);
+        
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.editor.users.ids",
 TEST_USER_ID_2);
+        
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.editor.users.logins",
 TEST_USER_EMAIL_2);
+        
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.viewer.users.ids",
 TEST_USER_ID_3);
+        
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.viewer.users.logins",
 TEST_USER_EMAIL_3);
+        
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.viewer 
uploader.groups.ids", TEST_GROUP_ID_1);
+        
flowFilesFirst.assertAttributeEquals("box.collaborations.accepted.viewer 
uploader.groups.emails", TEST_GROUP_EMAIL_1);
+    }
+
     @Test
     void testBoxApiExceptionHandling() {
         testRunner.setProperty(GetBoxFileCollaborators.FILE_ID, TEST_FILE_ID);
@@ -259,66 +298,53 @@ public class GetBoxFileCollaboratorsTest extends 
AbstractBoxFileTest {
     }
 
     private void setupMockCollaborations() {
-        setupCollaborator(mockCollabInfo1, mockUserInfo1, 
BoxCollaborator.CollaboratorType.USER, TEST_USER_ID_1, 
BoxCollaboration.Status.ACCEPTED);
-        setupCollaborator(mockCollabInfo2, mockUserInfo2, 
BoxCollaborator.CollaboratorType.USER, TEST_USER_ID_2, 
BoxCollaboration.Status.ACCEPTED);
-        setupCollaborator(mockCollabInfo3, mockGroupInfo1, 
BoxCollaborator.CollaboratorType.GROUP, TEST_GROUP_ID_1, 
BoxCollaboration.Status.ACCEPTED);
-        setupCollaborator(mockCollabInfo4, mockUserInfo3, 
BoxCollaborator.CollaboratorType.USER, TEST_USER_ID_3, 
BoxCollaboration.Status.PENDING);
-        setupCollaborator(mockCollabInfo5, mockGroupInfo2, 
BoxCollaborator.CollaboratorType.GROUP, TEST_GROUP_ID_2, 
BoxCollaboration.Status.PENDING);
-
-        when(mockCollabIterable.iterator()).thenReturn(
-                List.of(mockCollabInfo1, mockCollabInfo2, mockCollabInfo3, 
mockCollabInfo4, mockCollabInfo5).iterator()
-        );
+        setupCollaborator(mockCollabInfo1, mockUserInfo1, USER, 
TEST_USER_ID_1, ACCEPTED);
+        setupCollaborator(mockCollabInfo2, mockUserInfo2, USER, 
TEST_USER_ID_2, ACCEPTED);
+        setupCollaborator(mockCollabInfo3, mockGroupInfo1, GROUP, 
TEST_GROUP_ID_1, ACCEPTED);
+        setupCollaborator(mockCollabInfo4, mockUserInfo3, USER, 
TEST_USER_ID_3, PENDING);
+        setupCollaborator(mockCollabInfo5, mockGroupInfo2, GROUP, 
TEST_GROUP_ID_2, PENDING);
 
-        
when(mockBoxFile.getAllFileCollaborations()).thenReturn(mockCollabIterable);
+        setupFileCollaborations();
     }
 
     private void setupMockCollaborationsWithMultipleRoles() {
-        BoxCollaboration.Role editorRole = mock(BoxCollaboration.Role.class);
-        lenient().when(editorRole.toString()).thenReturn("editor");
-        BoxCollaboration.Role viewerRole = mock(BoxCollaboration.Role.class);
-        lenient().when(viewerRole.toString()).thenReturn("viewer");
-        BoxCollaboration.Status acceptedStatus = 
BoxCollaboration.Status.ACCEPTED;
-        BoxCollaboration.Status pendingStatus = 
BoxCollaboration.Status.PENDING;
         // Editor role collaborators
         
lenient().when(mockCollabInfo1.getAccessibleBy()).thenReturn(mockUserInfo1);
-        
lenient().when(mockUserInfo1.getType()).thenReturn(BoxCollaborator.CollaboratorType.USER);
+        lenient().when(mockUserInfo1.getType()).thenReturn(USER);
         lenient().when(mockUserInfo1.getID()).thenReturn(TEST_USER_ID_1);
-        lenient().when(mockCollabInfo1.getStatus()).thenReturn(acceptedStatus);
-        lenient().when(mockCollabInfo1.getRole()).thenReturn(editorRole);
+        lenient().when(mockCollabInfo1.getStatus()).thenReturn(ACCEPTED);
+        lenient().when(mockCollabInfo1.getRole()).thenReturn(EDITOR);
         lenient().when(mockUserInfo1.getLogin()).thenReturn(TEST_USER_EMAIL_1);
         // Editor role collaborator
         
lenient().when(mockCollabInfo2.getAccessibleBy()).thenReturn(mockUserInfo2);
-        
lenient().when(mockUserInfo2.getType()).thenReturn(BoxCollaborator.CollaboratorType.USER);
+        lenient().when(mockUserInfo2.getType()).thenReturn(USER);
         lenient().when(mockUserInfo2.getID()).thenReturn(TEST_USER_ID_2);
-        lenient().when(mockCollabInfo2.getStatus()).thenReturn(acceptedStatus);
-        lenient().when(mockCollabInfo2.getRole()).thenReturn(editorRole);
+        lenient().when(mockCollabInfo2.getStatus()).thenReturn(ACCEPTED);
+        lenient().when(mockCollabInfo2.getRole()).thenReturn(EDITOR);
         lenient().when(mockUserInfo2.getLogin()).thenReturn(TEST_USER_EMAIL_2);
         // Editor role collaborator
         
lenient().when(mockCollabInfo3.getAccessibleBy()).thenReturn(mockGroupInfo1);
-        
lenient().when(mockGroupInfo1.getType()).thenReturn(BoxCollaborator.CollaboratorType.GROUP);
+        lenient().when(mockGroupInfo1.getType()).thenReturn(GROUP);
         lenient().when(mockGroupInfo1.getID()).thenReturn(TEST_GROUP_ID_1);
-        lenient().when(mockCollabInfo3.getStatus()).thenReturn(acceptedStatus);
-        lenient().when(mockCollabInfo3.getRole()).thenReturn(editorRole);
+        lenient().when(mockCollabInfo3.getStatus()).thenReturn(ACCEPTED);
+        lenient().when(mockCollabInfo3.getRole()).thenReturn(EDITOR);
         
lenient().when(mockGroupInfo1.getLogin()).thenReturn(TEST_GROUP_EMAIL_1);
         // Viewer role collaborator
         
lenient().when(mockCollabInfo4.getAccessibleBy()).thenReturn(mockUserInfo3);
-        
lenient().when(mockUserInfo3.getType()).thenReturn(BoxCollaborator.CollaboratorType.USER);
+        lenient().when(mockUserInfo3.getType()).thenReturn(USER);
         lenient().when(mockUserInfo3.getID()).thenReturn(TEST_USER_ID_3);
-        lenient().when(mockCollabInfo4.getStatus()).thenReturn(acceptedStatus);
-        lenient().when(mockCollabInfo4.getRole()).thenReturn(viewerRole);
+        lenient().when(mockCollabInfo4.getStatus()).thenReturn(ACCEPTED);
+        lenient().when(mockCollabInfo4.getRole()).thenReturn(VIEWER);
         lenient().when(mockUserInfo3.getLogin()).thenReturn(TEST_USER_EMAIL_3);
         // Pending collaborators - should be filtered out by status filter
         
lenient().when(mockCollabInfo5.getAccessibleBy()).thenReturn(mockGroupInfo2);
-        
lenient().when(mockGroupInfo2.getType()).thenReturn(BoxCollaborator.CollaboratorType.GROUP);
+        lenient().when(mockGroupInfo2.getType()).thenReturn(GROUP);
         lenient().when(mockGroupInfo2.getID()).thenReturn(TEST_GROUP_ID_2);
-        lenient().when(mockCollabInfo5.getStatus()).thenReturn(pendingStatus);
-        lenient().when(mockCollabInfo5.getRole()).thenReturn(editorRole);
+        lenient().when(mockCollabInfo5.getStatus()).thenReturn(PENDING);
+        lenient().when(mockCollabInfo5.getRole()).thenReturn(EDITOR);
         
lenient().when(mockGroupInfo2.getLogin()).thenReturn(TEST_GROUP_EMAIL_2);
-        lenient().when(mockCollabIterable.iterator()).thenReturn(
-                List.of(mockCollabInfo1, mockCollabInfo2, mockCollabInfo3, 
mockCollabInfo4, mockCollabInfo5).iterator()
-        );
 
-        
lenient().when(mockBoxFile.getAllFileCollaborations()).thenReturn(mockCollabIterable);
+        setupFileCollaborations();
     }
 
     private void setupCollaborator(final BoxCollaboration.Info collabInfo,
@@ -326,7 +352,7 @@ public class GetBoxFileCollaboratorsTest extends 
AbstractBoxFileTest {
                                    final BoxCollaborator.CollaboratorType type,
                                    final String id,
                                    final BoxCollaboration.Status status) {
-        setupCollaborator(collabInfo, collaboratorInfo, type, id, status, 
BoxCollaboration.Role.EDITOR);
+        setupCollaborator(collabInfo, collaboratorInfo, type, id, status, 
EDITOR);
     }
 
     private void setupCollaborator(final BoxCollaboration.Info collabInfo,
@@ -335,13 +361,11 @@ public class GetBoxFileCollaboratorsTest extends 
AbstractBoxFileTest {
                                    final String id,
                                    final BoxCollaboration.Status status,
                                    final BoxCollaboration.Role role) {
-        BoxCollaboration.Role editorRole = mock(BoxCollaboration.Role.class);
-        lenient().when(editorRole.toString()).thenReturn("editor");
         
lenient().when(collabInfo.getAccessibleBy()).thenReturn(collaboratorInfo);
         lenient().when(collaboratorInfo.getType()).thenReturn(type);
         lenient().when(collaboratorInfo.getID()).thenReturn(id);
         lenient().when(collabInfo.getStatus()).thenReturn(status);
-        lenient().when(collabInfo.getRole()).thenReturn(editorRole);
+        lenient().when(collabInfo.getRole()).thenReturn(role);
 
         final Map<String, String> userEmails = Map.of(
                 TEST_USER_ID_1, TEST_USER_EMAIL_1,
@@ -354,12 +378,20 @@ public class GetBoxFileCollaboratorsTest extends 
AbstractBoxFileTest {
                 TEST_GROUP_ID_2, TEST_GROUP_EMAIL_2
         );
         String email = null;
-        if (type.equals(BoxCollaborator.CollaboratorType.USER)) {
+        if (type.equals(USER)) {
             email = userEmails.getOrDefault(id, null);
-        } else if (type.equals(BoxCollaborator.CollaboratorType.GROUP)) {
+        } else if (type.equals(GROUP)) {
             email = groupEmails.getOrDefault(id, null);
         }
 
         lenient().when(collaboratorInfo.getLogin()).thenReturn(email);
     }
+
+    private void setupFileCollaborations() {
+        lenient().when(mockCollabIterable.iterator()).thenReturn(
+                List.of(mockCollabInfo1, mockCollabInfo2, mockCollabInfo3, 
mockCollabInfo4, mockCollabInfo5).iterator()
+        );
+
+        
lenient().when(mockBoxFile.getAllFileCollaborations()).thenReturn(mockCollabIterable);
+    }
 }
\ No newline at end of file

Reply via email to