new Runnable() {
public void run() {
continueOnFail(false);
sFakeCollection = new AdminCollectionFunctionalTest().routeCreateCollection();
//create three different documents
FakeRequest request = new FakeRequest(POST, getRouteAddress(sFakeCollection));
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
request = request.withJsonBody(document1);
Result result = routeAndCall(request);
assertRoute(result, "testOnlyFields CREATE 1", Status.OK, null, true);
String id1=getUuid();
request = new FakeRequest(POST, getRouteAddress(sFakeCollection));
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
request = request.withJsonBody(document2);
result = routeAndCall(request);
assertRoute(result, "testOnlyFields CREATE 2", Status.OK, null, true);
String id2=getUuid();
request = new FakeRequest(POST, getRouteAddress(sFakeCollection));
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
request = request.withJsonBody(document3);
result = routeAndCall(request);
assertRoute(result, "testOnlyFields CREATE 3", Status.OK, null, true);
String id3=getUuid();
request = new FakeRequest(POST, getRouteAddress(sFakeCollection));
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
request = request.withJsonBody(document4);
result = routeAndCall(request);
assertRoute(result, "testOnlyFields CREATE 4", Status.OK, null, true);
String id4=getUuid();
//read one document
request = new FakeRequest(GET, "/document/" + sFakeCollection + "/" + id1);
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
result = routeAndCall(request);
assertRoute(result, "testOnlyFields Reload document 1", Status.OK, "\"total\":2,\"city\":\"rome\"", true);
//retrieve fields with aggregate functions amd group by clause
request = new FakeRequest(GET, "/document/" + sFakeCollection + "?fields=sum(total) as tot,city&groupBy=city&orderBy=city");
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
result = routeAndCall(request);
assertRoute(result, "testOnlyFields fields 1", Status.OK, "\"tot\":5,\"city\":\"rome\"", true);
assertRoute(result, "testOnlyFields fields 2", Status.OK, "\"tot\":4,\"city\":\"milan\"", true);
request = new FakeRequest(GET, "/document/" + sFakeCollection + "?fields=sum(eval(\"(total - 10) * 2\")) as tot,city&groupBy=city&orderBy=city");
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
result = routeAndCall(request);
assertRoute(result, "testOnlyFields fields 3", Status.OK, "\"tot\":-30,\"city\":\"rome\"", true);
//one total field is a string, to include its value we must use the eval() function
request = new FakeRequest(GET, "/document/" + sFakeCollection + "?fields=sum(eval(\"total * 1\")) as tot,city&groupBy=city&orderBy=city");
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
result = routeAndCall(request);
assertRoute(result, "testOnlyFields fields 4", Status.OK, "\"tot\":5,\"city\":\"rome\"", true);
assertRoute(result, "testOnlyFields fields 5", Status.OK, "\"tot\":9,\"city\":\"milan\"", true);
//delete collection
request = new FakeRequest(DELETE, "/admin/collection/" + sFakeCollection );
request = request.withHeader(TestConfig.KEY_APPCODE, TestConfig.VALUE_APPCODE);
request = request.withHeader(TestConfig.KEY_AUTH, TestConfig.AUTH_ADMIN_ENC);
result = routeAndCall(request);
assertRoute(result, "testOnlyFields delete", Status.OK, null, false);
}
}