Package com.findwise.hydra.mongodb

Source Code of com.findwise.hydra.mongodb.QueryIT

package com.findwise.hydra.mongodb;

import static org.junit.Assert.fail;

import java.util.Date;
import java.util.List;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;

import com.findwise.hydra.DatabaseDocument;
import com.findwise.hydra.Document;
import com.findwise.hydra.Document.Action;
import com.findwise.hydra.JsonException;
import com.findwise.hydra.local.LocalQuery;

/**
* Cross-test
* @author joel.westberg
*
*/
public class QueryIT {

  @Rule
  public MongoConnectorResource mongoConnectorResource = new MongoConnectorResource(getClass());
 
  DatabaseDocument<MongoType> test;
  DatabaseDocument<MongoType> test2;
  DatabaseDocument<MongoType> random;
 
  @Before
  public void setUp() throws Exception {
    MongoConnector mdc = mongoConnectorResource.getConnector();
   
    test = new MongoDocument();
    test.setAction(Action.ADD);
    test.putContentField("name", "test");
    test.putMetadataField("date", new Date());
   
    test2 = new MongoDocument();
    test2.setAction(Action.DELETE);
    test2.putContentField("name", "test");
    test2.putContentField("number", 2);
    test2.putMetadataField("date", new Date());
   
    random = new MongoDocument();
   
    DatabaseDocument<MongoType> d;
    while((d = mdc.getDocumentReader().getDocument(new MongoQuery()))!=null) {
      mdc.getDocumentWriter().delete(d);
    }
   
    mdc.getDocumentWriter().insert(test);
    mdc.getDocumentWriter().insert(test2);
    mdc.getDocumentWriter().insert(random);
  }

  @Test
  public void testMongoDatabaseQuery() throws JsonException {
    MongoConnector mdc = mongoConnectorResource.getConnector();
    LocalQuery lq = new LocalQuery();
    lq.requireTouchedByStage("test");
    lq.requireNotTouchedByStage("test2");
    lq.requireContentFieldExists("exists");
    MongoQuery q = new MongoQuery(lq.toJson());
    Document<MongoType> d = mdc.getDocumentReader().getDocument(q);
    if(d!=null) {
      fail("Expected no document to be returned");
    }
    lq = new LocalQuery();
    if(mdc.getDocumentReader().getDocument(new MongoQuery(lq.toJson()))==null) {
      fail("Expected to find a document");
    }
  }
 
  @Test
  public void testRequireID() {
    MongoConnector mdc = mongoConnectorResource.getConnector();
    Document<MongoType> d = mdc.getDocumentReader().getDocument(new MongoQuery());
    MongoQuery mdq = new MongoQuery();
    mdq.requireID(d.getID());
    if(null==mdc.getDocumentReader().getDocument(mdq)) {
      fail("Did not find a document with expected ID");
    }
    if(!mdc.getDocumentReader().getDocument(mdq).isEqual(d)) {
      fail("Found wrong document! "+d.getID());
    }
  }

  @Test
  public void testRequireContentFieldExists() throws JsonException {
    MongoConnector mdc = mongoConnectorResource.getConnector();
    LocalQuery q = new LocalQuery();
    q.requireContentFieldExists("number");
    List<DatabaseDocument<MongoType>> ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=1) {
      fail("Received incorrect number of documents..");
    }
    q = new LocalQuery();
    q.requireContentFieldExists("name");
    ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=2) {
      fail("Received incorrect number of documents..");
    }
  }
 
  @Test
  public void testRequireContentFieldNotExists() throws JsonException {
    MongoConnector mdc = mongoConnectorResource.getConnector();
    LocalQuery q = new LocalQuery();
    q.requireContentFieldNotExists("number");
    List<DatabaseDocument<MongoType>> ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=2) {
      fail("Received incorrect number of documents..");
    }
    q = new LocalQuery();
    q.requireContentFieldNotExists("name");
    ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=1) {
      fail("Received incorrect number of documents..");
    }
  }

  @Test
  public void testRequireTouchedByStage() throws JsonException {
    MongoConnector mdc = mongoConnectorResource.getConnector();
    LocalQuery q = new LocalQuery();
    q.requireTouchedByStage("xyz");
    List<DatabaseDocument<MongoType>> ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=0) {
      fail("Got documents, shouldn't have.");
    }
   
    Document<MongoType> d = mdc.getDocumentWriter().getAndTag(new MongoQuery(), "xyz");
    if(d==null) {
      fail("Should have gotten a document back...");
    }
    mdc.getDocumentWriter().markTouched(d.getID(), "xyz");
   
    ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=1) {
      fail("Received incorrect number of documents..");
    }
  }

  @Test
  public void testRequireNotTouchedByStage() throws JsonException {
    MongoConnector mdc = mongoConnectorResource.getConnector();
    LocalQuery q = new LocalQuery();
    q.requireNotTouchedByStage("xyz");
    List<DatabaseDocument<MongoType>> ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=3) {
      fail("Received incorrect number of documents..");
    }
   
    Document<MongoType> d = mdc.getDocumentWriter().getAndTag(new MongoQuery(), "xyz");
    if(d==null) {
      fail("Should have gotten a document back...");
    }
    mdc.getDocumentWriter().markTouched(d.getID(), "xyz");
   
    ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=2) {
      fail("Received incorrect number of documents..");
    }
  }
 
  @Test
  public void testRequireAction() throws JsonException {
    MongoConnector mdc = mongoConnectorResource.getConnector();
    LocalQuery q = new LocalQuery();
    q.requireAction(Action.UPDATE);
    List<DatabaseDocument<MongoType>> ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=0) {
      fail("Got documents for UPDATE, shouldn't have.");
    }
   
    q = new LocalQuery();
    q.requireAction(Action.ADD);
    ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=1) {
      fail("Should have gotten a document back for ADD...");
    }
   
    if(ds.get(0).getAction() != Action.ADD || !ds.get(0).getContentField("name").equals(test.getContentField("name"))) {
      fail("Didn't get the correct document for ADD...");
    }

    q = new LocalQuery();
    q.requireAction(Action.DELETE);
    ds = mdc.getDocumentReader().getDocuments(new MongoQuery(q.toJson()), 3);
    if(ds.size()!=1) {
      fail("Should have gotten a document back for DELETE...");
    }
  }

  @Test
  public void testFromJSON() throws JsonException {
    MongoConnector mdc = mongoConnectorResource.getConnector();
    LocalQuery q = new LocalQuery();
    MongoQuery mdq = new MongoQuery();
    mdq.fromJson(q.toJson());
    if(mdq.toDBObject().keySet().size()!=0) {
      fail("Expected query to be empty");
    }
   
    q.requireContentFieldExists("name");
    mdq.fromJson(q.toJson());
    if(mdq.toDBObject().keySet().size()!=1) {
      fail("Expected query to have one value");
    }
    List<DatabaseDocument<MongoType>> list = mdc.getDocumentReader().getDocuments(mdq, 142);
    if(list.size()!=2) {
      fail("Expected to find two documents");
    }
    for(Document<MongoType> d : list) {
      if(!d.hasContentField("name")) {
        fail("Fetched document is missing content field name");
      }
    }
  }

}
TOP

Related Classes of com.findwise.hydra.mongodb.QueryIT

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.