package eu.dnetlib.iis.wf.affmatching.match.voter; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.List; import java.util.function.Function; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; import com.google.common.collect.Lists; import eu.dnetlib.iis.wf.affmatching.model.AffMatchAffiliation; import eu.dnetlib.iis.wf.affmatching.model.AffMatchOrganization; /** * @author madryk */ @RunWith(MockitoJUnitRunner.class) public class SectionedNameLevenshteinMatchVoterTest { @InjectMocks private SectionedNameLevenshteinMatchVoter voter = new SectionedNameLevenshteinMatchVoter(0.9); @Mock private Function<AffMatchOrganization, List<String>> getOrgNamesFunction; private AffMatchAffiliation affiliation = new AffMatchAffiliation("DOC1", 1); private AffMatchOrganization organization = new AffMatchOrganization("ORG1"); //------------------------ TESTS -------------------------- @Test public void voteMatch_match_exact_single_sectioned() { // given affiliation.setOrganizationName("philipps universitat marburg"); resetOrgNames("philipps universitat marburg"); // execute & assert assertTrue(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_match_exact_single_sectioned___many_orgs() { // given affiliation.setOrganizationName("philipps universitat marburg"); resetOrgNames("some other inst", "philipps universitat marburg"); // execute & assert assertTrue(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_match_similar_single_sectioned() { // given affiliation.setOrganizationName("philipps university marburg"); resetOrgNames("philipps universitat marburg"); // execute & assert assertTrue(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_match_similar_single_sectioned___many_orgs() { // given affiliation.setOrganizationName("philipps university marburg"); resetOrgNames("filips polska", "philipps universitat marburg", "university of warsaw"); // execute & assert assertTrue(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_match_exact_one_section() { // given affiliation.setOrganizationName("center for human genetics, philipps universitat marburg"); resetOrgNames("philipps universitat marburg"); // execute & assert assertTrue(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_match_similar_one_section() { // given affiliation.setOrganizationName("center for human genetics, philipps university marburg"); resetOrgNames("philipps universitat marburg"); // execute & assert assertTrue(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_match_similar_multi_sections() { // given affiliation.setOrganizationName("center for human genetics, philipps university marburg"); resetOrgNames("philipps universitat marburg, center for human genetic"); // execute & assert assertTrue(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_match_similar_multi_sections___many_orgs() { // given affiliation.setOrganizationName("center for human genetics, philipps university marburg"); resetOrgNames("phillips univesity, centre for biology", "philipps universitat marburg, center for human genetic", "yet another university"); // execute & assert assertTrue(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_dont_match_not_similar_single_sectioned() { // given affiliation.setOrganizationName("philips university marburg"); resetOrgNames("philipps universitat marburg"); // levenshtein distance: 3; similarity: 0.89 // execute & assert assertFalse(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_dont_match_not_similar_single_sectioned__many_orgs() { // given affiliation.setOrganizationName("philips university marburg"); resetOrgNames("university of berlin", "philipps universitat marburg"); // levenshtein distance: 3; similarity: 0.89 // execute & assert assertFalse(voter.voteMatch(affiliation, organization)); } @Test public void voteMatch_dont_match_not_similar_multi_sections() { // given affiliation.setOrganizationName("center for human genetics, philipps university marburg"); resetOrgNames("philipps universitat marburg, center human genetics"); // levenshtein distance: 2; similarity: 0.92 (university section) // levenshtein distance: 4; similarity: 0.81 (center section) // execute & assert assertFalse(voter.voteMatch(affiliation, organization)); } //------------------------ PRIVATE -------------------------- private void resetOrgNames(String... orgNames) { Mockito.when(getOrgNamesFunction.apply(organization)).thenReturn(Lists.newArrayList(orgNames)); } }