You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by bd...@apache.org on 2023/12/16 06:24:58 UTC
(directory-scimple) 01/03: Handle Azure style Group member remove operations
This is an automated email from the ASF dual-hosted git repository.
bdemers pushed a commit to branch handle-azure-group-member-removes
in repository https://gitbox.apache.org/repos/asf/directory-scimple.git
commit 2219b69a7ead4be83947a4b4e19f2bc5de9c256b
Author: Kyle Thorpe <kj...@gmail.com>
AuthorDate: Tue Dec 12 14:36:10 2023 +0000
Handle Azure style Group member remove operations
---
.../scim/core/repository/PatchHandlerTest.java | 55 ++++++++++++++++++++++
1 file changed, 55 insertions(+)
diff --git a/scim-core/src/test/java/org/apache/directory/scim/core/repository/PatchHandlerTest.java b/scim-core/src/test/java/org/apache/directory/scim/core/repository/PatchHandlerTest.java
index 9dcafeea..a145b8cc 100644
--- a/scim-core/src/test/java/org/apache/directory/scim/core/repository/PatchHandlerTest.java
+++ b/scim-core/src/test/java/org/apache/directory/scim/core/repository/PatchHandlerTest.java
@@ -31,7 +31,9 @@ import org.apache.directory.scim.spec.resources.Address;
import org.apache.directory.scim.spec.resources.Email;
import org.apache.directory.scim.spec.resources.Name;
import org.apache.directory.scim.spec.resources.PhoneNumber;
+import org.apache.directory.scim.spec.resources.ScimGroup;
import org.apache.directory.scim.spec.resources.ScimUser;
+import org.apache.directory.scim.spec.schema.ResourceReference;
import org.junit.jupiter.api.Test;
import static org.apache.directory.scim.spec.patch.PatchOperation.Type.*;
@@ -465,6 +467,39 @@ public class PatchHandlerTest {
));
}
+ @Test
+ public void addItemToCollection() throws FilterParseException {
+ PatchOperation op = new PatchOperation();
+ op.setOperation(ADD);
+ op.setPath(PatchOperationPath.fromString("members"));
+ op.setValue(List.of(
+ Map.of(
+ "value", "9876",
+ "display", "testUser2",
+ "type", "User")
+ ));
+
+ ScimGroup updatedGroup = patchHandler.apply(group(), List.of(op));
+ assertThat(updatedGroup.getMembers().size()).isEqualTo(3);
+ }
+
+ /**
+ * This test covers Azure-style remove member operations, where a value is
+ * specified in the operation body, rather than in the path.
+ * For example: { "op": "remove", "path": "members", "value": [ { "value": "1234" } ] }
+ */
+ @Test
+ public void removeItemFromCollection() throws FilterParseException {
+ PatchOperation op = new PatchOperation();
+ op.setOperation(REMOVE);
+ op.setPath(PatchOperationPath.fromString("members"));
+ op.setValue(List.of(Map.of("value", "1234")));
+
+ ScimGroup updatedGroup = patchHandler.apply(group(), List.of(op));
+ assertThat(updatedGroup.getMembers()).isNotNull();
+ assertThat(updatedGroup.getMembers().size()).isEqualTo(1);
+ }
+
@Test
public void addAttribute() throws FilterParseException {
PatchOperation op = new PatchOperation();
@@ -629,4 +664,24 @@ public class PatchHandlerTest {
throw new IllegalStateException("Invalid phone number", e);
}
}
+
+ private static ScimGroup group() {
+ ResourceReference member1 = userRef("1234");
+ ResourceReference member2 = userRef("5678");
+
+ return new ScimGroup()
+ .setDisplayName("Test Group")
+ .setExternalId("test-group-external-id")
+ .setMembers(List.of(member1, member2));
+ }
+
+ private static ResourceReference userRef(String id) {
+ ResourceReference member = new ResourceReference();
+ member.setType(ResourceReference.ReferenceType.USER);
+ member.setValue(id);
+ member.setRef("https://example.com/Users/" + id);
+ member.setDisplay("Test User" + id);
+
+ return member;
+ }
}