Package

Source Code of DocumentProjectionTest

import static play.test.Helpers.GET;
import static play.test.Helpers.POST;
import static play.test.Helpers.DELETE;
import static play.test.Helpers.fakeApplication;
import static play.test.Helpers.routeAndCall;
import static play.test.Helpers.running;

import java.io.IOException;

import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.json.JSONObject;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import play.mvc.Result;
import play.mvc.Http.Status;
import play.test.FakeRequest;
import core.AbstractDocumentTest;
import core.TestConfig;


public class DocumentProjectionTest extends AbstractDocumentTest {
  private Object json = null;
  private JsonNode document1;
  private JsonNode document2;
  private JsonNode document3;
  private JsonNode document4;
 
  private String sFakeCollection;

  @Override
  public String getRouteAddress() {
    return SERVICE_ROUTE + TestConfig.TEST_COLLECTION_NAME;
  }

  @Override
  public String getMethod() {
    return GET;
  }

  @Override
  protected void assertContent(String s) {
    json = toJSON(s);
    assertJSON(json, "@version");
  }
 
  @Before
  public void createCollection() throws JsonProcessingException, IOException{
    document1 = new ObjectMapper().readTree("{\"total\":2,\"city\":\"rome\"}");
    document2 = new ObjectMapper().readTree("{\"total\":3,\"city\":\"rome\"}");
    document3 = new ObjectMapper().readTree("{\"total\":4,\"city\":\"milan\"}");
    document4 = new ObjectMapper().readTree("{\"total\":\"5\",\"city\":\"milan\"}");
  }
 
  @Test
  public void testOnlyFields(){
    running
    (
      getFakeApplication(),
      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);         
         
        }
      }
    );     
  }
 
  private String getUuid()  {
    String sUuid = null;

    try  {
      JSONObject jo = (JSONObject)json;
      sUuid = jo.getJSONObject("data").getString("id");
    }
    catch (Exception ex)  {
      Assert.fail("Cannot get UUID (id) value: " + ex.getMessage() + "\n The json object is: \n" + json);
    }
    return sUuid;
  }
}

TOP

Related Classes of DocumentProjectionTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.