| | |
| | | * information: "Portions copyright [year] [name of copyright owner]". |
| | | * |
| | | * Copyright 2013-2016 ForgeRock AS. |
| | | * Portions Copyright 2017 Rosie Applications, Inc. |
| | | */ |
| | | package org.forgerock.opendj.rest2ldap; |
| | | |
| | |
| | | public void testQueryAll() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final List<ResourceResponse> resources = new LinkedList<>(); |
| | | final QueryResponse result = connection.query( |
| | | newAuthConnectionContext(), newQueryRequest("").setQueryFilter(NO_FILTER), resources); |
| | | final QueryResponse result = |
| | | connection.query( |
| | | newAuthConnectionContext(), |
| | | newQueryRequest("").setQueryFilter(NO_FILTER), |
| | | resources); |
| | | |
| | | assertThat(resources).hasSize(5); |
| | | assertThat(result.getPagedResultsCookie()).isNull(); |
| | | assertThat(result.getTotalPagedResults()).isEqualTo(-1); |
| | |
| | | final List<ResourceResponse> resources = new LinkedList<>(); |
| | | final QueryResponse result = connection.query(newAuthConnectionContext(), |
| | | newQueryRequest("").setQueryFilter(QueryFilter.<JsonPointer> alwaysFalse()), resources); |
| | | |
| | | assertThat(resources).hasSize(0); |
| | | assertThat(result.getPagedResultsCookie()).isNull(); |
| | | assertThat(result.getTotalPagedResults()).isEqualTo(-1); |
| | |
| | | final List<ResourceResponse> resources = new ArrayList<>(); |
| | | |
| | | // Read first page. |
| | | QueryResponse result = connection.query( |
| | | newAuthConnectionContext(), newQueryRequest("").setQueryFilter(NO_FILTER).setPageSize(2), resources); |
| | | QueryResponse result = |
| | | connection.query( |
| | | newAuthConnectionContext(), |
| | | newQueryRequest("").setQueryFilter(NO_FILTER).setPageSize(2), resources); |
| | | |
| | | assertThat(result.getPagedResultsCookie()).isNotNull(); |
| | | assertThat(resources).hasSize(2); |
| | | assertThat(resources.get(0).getId()).isEqualTo("test1"); |
| | | assertThat(resources.get(1).getId()).isEqualTo("test2"); |
| | | |
| | | String cookie = result.getPagedResultsCookie(); |
| | | |
| | | resources.clear(); |
| | | |
| | | // Read second page. |
| | | result = connection.query(newAuthConnectionContext(), |
| | | newQueryRequest("").setQueryFilter(NO_FILTER).setPageSize(2).setPagedResultsCookie(cookie), resources); |
| | | result = |
| | | connection.query( |
| | | newAuthConnectionContext(), |
| | | newQueryRequest("") |
| | | .setQueryFilter(NO_FILTER) |
| | | .setPageSize(2) |
| | | .setPagedResultsCookie(cookie), |
| | | resources); |
| | | |
| | | assertThat(result.getPagedResultsCookie()).isNotNull(); |
| | | assertThat(resources).hasSize(2); |
| | | assertThat(resources.get(0).getId()).isEqualTo("test3"); |
| | | assertThat(resources.get(1).getId()).isEqualTo("test4"); |
| | | |
| | | cookie = result.getPagedResultsCookie(); |
| | | |
| | | resources.clear(); |
| | | |
| | | // Read third page. |
| | | result = connection.query(newAuthConnectionContext(), |
| | | newQueryRequest("").setQueryFilter(NO_FILTER).setPageSize(2).setPagedResultsCookie(cookie), resources); |
| | | result = |
| | | connection.query( |
| | | newAuthConnectionContext(), |
| | | newQueryRequest("") |
| | | .setQueryFilter(NO_FILTER) |
| | | .setPageSize(2) |
| | | .setPagedResultsCookie(cookie), |
| | | resources); |
| | | |
| | | assertThat(result.getPagedResultsCookie()).isNull(); |
| | | assertThat(resources).hasSize(1); |
| | | assertThat(resources.get(0).getId()).isEqualTo("test5"); |
| | |
| | | public void testQueryPageResultsIndexed() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final List<ResourceResponse> resources = new ArrayList<>(); |
| | | QueryResponse result = connection.query(newAuthConnectionContext(), |
| | | newQueryRequest("").setQueryFilter(NO_FILTER).setPageSize(2).setPagedResultsOffset(1), resources); |
| | | |
| | | QueryResponse result = |
| | | connection.query( |
| | | newAuthConnectionContext(), |
| | | newQueryRequest("") |
| | | .setQueryFilter(NO_FILTER) |
| | | .setPageSize(2) |
| | | .setPagedResultsOffset(1), |
| | | resources); |
| | | |
| | | assertThat(result.getPagedResultsCookie()).isNotNull(); |
| | | assertThat(resources).hasSize(2); |
| | | assertThat(resources.get(0).getId()).isEqualTo("test3"); |
| | |
| | | final Context context = newAuthConnectionContext(); |
| | | final Connection connection = newConnection(); |
| | | final ResourceResponse resource = connection.delete(context, newDeleteRequest("/test1")); |
| | | |
| | | checkResourcesAreEqual(resource, getTestUser1(12345)); |
| | | connection.read(context, newReadRequest("/test1")); |
| | | } |
| | |
| | | public void testDeleteMVCCMatch() throws Exception { |
| | | final Context context = newAuthConnectionContext(); |
| | | final Connection connection = newConnection(); |
| | | final ResourceResponse resource = connection.delete(context, newDeleteRequest("/test1").setRevision("12345")); |
| | | final ResourceResponse resource = |
| | | connection.delete(context, newDeleteRequest("/test1").setRevision("12345")); |
| | | |
| | | checkResourcesAreEqual(resource, getTestUser1(12345)); |
| | | connection.read(context, newReadRequest("/test1")); |
| | | } |
| | |
| | | public void testDeleteMVCCNoMatch() throws Exception { |
| | | final Context context = newAuthConnectionContext(); |
| | | final Connection connection = newConnection(); |
| | | |
| | | connection.delete(context, newDeleteRequest("/test1").setRevision("12346")); |
| | | } |
| | | |
| | |
| | | public void testDeleteNotFound() throws Exception { |
| | | final Context context = newAuthConnectionContext(); |
| | | final Connection connection = newConnection(); |
| | | |
| | | connection.delete(context, newDeleteRequest("/missing")); |
| | | } |
| | | |
| | |
| | | final ResourceResponse resource1 = connection.patch(context, |
| | | newPatchRequest("/test1", add("/name/displayName", "changed"))); |
| | | checkResourcesAreEqual(resource1, getTestUser1Updated(12345)); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, getTestUser1Updated(12345)); |
| | | } |
| | |
| | | final Context context = newAuthConnectionContext(requests); |
| | | final Connection connection = newConnection(); |
| | | final ResourceResponse resource1 = connection.patch(context, newPatchRequest("/test1")); |
| | | |
| | | checkResourcesAreEqual(resource1, getTestUser1(12345)); |
| | | |
| | | /* |
| | |
| | | final Context context = newAuthConnectionContext(); |
| | | final Connection connection = newConnection(); |
| | | final JsonValue newContent = getTestUser1(12345); |
| | | |
| | | newContent.put("description", asList("one", "two")); |
| | | |
| | | final ResourceResponse resource1 = |
| | | connection.patch(context, |
| | | newPatchRequest("/test1", add("/description", asList("one", "two")))); |
| | | newPatchRequest( |
| | | "/test1", |
| | | add("/description", asList("one", "two")))); |
| | | checkResourcesAreEqual(resource1, newContent); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, newContent); |
| | | } |
| | |
| | | final Context context = newAuthConnectionContext(); |
| | | final Connection connection = newConnection(); |
| | | final JsonValue newContent = getTestUser1(12345); |
| | | |
| | | newContent.put("description", asList("one", "two")); |
| | | final ResourceResponse resource1 = connection.patch( |
| | | context, newPatchRequest("/test1", add("/description/-", "one"), add("/description/-", "two"))); |
| | | |
| | | final ResourceResponse resource1 = |
| | | connection.patch( |
| | | context, |
| | | newPatchRequest("/test1", add("/description/-", "one"), |
| | | add("/description/-", "two"))); |
| | | checkResourcesAreEqual(resource1, newContent); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, newContent); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchConstantAttribute() throws Exception { |
| | | newConnection().patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/schemas", asList("junk")))); |
| | | newConnection().patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/schemas", asList("junk")))); |
| | | } |
| | | |
| | | @Test |
| | | public void testPatchDeleteOptionalAttribute() throws Exception { |
| | | final Context context = newAuthConnectionContext(); |
| | | final Connection connection = newConnection(); |
| | | |
| | | connection.patch(context, newPatchRequest("/test1", add("/description", asList("one", "two")))); |
| | | |
| | | final ResourceResponse resource1 = connection.patch(context, newPatchRequest("/test1", remove("/description"))); |
| | | checkResourcesAreEqual(resource1, getTestUser1(12345)); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, getTestUser1(12345)); |
| | | } |
| | |
| | | final Context context = newAuthConnectionContext(); |
| | | final Connection connection = newConnection(); |
| | | final JsonValue newContent = getTestUser1(12345); |
| | | |
| | | newContent.put("singleNumber", 100); |
| | | newContent.put("multiNumber", asList(200, 300)); |
| | | |
| | | final ResourceResponse resource1 = connection.patch(context, newPatchRequest("/test1", |
| | | final ResourceResponse resource1 = |
| | | connection.patch( |
| | | context, |
| | | newPatchRequest( |
| | | "/test1", |
| | | add("/singleNumber", 0), |
| | | add("/multiNumber", asList(100, 200)), |
| | | increment("/singleNumber", 100), |
| | | increment("/multiNumber", 100))); |
| | | |
| | | checkResourcesAreEqual(resource1, newContent); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, newContent); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchMissingRequiredAttribute() throws Exception { |
| | | newConnection().patch(newAuthConnectionContext(), newPatchRequest("/test1", remove("/name/surname"))); |
| | | newConnection().patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", remove("/name/surname"))); |
| | | } |
| | | |
| | | @Test |
| | | public void testPatchModifyOptionalAttribute() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final Context context = newAuthConnectionContext(); |
| | | connection.patch(context, newPatchRequest("/test1", add("/description", asList("one", "two")))); |
| | | |
| | | connection.patch( |
| | | context, |
| | | newPatchRequest("/test1", add("/description", asList("one", "two")))); |
| | | |
| | | final ResourceResponse resource1 = |
| | | connection.patch(context, newPatchRequest("/test1", add("/description", asList("three")))); |
| | | connection.patch( |
| | | context, |
| | | newPatchRequest("/test1", add("/description", asList("three")))); |
| | | |
| | | final JsonValue newContent = getTestUser1(12345); |
| | | |
| | | newContent.put("description", asList("one", "two", "three")); |
| | | checkResourcesAreEqual(resource1, newContent); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, newContent); |
| | | } |
| | |
| | | @Test(expectedExceptions = NotSupportedException.class) |
| | | public void testPatchMultiValuedAttributeIndexAppend() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/description/0", "junk"))); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/description/0", "junk"))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchMultiValuedAttributeIndexAppendWithList() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/description/-", |
| | | asList("one", "two")))); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/description/-", asList("one", "two")))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchMultiValuedAttributeWithSingleValue() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/description", "one"))); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/description", "one"))); |
| | | } |
| | | |
| | | @Test |
| | | public void testPatchMVCCMatch() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final Context context = newAuthConnectionContext(); |
| | | final ResourceResponse resource1 = connection.patch( |
| | | context, newPatchRequest("/test1", add("/name/displayName", "changed")).setRevision("12345")); |
| | | final ResourceResponse resource1 = |
| | | connection.patch( |
| | | context, |
| | | newPatchRequest( |
| | | "/test1", add("/name/displayName", "changed")).setRevision("12345")); |
| | | |
| | | checkResourcesAreEqual(resource1, getTestUser1Updated(12345)); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, getTestUser1Updated(12345)); |
| | | } |
| | |
| | | @Test(expectedExceptions = PreconditionFailedException.class) |
| | | public void testPatchMVCCNoMatch() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/name/displayName", "changed")).setRevision("12346")); |
| | | newPatchRequest( |
| | | "/test1", |
| | | add("/name/displayName", "changed")).setRevision("12346")); |
| | | } |
| | | |
| | | @Test(expectedExceptions = NotFoundException.class) |
| | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchReadOnlyAttribute() throws Exception { |
| | | // Etag is read-only. |
| | | newConnection().patch(newAuthConnectionContext(), newPatchRequest("/test1", add("_rev", "99999"))); |
| | | newConnection().patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("_rev", "99999"))); |
| | | } |
| | | |
| | | @Test |
| | |
| | | field("_rev", "12345"), |
| | | field("name", object(field("displayName", "Humpty"), |
| | | field("surname", "Dumpty"))))); |
| | | final ResourceResponse resource1 = connection.patch(context, newPatchRequest("/test1", |
| | | replace("/name", object(field("displayName", "Humpty"), field("surname", "Dumpty"))))); |
| | | |
| | | final ResourceResponse resource1 = |
| | | connection.patch( |
| | | context, |
| | | newPatchRequest("/test1", |
| | | replace("/name", object(field("displayName", "Humpty"), |
| | | field("surname", "Dumpty"))))); |
| | | checkResourcesAreEqual(resource1, expected); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, expected); |
| | | } |
| | |
| | | public void testPatchReplaceWholeObject() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final Context context = newAuthConnectionContext(); |
| | | final JsonValue newContent = json(object( |
| | | final JsonValue newContent = |
| | | json(object( |
| | | field("name", object(field("displayName", "Humpty"), |
| | | field("surname", "Dumpty"))))); |
| | | final JsonValue expected = json(object( |
| | | |
| | | 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 ResourceResponse resource1 = |
| | | connection.patch(context, newPatchRequest("/test1", replace("/", newContent))); |
| | | checkResourcesAreEqual(resource1, expected); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, expected); |
| | | } |
| | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchSingleValuedAttributeIndexAppend() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/name/surname/-", "junk"))); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/name/surname/-", "junk"))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = NotSupportedException.class) |
| | | public void testPatchSingleValuedAttributeIndexNumber() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/name/surname/0", "junk"))); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/name/surname/0", "junk"))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchSingleValuedAttributeWithMultipleValues() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/name/surname", asList("black", |
| | | "white")))); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest( |
| | | "/test1", |
| | | add("/name/surname", asList("black", "white")))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchUnknownAttribute() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/dummy", "junk"))); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/dummy", "junk"))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testPatchUnknownSubAttribute() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.patch(newAuthConnectionContext(), newPatchRequest("/test1", add("/description/dummy", "junk"))); |
| | | |
| | | connection.patch( |
| | | newAuthConnectionContext(), |
| | | newPatchRequest("/test1", add("/description/dummy", "junk"))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | |
| | | |
| | | @Test |
| | | public void testRead() throws Exception { |
| | | final ResourceResponse resource = newConnection().read(newAuthConnectionContext(), newReadRequest("/test1")); |
| | | final ResourceResponse resource = |
| | | newConnection().read(newAuthConnectionContext(), newReadRequest("/test1")); |
| | | |
| | | checkResourcesAreEqual(resource, getTestUser1(12345)); |
| | | } |
| | | |
| | |
| | | |
| | | @Test |
| | | public void testReadSelectAllFields() throws Exception { |
| | | final ResourceResponse resource = newConnection().read(newAuthConnectionContext(), |
| | | newReadRequest("/test1").addField("/")); |
| | | final ResourceResponse resource = |
| | | newConnection().read( |
| | | newAuthConnectionContext(), newReadRequest("/test1").addField("/")); |
| | | |
| | | checkResourcesAreEqual(resource, getTestUser1(12345)); |
| | | } |
| | | |
| | | @Test |
| | | public void testReadSelectPartial() throws Exception { |
| | | final ResourceResponse resource = newConnection().read( |
| | | final ResourceResponse resource = |
| | | newConnection().read( |
| | | newAuthConnectionContext(), newReadRequest("/test1").addField("/name/surname")); |
| | | |
| | | assertThat(resource.getId()).isEqualTo("test1"); |
| | | assertThat(resource.getRevision()).isEqualTo("12345"); |
| | | assertThat(resource.getContent().get("_id").asString()).isNull(); |
| | |
| | | /** Disabled - see CREST-86 (Should JSON resource fields be case insensitive?) */ |
| | | @Test(enabled = false) |
| | | public void testReadSelectPartialInsensitive() throws Exception { |
| | | final ResourceResponse resource = newConnection().read( |
| | | final ResourceResponse resource = |
| | | newConnection().read( |
| | | newAuthConnectionContext(), newReadRequest("/test1").addField("/name/SURNAME")); |
| | | |
| | | assertThat(resource.getId()).isEqualTo("test1"); |
| | | assertThat(resource.getRevision()).isEqualTo("12345"); |
| | | assertThat(resource.getContent().get("_id").asString()).isNull(); |
| | |
| | | final ResourceResponse resource1 = connection.update( |
| | | context, newUpdateRequest("/test1", getTestUser1Updated(12345))); |
| | | checkResourcesAreEqual(resource1, getTestUser1Updated(12345)); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, getTestUser1Updated(12345)); |
| | | } |
| | |
| | | final List<Request> requests = new LinkedList<>(); |
| | | final Connection connection = newConnection(); |
| | | final Context context = newAuthConnectionContext(requests); |
| | | final ResourceResponse resource1 = connection.update(context, newUpdateRequest("/test1", getTestUser1(12345))); |
| | | final ResourceResponse resource1 = |
| | | connection.update(context, newUpdateRequest("/test1", getTestUser1(12345))); |
| | | |
| | | // Check that no modify operation was sent |
| | | // (only a single search should be sent in order to get the current resource). |
| | | assertThat(requests).hasSize(1); |
| | | assertThat(requests.get(0)).isInstanceOf(SearchRequest.class); |
| | | |
| | | checkResourcesAreEqual(resource1, getTestUser1(12345)); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, getTestUser1(12345)); |
| | | } |
| | |
| | | final Connection connection = newConnection(); |
| | | final Context context = newAuthConnectionContext(); |
| | | final JsonValue newContent = getTestUser1Updated(12345); |
| | | |
| | | newContent.put("description", asList("one", "two")); |
| | | final ResourceResponse resource1 = connection.update(context, newUpdateRequest("/test1", newContent)); |
| | | |
| | | final ResourceResponse resource1 = |
| | | connection.update(context, newUpdateRequest("/test1", newContent)); |
| | | checkResourcesAreEqual(resource1, newContent); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, newContent); |
| | | } |
| | |
| | | public void testUpdateConstantAttribute() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final JsonValue newContent = getTestUser1Updated(12345); |
| | | |
| | | newContent.put("schemas", asList("junk")); |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/test1", newContent)); |
| | | } |
| | |
| | | final Connection connection = newConnection(); |
| | | final Context context = newAuthConnectionContext(); |
| | | final JsonValue newContent = getTestUser1Updated(12345); |
| | | |
| | | newContent.put("description", asList("one", "two")); |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/test1", newContent)); |
| | | newContent.remove("description"); |
| | | final ResourceResponse resource1 = connection.update(context, newUpdateRequest("/test1", newContent)); |
| | | |
| | | final ResourceResponse resource1 = |
| | | connection.update(context, newUpdateRequest("/test1", newContent)); |
| | | checkResourcesAreEqual(resource1, newContent); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, newContent); |
| | | } |
| | |
| | | public void testUpdateMissingRequiredAttribute() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final JsonValue newContent = getTestUser1Updated(12345); |
| | | |
| | | newContent.get("name").remove("surname"); |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/test1", newContent)); |
| | | } |
| | |
| | | final Connection connection = newConnection(); |
| | | final Context context = newAuthConnectionContext(); |
| | | final JsonValue newContent = getTestUser1Updated(12345); |
| | | |
| | | newContent.put("description", asList("one", "two")); |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/test1", newContent)); |
| | | newContent.put("description", asList("three")); |
| | | final ResourceResponse resource1 = connection.update(context, newUpdateRequest("/test1", newContent)); |
| | | |
| | | final ResourceResponse resource1 = |
| | | connection.update(context, newUpdateRequest("/test1", newContent)); |
| | | checkResourcesAreEqual(resource1, newContent); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, newContent); |
| | | } |
| | |
| | | final Connection connection = newConnection(); |
| | | final Context context = newAuthConnectionContext(); |
| | | final ResourceResponse resource1 = |
| | | connection.update(context, newUpdateRequest("/test1", getTestUser1Updated(12345)).setRevision("12345")); |
| | | connection.update( |
| | | context, |
| | | newUpdateRequest("/test1", getTestUser1Updated(12345)).setRevision("12345")); |
| | | checkResourcesAreEqual(resource1, getTestUser1Updated(12345)); |
| | | |
| | | final ResourceResponse resource2 = connection.read(context, newReadRequest("/test1")); |
| | | checkResourcesAreEqual(resource2, getTestUser1Updated(12345)); |
| | | } |
| | |
| | | @Test(expectedExceptions = PreconditionFailedException.class) |
| | | public void testUpdateMVCCNoMatch() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/test1", getTestUser1Updated(12345)) |
| | | .setRevision("12346")); |
| | | |
| | | connection.update( |
| | | newAuthConnectionContext(), |
| | | newUpdateRequest("/test1", getTestUser1Updated(12345)).setRevision("12346")); |
| | | } |
| | | |
| | | @Test(expectedExceptions = NotFoundException.class) |
| | | public void testUpdateNotFound() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/missing", getTestUser1Updated(12345))); |
| | | |
| | | connection.update( |
| | | newAuthConnectionContext(), |
| | | newUpdateRequest("/missing", getTestUser1Updated(12345))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testUpdateReadOnlyAttribute() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | |
| | | // Etag is read-only. |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/test1", getTestUser1Updated(99999))); |
| | | connection.update( |
| | | newAuthConnectionContext(), |
| | | newUpdateRequest("/test1", getTestUser1Updated(99999))); |
| | | } |
| | | |
| | | @Test(expectedExceptions = BadRequestException.class) |
| | | public void testUpdateSingleValuedAttributeWithMultipleValues() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final JsonValue newContent = getTestUser1Updated(12345); |
| | | |
| | | newContent.put("surname", asList("black", "white")); |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/test1", newContent)); |
| | | } |
| | |
| | | public void testUpdateUnknownAttribute() throws Exception { |
| | | final Connection connection = newConnection(); |
| | | final JsonValue newContent = getTestUser1Updated(12345); |
| | | |
| | | newContent.add("dummy", "junk"); |
| | | connection.update(newAuthConnectionContext(), newUpdateRequest("/test1", newContent)); |
| | | } |
| | |
| | | } |
| | | |
| | | private Rest2Ldap usersApi() throws IOException { |
| | | return rest2Ldap(defaultOptions(), |
| | | resource("api").subResource(collectionOf("user").dnTemplate("dc=test") |
| | | .useClientDnNaming("uid")), |
| | | return rest2Ldap( |
| | | defaultOptions(), |
| | | resource("api").subResource( |
| | | collectionOf("user").dnTemplate("dc=test").useClientDnNaming("uid")), |
| | | resource("user").objectClasses("top", "person") |
| | | .property("schemas", constant(asList("urn:scim:schemas:core:1.0"))) |
| | | .property("_id", simple("uid").isRequired(true).writability(CREATE_ONLY)) |
| | | .property("name", object().property("displayName", |
| | | simple("cn").isRequired(true)) |
| | | .property( |
| | | "schemas", |
| | | constant(asList("urn:scim:schemas:core:1.0"))) |
| | | .property( |
| | | "_id", |
| | | simple("uid").isRequired(true).writability(CREATE_ONLY)) |
| | | .property( |
| | | "name", |
| | | object() |
| | | .property("displayName", simple("cn").isRequired(true)) |
| | | .property("surname", simple("sn").isRequired(true))) |
| | | .property("_rev", simple("etag").isRequired(true).writability(READ_ONLY)) |
| | | .property("description", simple("description").isMultiValued(true)) |
| | | .property("singleNumber", |
| | | .property( |
| | | "_rev", |
| | | simple("etag").isRequired(true).writability(READ_ONLY)) |
| | | .property( |
| | | "description", |
| | | simple("description").isMultiValued(true)) |
| | | .property( |
| | | "singleNumber", |
| | | simple("singleNumber").decoder(byteStringToInteger())) |
| | | .property("multiNumber", |
| | | simple("multiNumber").isMultiValued(true) |
| | | .decoder(byteStringToInteger()))); |
| | | .property( |
| | | "multiNumber", |
| | | simple("multiNumber").isMultiValued(true).decoder(byteStringToInteger())) |
| | | ); |
| | | } |
| | | |
| | | private void checkResourcesAreEqual(final ResourceResponse actual, final JsonValue expected) { |
| | | final ResourceResponse expectedResource = asResource(expected); |
| | | |
| | | assertThat(actual.getId()).isEqualTo(expectedResource.getId()); |
| | | assertThat(actual.getRevision()).isEqualTo(expectedResource.getRevision()); |
| | | assertThat(actual.getContent().getObject()).isEqualTo(expectedResource.getContent().getObject()); |