//Dstl (c) Crown Copyright 2017
package uk.gov.dstl.baleen.consumers.template;
import static org.junit.Assert.assertEquals;
import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.fit.factory.ExternalResourceFactory;
import org.apache.uima.resource.ExternalResourceDescription;
import org.apache.uima.resource.ResourceAccessException;
import org.apache.uima.resource.ResourceInitializationException;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mongodb.client.FindIterable;
import com.mongodb.client.MongoCollection;
import uk.gov.dstl.baleen.resources.SharedFongoResource;
public class MongoTemplateRecordConsumerTest extends AbstractTemplateRecordConsumerTest {
private static final String MONGO = "mongo";
private ExternalResourceDescription mongoExternalResourceDescription;
private AnalysisEngine analysisEngine;
private MongoCollection<Document> recordsCollection;
public MongoTemplateRecordConsumerTest() {
super(MongoTemplateRecordConsumer.class);
}
@Before
public void beforeMongoRecordConsumerTest() throws ResourceInitializationException, ResourceAccessException {
mongoExternalResourceDescription = ExternalResourceFactory.createExternalResourceDescription(MONGO,
SharedFongoResource.class, "fongo.collection", "test", "fongo.data", "[]");
analysisEngine = getAnalysisEngine("mongo", mongoExternalResourceDescription, "collection", "test");
SharedFongoResource sfr = (SharedFongoResource) analysisEngine.getUimaContext().getResourceObject(MONGO);
recordsCollection = sfr.getDB().getCollection("records");
}
@Test
public void testSave() throws Exception {
assertEquals(0L, recordsCollection.count());
process();
assertEquals(1L, recordsCollection.count());
}
@Test
public void testRecords()
throws JsonParseException, JsonMappingException, IOException, AnalysisEngineProcessException {
process();
FindIterable<Document> find = recordsCollection.find();
Document document = find.first();
String json = document.toJson();
ObjectMapper mapper = new ObjectMapper();
MongoExtractedRecords mongoRecords = mapper.readValue(json, MongoExtractedRecords.class);
assertEquals("17e5e009b415a7c97e35f700fe9c36cc67c1b8a8457a1136e6b9eca001cd361a", mongoRecords.getExternalId());
assertEquals("MongoTemplateRecordConsumer.txt", mongoRecords.getSourceUri());
Map<String, Collection<ExtractedRecord>> records = mongoRecords.getRecords();
checkRecords(records);
}
private void process() throws AnalysisEngineProcessException {
analysisEngine.process(jCas);
}
@After
public void afterMongoRecordConsumerTest() {
analysisEngine.destroy();
}
}