use of com.linkedin.restli.common.CollectionResponse in project rest.li by linkedin.
the class TestCustomMetadataProjection method testRootManualMetadataAutomaticSingleRootSingleMeta.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//The following tests operate on the resource method rootManualMetadataAutomatic
/**
* Calls the resource method rootManualMetadataAutomatic with a single metadata field and a single root object
* entity field
*/
@Test(dataProvider = com.linkedin.restli.internal.common.TestConstants.RESTLI_PROTOCOL_1_2_PREFIX + "requestBuilderDataProvider")
public void testRootManualMetadataAutomaticSingleRootSingleMeta(RootBuilderWrapper<Long, Greeting> builders) throws RemoteInvocationException {
final Request<CollectionResponse<Greeting>> request = builders.findBy("rootManualMetadataAutomatic").fields(Greeting.fields().message()).metadataFields(Greeting.fields().message()).build();
final Response<CollectionResponse<Greeting>> response = getClient().sendRequest(request).getResponse();
//Note the server behavior here is to preserve the tone and the message even though the projection only specified
//message
assertEntityElements(response.getEntity().getElements(), true, /*hasTone*/
true, /*hasMessage*/
false);
final Greeting metadataGreeting = new Greeting(response.getEntity().getMetadataRaw());
assertCustomMetadata(metadataGreeting, false, /*hasTone*/
true, /*hasMessage*/
false);
Assert.assertTrue(response.getEntity().hasPaging(), "We must have paging!");
assertAllPagingFieldsExist(response.getEntity().getPaging());
}
use of com.linkedin.restli.common.CollectionResponse in project rest.li by linkedin.
the class TestCustomMetadataProjection method testRootManualMetadataManualSingleRootSingleMeta.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//The following tests operate on the resource method rootManualMetadataManual
/**
* Calls the resource method rootManualMetadataManual with a single metadata field and a single root object
* entity field
*/
@Test(dataProvider = com.linkedin.restli.internal.common.TestConstants.RESTLI_PROTOCOL_1_2_PREFIX + "requestBuilderDataProvider")
public void testRootManualMetadataManualSingleRootSingleMeta(RootBuilderWrapper<Long, Greeting> builders) throws RemoteInvocationException {
final Request<CollectionResponse<Greeting>> request = builders.findBy("rootManualMetadataManual").fields(Greeting.fields().message()).metadataFields(Greeting.fields().message()).build();
final Response<CollectionResponse<Greeting>> response = getClient().sendRequest(request).getResponse();
//Note the following for the resulting entity elements and metadata:
//The resource method should ideally only preserve only the message, but we intentionally also preserve
//the tone to verify that it is the resource method who performs the projection and not restli
assertEntityElements(response.getEntity().getElements(), true, /*hasTone*/
true, /*hasMessage*/
false);
final Greeting metadataGreeting = new Greeting(response.getEntity().getMetadataRaw());
assertCustomMetadata(metadataGreeting, true, /*hasTone*/
true, /*hasMessage*/
false);
Assert.assertTrue(response.getEntity().hasPaging(), "We must have paging!");
assertAllPagingFieldsExist(response.getEntity().getPaging());
}
use of com.linkedin.restli.common.CollectionResponse in project rest.li by linkedin.
the class TestCustomMetadataProjection method testRootManualMetadataManualAllFields.
/**
* Calls the resource method rootManualMetadataManual with all custom metadata fields and a single
* root object entity projection field
*/
@Test(dataProvider = com.linkedin.restli.internal.common.TestConstants.RESTLI_PROTOCOL_1_2_PREFIX + "requestBuilderDataProvider")
public void testRootManualMetadataManualAllFields(RootBuilderWrapper<Long, Greeting> builders) throws RemoteInvocationException {
final Request<CollectionResponse<Greeting>> findRequest = builders.findBy("rootManualMetadataManual").fields(Greeting.fields().tone()).metadataFields(Greeting.fields().tone(), Greeting.fields().id(), Greeting.fields().message()).build();
final Response<CollectionResponse<Greeting>> response = getClient().sendRequest(findRequest).getResponse();
//Manual projection on the resource method only works if it sees the message field in the projection
assertEntityElements(response.getEntity().getElements(), true, /*hasTone*/
true, /*hasMessage*/
true);
final Greeting metadataGreeting = new Greeting(response.getEntity().getMetadataRaw());
assertCustomMetadata(metadataGreeting, true, /*hasTone*/
true, /*hasMessage*/
true);
Assert.assertTrue(response.getEntity().hasPaging(), "We must have paging!");
assertAllPagingFieldsExist(response.getEntity().getPaging());
}
use of com.linkedin.restli.common.CollectionResponse in project rest.li by linkedin.
the class TestCustomMetadataProjection method testRootManualMetadataManualNoFields.
/**
* Calls the resource method rootManualMetadataManual with no fields specified in any projection
*/
@Test(dataProvider = com.linkedin.restli.internal.common.TestConstants.RESTLI_PROTOCOL_1_2_PREFIX + "requestBuilderDataProvider")
public void testRootManualMetadataManualNoFields(RootBuilderWrapper<Long, Greeting> builders) throws RemoteInvocationException {
final Request<CollectionResponse<Greeting>> findRequest = builders.findBy("rootManualMetadataManual").build();
final Response<CollectionResponse<Greeting>> response = getClient().sendRequest(findRequest).getResponse();
assertEntityElements(response.getEntity().getElements(), true, /*hasTone*/
true, /*hasMessage*/
true);
final Greeting metadataGreeting = new Greeting(response.getEntity().getMetadataRaw());
assertCustomMetadata(metadataGreeting, true, /*hasTone*/
true, /*hasMessage*/
true);
Assert.assertTrue(response.getEntity().hasPaging(), "We must have paging!");
assertAllPagingFieldsExist(response.getEntity().getPaging());
}
use of com.linkedin.restli.common.CollectionResponse in project rest.li by linkedin.
the class TestRestLiResponseHandler method testFieldProjection_collections_List.
@Test(dataProvider = TestConstants.RESTLI_PROTOCOL_1_2_PREFIX + "basicData")
public void testFieldProjection_collections_List(AcceptTypeData acceptTypeData, ProtocolVersion protocolVersion, String errorResponseHeaderName) throws Exception {
RestResponse response;
List<Status> statusCollection = buildStatusListResult(10, "f1", "f2", "f3");
RestRequest request = buildRequest("/test?fields=f1,f2", acceptTypeData.acceptHeaders, protocolVersion);
response = _responseHandler.buildResponse(request, buildRoutingResultFinder(request, acceptTypeData.acceptHeaders), statusCollection);
checkResponse(response, 200, 2, acceptTypeData.responseContentType, CollectionResponse.class.getName(), null, true, errorResponseHeaderName);
DataMap dataMap = acceptTypeData.dataCodec.readMap(response.getEntity().asInputStream());
CollectionResponse<Status> collectionResponse = new CollectionResponse<Status>(dataMap, Status.class);
assertEquals(collectionResponse.getElements().size(), 10);
for (Status status : collectionResponse.getElements()) {
assertTrue(status.data().containsKey("f1"));
assertTrue(status.data().containsKey("f2"));
assertFalse(status.data().containsKey("f3"));
}
// ensure that output status objects were not modified by rest.li!
Status status1 = statusCollection.get(1);
assertNotNull(status1);
assertTrue(status1.data().containsKey("f3"));
}
Aggregations