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