package eu.dnetlib.iis.wf.export.actionmanager.module;
import static eu.dnetlib.iis.wf.export.actionmanager.module.DocumentToPdbActionBuilderModuleFactory.EXPORT_PDB_URL_ROOT;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import com.google.common.collect.Lists;
import com.google.protobuf.InvalidProtocolBufferException;
import eu.dnetlib.actionmanager.actions.AtomicAction;
import eu.dnetlib.data.proto.KindProtos;
import eu.dnetlib.data.proto.OafProtos.Oaf;
import eu.dnetlib.data.proto.ResultProtos.Result.ExternalReference;
import eu.dnetlib.data.proto.TypeProtos.Type;
import eu.dnetlib.iis.common.InfoSpaceConstants;
import eu.dnetlib.iis.export.schemas.Concept;
import eu.dnetlib.iis.export.schemas.DocumentToConceptIds;
/**
* @author mhorst
*
*/
public class DocumentToPdbActionBuilderModuleFactoryTest extends AbstractActionBuilderModuleFactoryTest<DocumentToConceptIds> {
private static final String ROOT_URL = "http://some_root_url/";
// ------------------------ CONSTRUCTORS -----------------------------
public DocumentToPdbActionBuilderModuleFactoryTest() throws Exception {
super(DocumentToPdbActionBuilderModuleFactory.class, AlgorithmName.document_pdb);
}
@Before
public void initUrlRootParam() {
config.set(EXPORT_PDB_URL_ROOT, ROOT_URL);
}
// ------------------------ TESTS ------------------------------------
@Test
public void testBuildEmptyConcepts() throws Exception {
// given
String docId = "documentId";
ActionBuilderModule<DocumentToConceptIds> module = factory.instantiate(config, agent, actionSetId);
// execute
List<AtomicAction> actions = module.build(
DocumentToConceptIds.newBuilder().setConcepts(Collections.emptyList()).setDocumentId(docId).build());
// assert
assertNotNull(actions);
assertEquals(0, actions.size());
}
@Test(expected=RuntimeException.class)
public void testBuildWithoutRootUrl() throws Exception {
// given
String docId = "documentId";
String pdbId = "pdbId";
float confidenceLevel = 1f;
config.unset(EXPORT_PDB_URL_ROOT);
ActionBuilderModule<DocumentToConceptIds> module = factory.instantiate(config, agent, actionSetId);
// execute
module.build(buildDocumentToConceptIds(docId, pdbId, confidenceLevel));
}
@Test
public void testBuild() throws Exception {
// given
String docId = "documentId";
String pdbId = "pdbId";
float confidenceLevel = 1f;
ActionBuilderModule<DocumentToConceptIds> module = factory.instantiate(config, agent, actionSetId);
// execute
List<AtomicAction> actions = module.build(buildDocumentToConceptIds(docId, pdbId, confidenceLevel));
// assert
assertNotNull(actions);
assertEquals(1, actions.size());
AtomicAction action = actions.get(0);
assertNotNull(action);
assertEquals(agent, action.getAgent());
assertNotNull(action.getRowKey());
assertEquals(actionSetId, action.getRawSet());
assertEquals(docId, action.getTargetRowKey());
assertEquals(Type.result.toString(), action.getTargetColumnFamily());
assertOaf(action.getTargetValue(), docId, pdbId, confidenceLevel);
}
// ----------------------- PRIVATE --------------------------
private static DocumentToConceptIds buildDocumentToConceptIds(String docId, String pdbId, float confidenceLevel) {
DocumentToConceptIds.Builder builder = DocumentToConceptIds.newBuilder();
builder.setDocumentId(docId);
Concept concept = Concept.newBuilder().setId(pdbId).setConfidenceLevel(confidenceLevel).build();
builder.setConcepts(Lists.newArrayList(concept));
return builder.build();
}
private void assertOaf(byte[] oafBytes, String docId, String pdbId, float confidenceLevel) throws InvalidProtocolBufferException {
assertNotNull(oafBytes);
Oaf.Builder oafBuilder = Oaf.newBuilder();
oafBuilder.mergeFrom(oafBytes);
Oaf oaf = oafBuilder.build();
assertNotNull(oaf);
assertTrue(KindProtos.Kind.entity == oaf.getKind());
assertNotNull(oaf.getEntity());
assertEquals(docId, oaf.getEntity().getId());
assertNotNull(oaf.getEntity().getResult());
assertEquals(1, oaf.getEntity().getResult().getExternalReferenceCount());
ExternalReference externalRef = oaf.getEntity().getResult().getExternalReferenceList().get(0);
assertNotNull(externalRef);
assertEquals(DocumentToPdbActionBuilderModuleFactory.SITENAME, externalRef.getSitename());
assertEquals(pdbId, externalRef.getRefidentifier());
assertEquals(ROOT_URL + pdbId, externalRef.getUrl());
assertNotNull(externalRef.getQualifier());
assertEquals(DocumentToPdbActionBuilderModuleFactory.CLASS, externalRef.getQualifier().getClassid());
assertEquals(DocumentToPdbActionBuilderModuleFactory.CLASS, externalRef.getQualifier().getClassname());
assertEquals(DocumentToPdbActionBuilderModuleFactory.SCHEME, externalRef.getQualifier().getSchemeid());
assertEquals(DocumentToPdbActionBuilderModuleFactory.SCHEME, externalRef.getQualifier().getSchemename());
assertNotNull(externalRef.getDataInfo());
float normalizedTrust = confidenceLevel * InfoSpaceConstants.CONFIDENCE_TO_TRUST_LEVEL_FACTOR;
assertEquals(normalizedTrust, Float.parseFloat(externalRef.getDataInfo().getTrust()), 0.0001);
}
}