From 08b3c2d7bdc147f98f154f9dfb7ab9b6c9fb4b38 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Mon, 06 May 2013 13:02:44 +0000
Subject: [PATCH] CREST-3 - Add patch support
---
opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java | 64 +++++++++++++++++++++----------
1 files changed, 43 insertions(+), 21 deletions(-)
diff --git a/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java b/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java
index 0efe249..8802713 100644
--- a/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java
+++ b/opendj3/opendj-rest2ldap/src/test/java/org/forgerock/opendj/rest2ldap/BasicRequestsTest.java
@@ -19,9 +19,11 @@
import static org.fest.assertions.Assertions.assertThat;
import static org.fest.assertions.Fail.fail;
import static org.forgerock.json.fluent.JsonValue.field;
+import static org.forgerock.json.fluent.JsonValue.json;
import static org.forgerock.json.fluent.JsonValue.object;
import static org.forgerock.json.resource.PatchOperation.add;
import static org.forgerock.json.resource.PatchOperation.remove;
+import static org.forgerock.json.resource.PatchOperation.replace;
import static org.forgerock.json.resource.Requests.newDeleteRequest;
import static org.forgerock.json.resource.Requests.newPatchRequest;
import static org.forgerock.json.resource.Requests.newReadRequest;
@@ -110,13 +112,30 @@
final RequestHandler handler = newCollection(builder().build());
final Connection connection = newInternalConnection(handler);
final Resource resource1 =
- connection.patch(ctx(), newPatchRequest("/test1", add("displayName", "changed")));
+ connection.patch(ctx(), newPatchRequest("/test1", add("/name/displayName",
+ "changed")));
checkResourcesAreEqual(resource1, getTestUser1Updated(12345));
final Resource resource2 = connection.read(ctx(), newReadRequest("/test1"));
checkResourcesAreEqual(resource2, getTestUser1Updated(12345));
}
@Test
+ public void testPatchReplaceWholeObject() throws Exception {
+ final RequestHandler handler = newCollection(builder().build());
+ final Connection connection = newInternalConnection(handler);
+ final JsonValue expected =
+ json(object(field("schemas", asList("urn:scim:schemas:core:1.0")), field("_id",
+ "test1"), field("_rev", "12345"), field("name", object(field("displayName",
+ "Humpty"), field("surname", "Dumpty")))));
+ final Resource resource1 =
+ connection.patch(ctx(), newPatchRequest("/test1", replace("/name", JsonValue
+ .object(field("displayName", "Humpty"), field("surname", "Dumpty")))));
+ checkResourcesAreEqual(resource1, expected);
+ final Resource resource2 = connection.read(ctx(), newReadRequest("/test1"));
+ checkResourcesAreEqual(resource2, expected);
+ }
+
+ @Test
public void testPatchAddOptionalAttribute() throws Exception {
final RequestHandler handler = newCollection(builder().build());
final Connection connection = newInternalConnection(handler);
@@ -154,7 +173,7 @@
public void testPatchMissingRequiredAttribute() throws Exception {
final RequestHandler handler = newCollection(builder().build());
final Connection connection = newInternalConnection(handler);
- connection.patch(ctx(), newPatchRequest("/test1", remove("/surname")));
+ connection.patch(ctx(), newPatchRequest("/test1", remove("/name/surname")));
}
@Test
@@ -178,8 +197,8 @@
final RequestHandler handler = newCollection(builder().build());
final Connection connection = newInternalConnection(handler);
final Resource resource1 =
- connection.patch(ctx(), newPatchRequest("/test1", add("displayName", "changed"))
- .setRevision("12345"));
+ connection.patch(ctx(), newPatchRequest("/test1",
+ add("/name/displayName", "changed")).setRevision("12345"));
checkResourcesAreEqual(resource1, getTestUser1Updated(12345));
final Resource resource2 = connection.read(ctx(), newReadRequest("/test1"));
checkResourcesAreEqual(resource2, getTestUser1Updated(12345));
@@ -189,7 +208,7 @@
public void testPatchMVCCNoMatch() throws Exception {
final RequestHandler handler = newCollection(builder().build());
final Connection connection = newInternalConnection(handler);
- connection.patch(ctx(), newPatchRequest("/test1", add("displayName", "changed"))
+ connection.patch(ctx(), newPatchRequest("/test1", add("/name/displayName", "changed"))
.setRevision("12346"));
}
@@ -197,7 +216,7 @@
public void testPatchNotFound() throws Exception {
final RequestHandler handler = newCollection(builder().build());
final Connection connection = newInternalConnection(handler);
- connection.patch(ctx(), newPatchRequest("/missing", add("displayName", "changed")));
+ connection.patch(ctx(), newPatchRequest("/missing", add("/name/displayName", "changed")));
}
@Test(expectedExceptions = BadRequestException.class)
@@ -212,8 +231,8 @@
public void testPatchSingleValuedAttributeWithMultipleValues() throws Exception {
final RequestHandler handler = newCollection(builder().build());
final Connection connection = newInternalConnection(handler);
- connection.patch(ctx(),
- newPatchRequest("/test1", add("/surname", asList("black", "white"))));
+ connection.patch(ctx(), newPatchRequest("/test1", add("/name/surname", asList("black",
+ "white"))));
}
@Test(expectedExceptions = BadRequestException.class)
@@ -252,11 +271,11 @@
final RequestHandler handler = newCollection(builder().build());
final Resource resource =
newInternalConnection(handler).read(ctx(),
- newReadRequest("/test1").addField("surname"));
+ newReadRequest("/test1").addField("/name/surname"));
assertThat(resource.getId()).isEqualTo("test1");
assertThat(resource.getRevision()).isEqualTo("12345");
assertThat(resource.getContent().get("_id").asString()).isNull();
- assertThat(resource.getContent().get("displayName").asString()).isNull();
+ assertThat(resource.getContent().get("name").asMap()).isNull();
assertThat(resource.getContent().get("surname").asString()).isEqualTo("user 1");
assertThat(resource.getContent().get("_rev").asString()).isNull();
}
@@ -267,12 +286,12 @@
final RequestHandler handler = newCollection(builder().build());
final Resource resource =
newInternalConnection(handler).read(ctx(),
- newReadRequest("/test1").addField("SURNAME"));
+ newReadRequest("/test1").addField("/name/SURNAME"));
assertThat(resource.getId()).isEqualTo("test1");
assertThat(resource.getRevision()).isEqualTo("12345");
assertThat(resource.getContent().get("_id").asString()).isNull();
- assertThat(resource.getContent().get("displayName").asString()).isNull();
- assertThat(resource.getContent().get("surname").asString()).isEqualTo("user 1");
+ assertThat(resource.getContent().get("/name/displayName").asString()).isNull();
+ assertThat(resource.getContent().get("/name/surname").asString()).isEqualTo("user 1");
assertThat(resource.getContent().get("_rev").asString()).isNull();
}
@@ -327,7 +346,7 @@
final RequestHandler handler = newCollection(builder().build());
final Connection connection = newInternalConnection(handler);
final JsonValue newContent = getTestUser1Updated(12345);
- newContent.remove("surname");
+ newContent.get("name").remove("surname");
connection.update(ctx(), newUpdateRequest("/test1", newContent));
}
@@ -408,9 +427,12 @@
.attribute(
"_id",
simple("uid").isSingleValued().isRequired().writability(
- WritabilityPolicy.CREATE_ONLY)).attribute("displayName",
- simple("cn").isSingleValued().isRequired()).attribute("surname",
- simple("sn").isSingleValued().isRequired()).attribute(
+ WritabilityPolicy.CREATE_ONLY)).attribute(
+ "name",
+ object().attribute("displayName",
+ simple("cn").isSingleValued().isRequired()).attribute(
+ "surname", simple("sn").isSingleValued().isRequired()))
+ .attribute(
"_rev",
simple("etag").isSingleValued().isRequired().writability(
WritabilityPolicy.READ_ONLY)).attribute("description",
@@ -459,13 +481,13 @@
private JsonValue getTestUser1(final int rev) {
return content(object(field("schemas", asList("urn:scim:schemas:core:1.0")), field("_id",
- "test1"), field("_rev", String.valueOf(rev)), field("displayName", "test user 1"),
- field("surname", "user 1")));
+ "test1"), field("_rev", String.valueOf(rev)), field("name", object(field(
+ "displayName", "test user 1"), field("surname", "user 1")))));
}
private JsonValue getTestUser1Updated(final int rev) {
return content(object(field("schemas", asList("urn:scim:schemas:core:1.0")), field("_id",
- "test1"), field("_rev", String.valueOf(rev)), field("displayName", "changed"),
- field("surname", "user 1")));
+ "test1"), field("_rev", String.valueOf(rev)), field("name", object(field(
+ "displayName", "changed"), field("surname", "user 1")))));
}
}
--
Gitblit v1.10.0