package eu.dnetlib.iis.wf.export.actionmanager.module; import static eu.dnetlib.iis.wf.export.actionmanager.ExportWorkflowRuntimeParameters.EXPORT_DOCUMENTSSIMILARITY_THRESHOLD; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.List; import org.junit.Test; 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.RelTypeProtos.RelType; import eu.dnetlib.data.proto.RelTypeProtos.SubRelType; import eu.dnetlib.data.proto.ResultResultProtos.ResultResult.Similarity; import eu.dnetlib.iis.common.InfoSpaceConstants; import eu.dnetlib.iis.documentssimilarity.schemas.DocumentSimilarity; /** * @author mhorst * */ public class DocumentSimilarityActionBuilderModuleFactoryTest extends AbstractActionBuilderModuleFactoryTest<DocumentSimilarity> { private final float similarityThreshold = 0.5f; // ----------------------- CONSTRUCTORS ------------------- public DocumentSimilarityActionBuilderModuleFactoryTest() throws Exception { super(DocumentSimilarityActionBuilderModuleFactory.class, AlgorithmName.document_similarities_standard); } // ----------------------- TESTS -------------------------- @Test public void testBuildBelowThreshold() throws Exception { // given DocumentSimilarity docSim = buildDocSim("docId", "otherDocId", 0.1f); config.set(EXPORT_DOCUMENTSSIMILARITY_THRESHOLD, String.valueOf(similarityThreshold)); ActionBuilderModule<DocumentSimilarity> module = factory.instantiate(config, agent, actionSetId); // execute List<AtomicAction> results = module.build(docSim); //assert assertTrue(results.isEmpty()); } @Test public void testBuild() throws Exception { // given String docId = "documentId"; String otherDocId = "otherDocId"; float similarity = 1f; DocumentSimilarity docSim = buildDocSim(docId, otherDocId, similarity); ActionBuilderModule<DocumentSimilarity> module = factory.instantiate(config, agent, actionSetId); // execute List<AtomicAction> actions = module.build(docSim); // assert assertNotNull(actions); assertEquals(2, actions.size()); AtomicAction action = actions.get(0); assertNotNull(action); assertNotNull(action.getRowKey()); assertEquals(actionSetId, action.getRawSet()); assertEquals(otherDocId, action.getTargetColumn()); assertEquals(docId, action.getTargetRowKey()); assertEquals(RelType.resultResult.toString() + '_' + SubRelType.similarity + '_' + Similarity.RelName.hasAmongTopNSimilarDocuments, action.getTargetColumnFamily()); assertOaf(action.getTargetValue(), docId, otherDocId, similarity, Similarity.RelName.hasAmongTopNSimilarDocuments.toString()); // checking backward relation action = actions.get(1); assertNotNull(action); assertNotNull(action.getRowKey()); assertEquals(agent, action.getAgent()); assertEquals(actionSetId, action.getRawSet()); assertEquals(docId, action.getTargetColumn()); assertEquals(otherDocId, action.getTargetRowKey()); assertEquals(RelType.resultResult.toString() + '_' + SubRelType.similarity + '_' + Similarity.RelName.isAmongTopNSimilarDocuments, action.getTargetColumnFamily()); assertOaf(action.getTargetValue(), otherDocId, docId, similarity, Similarity.RelName.isAmongTopNSimilarDocuments.toString()); } // ----------------------- PRIVATE -------------------------- private static DocumentSimilarity buildDocSim(String docId, String otherDocId, float similarity) { DocumentSimilarity.Builder builder = DocumentSimilarity.newBuilder(); builder.setDocumentId(docId); builder.setOtherDocumentId(otherDocId); builder.setSimilarity(similarity); return builder.build(); } private void assertOaf(byte[] oafBytes, String source, String target, float similarity, String affiliationRelationName) throws InvalidProtocolBufferException { assertNotNull(oafBytes); Oaf.Builder oafBuilder = Oaf.newBuilder(); oafBuilder.mergeFrom(oafBytes); Oaf oaf = oafBuilder.build(); assertNotNull(oaf); assertTrue(KindProtos.Kind.relation == oaf.getKind()); assertTrue(RelType.resultResult == oaf.getRel().getRelType()); assertTrue(SubRelType.similarity == oaf.getRel().getSubRelType()); assertEquals(affiliationRelationName, oaf.getRel().getRelClass()); assertEquals(source, oaf.getRel().getSource()); assertEquals(target, oaf.getRel().getTarget()); assertNotNull(oaf.getDataInfo()); float normalizedTrust = similarity * InfoSpaceConstants.CONFIDENCE_TO_TRUST_LEVEL_FACTOR; assertEquals(normalizedTrust, Float.parseFloat(oaf.getDataInfo().getTrust()), 0.0001); } }