use of org.neo4j.server.rest.PrettyJSON in project neo4j by neo4j.
the class BatchOperationHeaderIT method shouldPassHeaders.
@Test
public void shouldPassHeaders() throws Exception {
String jsonData = new PrettyJSON().array().object().key("method").value("GET").key("to").value("../.." + DUMMY_WEB_SERVICE_MOUNT_POINT + "/needs-auth-header").key("body").object().endObject().endObject().endArray().toString();
JaxRsResponse response = new RestRequest(null, "user", "pass").post("http://localhost:7474/db/data/batch", jsonData);
assertEquals(200, response.getStatus());
final List<Map<String, Object>> responseData = jsonToList(response.getEntity());
Map<String, Object> res = (Map<String, Object>) responseData.get(0).get("body");
/*
* {
* Accept=[application/json],
* Content-Type=[application/json],
* Authorization=[Basic dXNlcjpwYXNz],
* User-Agent=[Java/1.6.0_27] <-- ignore that, it changes often
* Host=[localhost:7474],
* Connection=[keep-alive],
* Content-Length=[86]
* }
*/
assertEquals("Basic dXNlcjpwYXNz", res.get("Authorization"));
assertEquals("application/json", res.get("Accept"));
assertEquals("application/json", res.get("Content-Type"));
assertEquals("localhost:7474", res.get("Host"));
assertEquals("keep-alive", res.get("Connection"));
}
use of org.neo4j.server.rest.PrettyJSON in project neo4j by neo4j.
the class StreamingBatchOperationIT method execute_multiple_operations_in_batch_streaming.
/**
* By specifying an extended header attribute in the HTTP request,
* the server will stream the results back as soon as they are processed on the server side
* instead of constructing a full response when all entities are processed.
*/
@SuppressWarnings("unchecked")
@Test
@Graph("Joe knows John")
public void execute_multiple_operations_in_batch_streaming() throws Exception {
long idJoe = data.get().get("Joe").getId();
String jsonString = new PrettyJSON().array().object().key("method").value("PUT").key("to").value("/node/" + idJoe + "/properties").key("body").object().key("age").value(1).endObject().key("id").value(0).endObject().object().key("method").value("GET").key("to").value("/node/" + idJoe).key("id").value(1).endObject().object().key("method").value("POST").key("to").value("/node").key("body").object().key("age").value(1).endObject().key("id").value(2).endObject().object().key("method").value("POST").key("to").value("/node").key("body").object().key("age").value(1).endObject().key("id").value(3).endObject().endArray().toString();
String entity = gen.get().expectedType(APPLICATION_JSON_TYPE).withHeader(StreamingFormat.STREAM_HEADER, "true").payload(jsonString).expectedStatus(200).post(batchUri()).entity();
List<Map<String, Object>> results = JsonHelper.jsonToList(entity);
assertEquals(4, results.size());
Map<String, Object> putResult = results.get(0);
Map<String, Object> getResult = results.get(1);
Map<String, Object> firstPostResult = results.get(2);
Map<String, Object> secondPostResult = results.get(3);
// Ids should be ok
assertEquals(0, putResult.get("id"));
assertEquals(2, firstPostResult.get("id"));
assertEquals(3, secondPostResult.get("id"));
// Should contain "from"
assertEquals("/node/" + idJoe + "/properties", putResult.get("from"));
assertEquals("/node/" + idJoe, getResult.get("from"));
assertEquals("/node", firstPostResult.get("from"));
assertEquals("/node", secondPostResult.get("from"));
// Post should contain location
assertTrue(((String) firstPostResult.get("location")).length() > 0);
assertTrue(((String) secondPostResult.get("location")).length() > 0);
// Should have created by the first PUT request
Map<String, Object> body = (Map<String, Object>) getResult.get("body");
assertEquals(1, ((Map<String, Object>) body.get("data")).get("age"));
}
use of org.neo4j.server.rest.PrettyJSON in project neo4j by neo4j.
the class StreamingBatchOperationIT method shouldHandleUnicodeGetCorrectly.
@Test
@SuppressWarnings("unchecked")
public void shouldHandleUnicodeGetCorrectly() throws Exception {
String asianText = "例子";
String germanText = "öäüÖÄÜß";
String complicatedString = asianText + germanText;
String jsonString = new PrettyJSON().array().object().key("method").value("POST").key("to").value("/node").key("body").object().key(complicatedString).value(complicatedString).endObject().endObject().endArray().toString();
String entity = gen.get().expectedType(APPLICATION_JSON_TYPE).withHeader(StreamingFormat.STREAM_HEADER, "true").expectedStatus(200).payload(jsonString).post(batchUri()).entity();
// Pull out the property value from the depths of the response
Map<String, Object> response = (Map<String, Object>) JsonHelper.jsonToList(entity).get(0).get("body");
String returnedValue = (String) ((Map<String, Object>) response.get("data")).get(complicatedString);
// Ensure nothing was borked.
assertThat(returnedValue, is(complicatedString));
}
use of org.neo4j.server.rest.PrettyJSON in project neo4j by neo4j.
the class StreamingBatchOperationIT method shouldForwardUnderlyingErrors.
@Test
public void shouldForwardUnderlyingErrors() throws Exception {
JaxRsResponse response = RestRequest.req().accept(APPLICATION_JSON_TYPE).header(StreamingFormat.STREAM_HEADER, "true").post(batchUri(), new PrettyJSON().array().object().key("method").value("POST").key("to").value("/node").key("body").object().key("age").array().value(true).value("hello").endArray().endObject().endObject().endArray().toString());
Map<String, Object> res = singleResult(response, 0);
assertTrue(((String) res.get("message")).startsWith("Invalid JSON array in POST body"));
assertEquals(400, res.get("status"));
}
use of org.neo4j.server.rest.PrettyJSON in project neo4j by neo4j.
the class StreamingBatchOperationIT method shouldRollbackAllWhenGivenIncorrectRequest.
@Test
public void shouldRollbackAllWhenGivenIncorrectRequest() throws JsonParseException, ClientHandlerException, UniformInterfaceException, JSONException {
String jsonString = new PrettyJSON().array().object().key("method").value("POST").key("to").value("/node").key("body").object().key("age").value("1").endObject().endObject().object().key("method").value("POST").key("to").value("/node").key("body").array().value("a_list").value("this_makes_no_sense").endArray().endObject().endArray().toString();
long originalNodeCount = countNodes();
JaxRsResponse response = RestRequest.req().accept(APPLICATION_JSON_TYPE).header(StreamingFormat.STREAM_HEADER, "true").post(batchUri(), jsonString);
assertEquals(200, response.getStatus());
// Message of the ClassCastException differs in Oracle JDK [typeX cannot be cast to typeY]
// and IBM JDK [typeX incompatible with typeY]. That is why we check parts of the message and exception class.
Map<String, String> body = (Map) singleResult(response, 1).get("body");
assertEquals(BadInputException.class.getSimpleName(), body.get("exception"));
assertThat(body.get("message"), containsString("java.util.ArrayList"));
assertThat(body.get("message"), containsString("java.util.Map"));
assertEquals(400, singleResult(response, 1).get("status"));
assertEquals(originalNodeCount, countNodes());
}
Aggregations