/** * ============================================================================= * * ORCID (R) Open Source * http://orcid.org * * Copyright (c) 2012-2014 ORCID, Inc. * Licensed under an MIT-Style License (MIT) * http://orcid.org/open-source-license * * This copyright and license information (including a link to the full license) * shall be included in its entirety in all copies or substantial portion of * the software. * * ============================================================================= */ package org.orcid.core.manager.validator; import static org.junit.Assert.fail; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.Test; import org.junit.runner.RunWith; import org.orcid.core.exception.InvalidPutCodeException; import org.orcid.core.exception.OrcidValidationException; import org.orcid.core.exception.PutCodeRequiredException; import org.orcid.core.exception.VisibilityMismatchException; import org.orcid.jaxb.model.common_v2.Url; import org.orcid.jaxb.model.common_v2.Visibility; import org.orcid.jaxb.model.record_v2.PersonExternalIdentifier; import org.orcid.jaxb.model.record_v2.Relationship; import org.orcid.persistence.jpa.entities.SourceEntity; import org.orcid.test.OrcidJUnit4ClassRunner; import org.springframework.test.context.ContextConfiguration; @RunWith(OrcidJUnit4ClassRunner.class) @ContextConfiguration(locations = { "classpath:orcid-core-context.xml" }) public class PersonValidatorTest { @Test public void validateExternalIdentifierTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, true); } @Test(expected = OrcidValidationException.class) public void validateExternalIdentifier_invalidTypeTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setType(null); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, true); fail(); } @Test(expected = OrcidValidationException.class) public void validateExternalIdentifier_invalidValueTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setValue(null); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, true); fail(); } @Test(expected = OrcidValidationException.class) public void validateExternalIdentifier_invalidRelationship1_flagOnTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setRelationship(null); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, true); fail(); } @Test(expected = OrcidValidationException.class) public void validateExternalIdentifier_invalidRelationship2_flagOnTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setRelationship(Relationship.PART_OF); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, true); fail(); } @Test public void validateExternalIdentifier_invalidRelationship1_flagOffTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setRelationship(null); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, false); } @Test public void validateExternalIdentifier_invalidRelationship2_flagOffTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setRelationship(Relationship.PART_OF); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, false); } @Test(expected = OrcidValidationException.class) public void validateExternalIdentifier_invalidUrl_emptyUrlTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setUrl(new Url()); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, true); fail(); } @Test(expected = OrcidValidationException.class) public void validateExternalIdentifier_invalidUrl_nullUrlTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setUrl(null); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, true); fail(); } @Test(expected = InvalidPutCodeException.class) public void validateExternalIdentifier_invalidPutCodeOnCreateTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setPutCode(1L); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), true, true, Visibility.PUBLIC, true); fail(); } @Test(expected = PutCodeRequiredException.class) public void validateExternalIdentifier_invalidPutCodeOnUpdateTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setPutCode(null); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), false, true, Visibility.PUBLIC, true); fail(); } @Test(expected = VisibilityMismatchException.class) public void validateExternalIdentifier_visibilityDoesntChangeTest() { PersonExternalIdentifier extId = getPersonExternalIdentifier(); extId.setPutCode(1L); extId.setVisibility(Visibility.LIMITED); PersonValidator.validateExternalIdentifier(extId, getSourceEntity(), false, true, Visibility.PUBLIC, true); fail(); } private PersonExternalIdentifier getPersonExternalIdentifier() { PersonExternalIdentifier extId = new PersonExternalIdentifier(); extId.setRelationship(Relationship.SELF); extId.setType("doi"); extId.setUrl(new Url("http://test.orcid.org")); extId.setValue("extId1"); extId.setVisibility(Visibility.PUBLIC); return extId; } private SourceEntity getSourceEntity() { SourceEntity source = mock(SourceEntity.class); when(source.getSourceName()).thenReturn("source name"); return source; } }