package eu.dnetlib.iis.wf.citationmatching.direct.converter; import static org.junit.Assert.assertEquals; import java.util.Map; import org.junit.Before; import org.junit.Test; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import eu.dnetlib.iis.citationmatching.direct.schemas.DocumentMetadata; import eu.dnetlib.iis.metadataextraction.schemas.ReferenceBasicMetadata; import eu.dnetlib.iis.metadataextraction.schemas.ReferenceMetadata; import eu.dnetlib.iis.transformers.metadatamerger.schemas.ExtractedDocumentMetadataMergedWithOriginal; import eu.dnetlib.iis.transformers.metadatamerger.schemas.PublicationType; /** * * @author madryk * */ public class DocumentToDirectCitationMetadataConverterTest { private DocumentToDirectCitationMetadataConverter converter = new DocumentToDirectCitationMetadataConverter(); private ExtractedDocumentMetadataMergedWithOriginal.Builder baseDocMetadataBuilder; private DocumentMetadata.Builder baseDocDirectCitationMetadataBuilder; @Before public void setUp() { baseDocMetadataBuilder = ExtractedDocumentMetadataMergedWithOriginal.newBuilder() .setId("id-1") .setExternalIdentifiers(buildExternalIds("doc_id_key_1", "doc_id_key_2")) .setPublicationTypeName("typeName") .setReferences(Lists.newArrayList(buildReferenceMetadata(23, buildExternalIds("ref_id_key_1", "ref_id_key_2")))) .setPublicationType(new PublicationType(false, false)); baseDocDirectCitationMetadataBuilder = DocumentMetadata.newBuilder() .setId("id-1") .setExternalIdentifiers(buildExternalIds("doc_id_key_1", "doc_id_key_2")) .setPublicationTypeName("typeName") .setReferences(Lists.newArrayList(buildCitationReferenceMetadata(23, buildExternalIds("ref_id_key_1", "ref_id_key_2")))); } //------------------------ TESTS -------------------------- @Test(expected = NullPointerException.class) public void convert_NULL() { // execute converter.convert(null); } @Test public void convert() { // given ExtractedDocumentMetadataMergedWithOriginal docMetadata = baseDocMetadataBuilder.build(); // execute DocumentMetadata retDocDirectCitationMetadata = converter.convert(docMetadata); // assert DocumentMetadata expectedDocDirectCitationMetadata = baseDocDirectCitationMetadataBuilder.build(); assertEquals(expectedDocDirectCitationMetadata, retDocDirectCitationMetadata); } @Test public void convert_NULL_EXTERNAL_IDENTIFIERS() { // given ExtractedDocumentMetadataMergedWithOriginal docMetadata = baseDocMetadataBuilder .clearExternalIdentifiers() .build(); // execute DocumentMetadata retDocDirectCitationMetadata = converter.convert(docMetadata); // assert DocumentMetadata expectedDocDirectCitationMetadata = baseDocDirectCitationMetadataBuilder .clearExternalIdentifiers() .build(); assertEquals(expectedDocDirectCitationMetadata, retDocDirectCitationMetadata); } @Test public void convert_NULL_REFERENCES() { // given ExtractedDocumentMetadataMergedWithOriginal docMetadata = baseDocMetadataBuilder .clearReferences() .build(); // execute DocumentMetadata retDocDirectCitationMetadata = converter.convert(docMetadata); // assert DocumentMetadata expectedDocDirectCitationMetadata = baseDocDirectCitationMetadataBuilder .setReferences(Lists.newArrayList()) .build(); assertEquals(expectedDocDirectCitationMetadata, retDocDirectCitationMetadata); } @Test public void convert_NULL_REFERENCES_EXTERNAL_IDS() { // given ExtractedDocumentMetadataMergedWithOriginal docMetadata = baseDocMetadataBuilder .setReferences(Lists.newArrayList(buildReferenceMetadata(24, null))) .build(); // execute DocumentMetadata retDocDirectCitationMetadata = converter.convert(docMetadata); // assert DocumentMetadata expectedDocDirectCitationMetadata = baseDocDirectCitationMetadataBuilder .setReferences(Lists.newArrayList()) .build(); assertEquals(expectedDocDirectCitationMetadata, retDocDirectCitationMetadata); } @Test public void convert_EMPTY_REFERENCES_EXTERNAL_IDS() { // given ExtractedDocumentMetadataMergedWithOriginal docMetadata = baseDocMetadataBuilder .setReferences(Lists.newArrayList(buildReferenceMetadata(24, buildExternalIds()))) .build(); // execute DocumentMetadata retDocDirectCitationMetadata = converter.convert(docMetadata); // assert DocumentMetadata expectedDocDirectCitationMetadata = baseDocDirectCitationMetadataBuilder .setReferences(Lists.newArrayList()) .build(); assertEquals(expectedDocDirectCitationMetadata, retDocDirectCitationMetadata); } //------------------------ PRIVATE -------------------------- private ReferenceMetadata buildReferenceMetadata(Integer position, Map<CharSequence, CharSequence> externalIds) { ReferenceBasicMetadata referenceBasicMetadata = ReferenceBasicMetadata.newBuilder() .setExternalIds(externalIds) .build(); ReferenceMetadata referenceMetadata = ReferenceMetadata.newBuilder() .setPosition(position) .setBasicMetadata(referenceBasicMetadata) .build(); return referenceMetadata; } private eu.dnetlib.iis.citationmatching.direct.schemas.ReferenceMetadata buildCitationReferenceMetadata(Integer position, Map<CharSequence, CharSequence> externalIdKeys) { return eu.dnetlib.iis.citationmatching.direct.schemas.ReferenceMetadata.newBuilder() .setPosition(position) .setExternalIds(externalIdKeys) .build(); } private Map<CharSequence, CharSequence> buildExternalIds(String ... idKeys) { Map<CharSequence, CharSequence> externalIds = Maps.newHashMap(); for (String id: idKeys) { externalIds.put(id, "value_for_" + id); } return externalIds; } }