/** * ============================================================================= * * 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; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Optional; import javax.annotation.Resource; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.orcid.core.BaseTest; import org.orcid.core.exception.DuplicatedGroupIdRecordException; import org.orcid.core.exception.GroupIdRecordNotFoundException; import org.orcid.core.exception.InvalidPutCodeException; import org.orcid.core.exception.OrcidValidationException; import org.orcid.jaxb.model.groupid_v2.GroupIdRecord; /** * @author Angel Montenegro */ public class GroupIdRecordManagerTest extends BaseTest { private static final List<String> DATA_FILES = Arrays.asList("/data/SecurityQuestionEntityData.xml", "/data/SourceClientDetailsEntityData.xml", "/data/ProfileEntityData.xml", "/data/ClientDetailsEntityData.xml"); @Resource private GroupIdRecordManager groupIdRecordManager; @BeforeClass public static void initDBUnitData() throws Exception { initDBUnitData(DATA_FILES); } @AfterClass public static void removeDBUnitData() throws Exception { List<String> reversedDataFiles = new ArrayList<String>(DATA_FILES); Collections.reverse(reversedDataFiles); removeDBUnitData(reversedDataFiles); } @Test public void testCreateDuplicateGroupIdRecords() { GroupIdRecord g1 = new GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId("orcid-generated:valid-group-id#1"); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); //Create the first one g1 = groupIdRecordManager.createGroupIdRecord(g1); Long putCode = g1.getPutCode(); //Try to create a duplicate try { g1.setPutCode(null); g1 = groupIdRecordManager.createGroupIdRecord(g1); fail(); } catch(DuplicatedGroupIdRecordException e) { } catch(Exception e) { fail(); } //Try to create a UPPER duplicate try { g1.setPutCode(null); g1.setGroupId("orcid-generated:VALID-GROUP-ID#1"); g1 = groupIdRecordManager.createGroupIdRecord(g1); fail(); } catch(DuplicatedGroupIdRecordException e) { } catch(Exception e) { fail(); } //Try to create a duplicate mixed cases try { g1.setPutCode(null); g1.setGroupId("orcid-generated:VaLiD-GrOuP-Id#1"); g1 = groupIdRecordManager.createGroupIdRecord(g1); fail(); } catch(DuplicatedGroupIdRecordException e) { } catch(Exception e) { fail(); } //Create a different one g1.setPutCode(null); g1.setGroupId("orcid-generated:valid-group-id#2"); GroupIdRecord g2 = groupIdRecordManager.createGroupIdRecord(g1); assertNotNull(g2); assertNotNull(g2.getPutCode()); assertTrue(!g2.getPutCode().equals(putCode)); assertEquals("orcid-generated:valid-group-id#2", g2.getGroupId()); //Try to create again a duplicate for any of the two existing try { g1.setPutCode(null); g1.setGroupId("orcid-generated:VaLiD-GrOuP-Id#1"); g1 = groupIdRecordManager.createGroupIdRecord(g1); fail(); } catch(DuplicatedGroupIdRecordException e) { } catch(Exception e) { fail(); } try { g1.setPutCode(null); g1.setGroupId("orcid-generated:VaLiD-GrOuP-Id#2"); g1 = groupIdRecordManager.createGroupIdRecord(g1); fail(); } catch(DuplicatedGroupIdRecordException e) { } catch(Exception e) { fail(); } groupIdRecordManager.deleteGroupIdRecord(putCode); groupIdRecordManager.deleteGroupIdRecord(g2.getPutCode()); } @Test public void testUpdateDuplicateGroupIdRecords() { String groupName = "Group # " + System.currentTimeMillis(); GroupIdRecord g1 = new GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId("orcid-generated:valid-group-id#1"); g1.setName(groupName); g1.setType("publisher"); //Create the first one g1 = groupIdRecordManager.createGroupIdRecord(g1); Long putCode1 = g1.getPutCode(); //Create another one g1.setPutCode(null); g1.setGroupId("orcid-generated:valid-group-id#2"); g1 = groupIdRecordManager.createGroupIdRecord(g1); Long putCode2 = g1.getPutCode(); //Create another one g1.setPutCode(null); g1.setGroupId("orcid-generated:valid-group-id#3"); g1 = groupIdRecordManager.createGroupIdRecord(g1); Long putCode3 = g1.getPutCode(); //Update #1 with an existing group id try { GroupIdRecord existingOne = groupIdRecordManager.findByGroupId("orcid-generated:valid-group-id#1").get(); existingOne.setGroupId("orcid-generated:valid-group-id#2"); existingOne.setDescription("updated-description"); groupIdRecordManager.updateGroupIdRecord(existingOne.getPutCode(), existingOne); fail(); } catch(DuplicatedGroupIdRecordException e) { } catch(Exception e) { fail(); } //Update #1 with an existing group id try { GroupIdRecord existingOne = groupIdRecordManager.findByGroupId("orcid-generated:valid-group-id#1").get(); existingOne.setGroupId("orcid-generated:valid-group-id#3"); existingOne.setDescription("updated-description"); groupIdRecordManager.updateGroupIdRecord(existingOne.getPutCode(), existingOne); fail(); } catch(DuplicatedGroupIdRecordException e) { } catch(Exception e) { fail(); } //Update #1 with a new group id GroupIdRecord existingOne = groupIdRecordManager.findByGroupId("orcid-generated:valid-group-id#1").get(); existingOne.setGroupId("orcid-generated:valid-group-id#1-updated"); existingOne.setDescription("updated-description"); existingOne = groupIdRecordManager.updateGroupIdRecord(existingOne.getPutCode(), existingOne); assertNotNull(existingOne); assertEquals(putCode1, existingOne.getPutCode()); assertEquals("orcid-generated:valid-group-id#1-updated", existingOne.getGroupId()); assertEquals("updated-description", existingOne.getDescription()); assertEquals(groupName, existingOne.getName()); //Delete them groupIdRecordManager.deleteGroupIdRecord(putCode1); groupIdRecordManager.deleteGroupIdRecord(putCode2); groupIdRecordManager.deleteGroupIdRecord(putCode3); } @Test public void testCreateUpdateGetDeleteGroupIdRecord(){ GroupIdRecord g1 = new GroupIdRecord(); g1.setDescription("Description"); g1.setGroupId("orcid-generated:valid-group-id"); g1.setName("Group # " + System.currentTimeMillis()); g1.setType("publisher"); //Test create g1 = groupIdRecordManager.createGroupIdRecord(g1); Long putCode = g1.getPutCode(); assertNotNull(putCode); //Test find assertTrue(groupIdRecordManager.exists(g1.getGroupId())); Optional<GroupIdRecord> existingByGroupId = groupIdRecordManager.findByGroupId(g1.getGroupId()); assertTrue(existingByGroupId.isPresent()); assertNotNull(existingByGroupId.get().getPutCode()); assertEquals(putCode, existingByGroupId.get().getPutCode()); assertEquals(g1.getGroupId(), existingByGroupId.get().getGroupId()); GroupIdRecord existingByPutCode = groupIdRecordManager.getGroupIdRecord(g1.getPutCode()); assertNotNull(existingByPutCode); assertNotNull(existingByPutCode.getPutCode()); assertEquals(putCode, existingByPutCode.getPutCode()); assertEquals(g1.getGroupId(), existingByPutCode.getGroupId()); //Test update with invalid value try { g1.setGroupId("invalid-group-id"); groupIdRecordManager.updateGroupIdRecord(g1.getPutCode(), g1); fail(); } catch(OrcidValidationException e) { assertEquals("Invalid group-id: '" + g1.getGroupId() + "'", e.getMessage()); } catch(Exception e) { fail(); } //Test update with valid value try { g1.setGroupId("orcid-generated:other-valid-group-id"); g1 = groupIdRecordManager.updateGroupIdRecord(g1.getPutCode(), g1); assertNotNull(g1); assertEquals("orcid-generated:other-valid-group-id", g1.getGroupId()); } catch(Exception e) { fail(); } //Test create with put code try { g1.setGroupId("orcid-generated:valid-group-id"); groupIdRecordManager.createGroupIdRecord(g1); fail(); } catch(InvalidPutCodeException e) { } catch(Exception e) { fail(); } //Test create with invalid group id try { g1.setPutCode(null); g1.setGroupId("other-invalid-group-id"); groupIdRecordManager.createGroupIdRecord(g1); fail(); } catch(OrcidValidationException e) { assertEquals("Invalid group-id: '" + g1.getGroupId() + "'", e.getMessage()); } catch(Exception e) { fail(); } //Test delete groupIdRecordManager.deleteGroupIdRecord(putCode); try { groupIdRecordManager.deleteGroupIdRecord(Long.valueOf(-1L)); } catch(GroupIdRecordNotFoundException e) { } catch(Exception e) { fail(); } } }