From 1bd3e001c77433d9d0a5ac1327e62ed5decb6737 Mon Sep 17 00:00:00 2001 From: Daniel Palafox Date: Tue, 15 Aug 2023 13:55:49 +0700 Subject: [PATCH 1/2] fix: Sort affiliations by created date --- .../data/OrgAffiliationEntityData.xml | 100 +++++++++++++++++- .../main/resources/data/ProfileEntityData.xml | 27 ++++- .../resources/data/RecordNameEntityData.xml | 15 ++- .../controllers/PublicRecordController.java | 35 +++--- .../PublicRecordControllerTest.java | 10 ++ 5 files changed, 168 insertions(+), 19 deletions(-) diff --git a/orcid-test/src/main/resources/data/OrgAffiliationEntityData.xml b/orcid-test/src/main/resources/data/OrgAffiliationEntityData.xml index 684a6f9f29e..47226910685 100644 --- a/orcid-test/src/main/resources/data/OrgAffiliationEntityData.xml +++ b/orcid-test/src/main/resources/data/OrgAffiliationEntityData.xml @@ -1142,4 +1142,102 @@ visibility="PRIVATE" client_source_id="APP-5555555555555555" /> - \ No newline at end of file + + + + + + + + + + + diff --git a/orcid-test/src/main/resources/data/ProfileEntityData.xml b/orcid-test/src/main/resources/data/ProfileEntityData.xml index 3f516a1d61a..c2efa79aed1 100644 --- a/orcid-test/src/main/resources/data/ProfileEntityData.xml +++ b/orcid-test/src/main/resources/data/ProfileEntityData.xml @@ -435,6 +435,26 @@ using_2fa="true" /> + + + + - \ No newline at end of file + diff --git a/orcid-test/src/main/resources/data/RecordNameEntityData.xml b/orcid-test/src/main/resources/data/RecordNameEntityData.xml index 751f059399d..ce8c718ec28 100644 --- a/orcid-test/src/main/resources/data/RecordNameEntityData.xml +++ b/orcid-test/src/main/resources/data/RecordNameEntityData.xml @@ -207,5 +207,16 @@ given_names="Given names" family_name="Family name" visibility="PRIVATE" - /> - \ No newline at end of file + /> + + + diff --git a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordController.java b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordController.java index b77278a2cfd..d089fd37d32 100644 --- a/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordController.java +++ b/orcid-web/src/main/java/org/orcid/frontend/web/controllers/PublicRecordController.java @@ -1,8 +1,5 @@ package org.orcid.frontend.web.controllers; -import com.fasterxml.jackson.databind.ser.FilterProvider; -import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; -import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; import org.orcid.core.exception.DeactivatedException; import org.orcid.core.exception.LockedException; import org.orcid.core.exception.OrcidDeprecatedException; @@ -69,7 +66,6 @@ import org.orcid.pojo.summary.ExternalIdentifiersSummary; import org.orcid.pojo.summary.RecordSummary; import org.orcid.utils.DateUtils; -import org.springframework.http.converter.json.MappingJacksonValue; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; @@ -81,6 +77,8 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.Comparator; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.List; @@ -189,7 +187,7 @@ PublicRecord getPublicRecord(@PathVariable("orcid") String orcid) { } catch (OrcidDeprecatedException e) { isDeprecated = true; } catch (OrcidNoResultException e) { - return publicRecord; + return publicRecord; } publicRecord = getRecord(orcid); @@ -355,7 +353,7 @@ PublicRecord getRecord(String orcid) { return recordSummary; } else { recordSummary = getSummary(orcid); - recordSummary.setStatus("active"); + recordSummary.setStatus("active"); return recordSummary; } } @@ -393,8 +391,9 @@ RecordSummary getSummary(String orcid) { List employmentAffiliations = new ArrayList<>(); - if (groupedEmployments.size() > 0) { + sortAffiliationsByCreatedDate(groupedEmployments); + if (groupedEmployments.size() > 0) { Stream employmentsList = groupedEmployments.stream().limit(3); employmentsList.forEach(e -> employmentAffiliations.add(AffiliationSummary.valueOf(e.getDefaultAffiliation(), orcid, "employment"))); } @@ -486,15 +485,16 @@ RecordSummary getSummary(String orcid) { private List retrieveProfessionalActivities(AffiliationGroupContainer groupedAffiliations, String orcid) { List professionalActivities = new ArrayList<>(); - List membershipGroupedAffiliations = groupedAffiliations.getAffiliationGroups().get(AffiliationType.MEMBERSHIP); - List serviceGroupedAffiliations = groupedAffiliations.getAffiliationGroups().get(AffiliationType.SERVICE); - List invitedPositionGroupedAffiliations = groupedAffiliations.getAffiliationGroups().get(AffiliationType.INVITED_POSITION); - List distinctionGroupedAffiliations = groupedAffiliations.getAffiliationGroups().get(AffiliationType.DISTINCTION); + List affiliationGroupForms = new ArrayList<>(); + + affiliationGroupForms.addAll(groupedAffiliations.getAffiliationGroups().get(AffiliationType.MEMBERSHIP)); + affiliationGroupForms.addAll(groupedAffiliations.getAffiliationGroups().get(AffiliationType.SERVICE)); + affiliationGroupForms.addAll(groupedAffiliations.getAffiliationGroups().get(AffiliationType.INVITED_POSITION)); + affiliationGroupForms.addAll(groupedAffiliations.getAffiliationGroups().get(AffiliationType.DISTINCTION)); - membershipGroupedAffiliations.forEach(e -> professionalActivities.add(AffiliationSummary.valueOf(e.getDefaultAffiliation(), orcid, "membership"))); - serviceGroupedAffiliations.forEach(e -> professionalActivities.add(AffiliationSummary.valueOf(e.getDefaultAffiliation(), orcid, "service"))); - invitedPositionGroupedAffiliations.forEach(e -> professionalActivities.add(AffiliationSummary.valueOf(e.getDefaultAffiliation(), orcid, "invited-position"))); - distinctionGroupedAffiliations.forEach(e -> professionalActivities.add(AffiliationSummary.valueOf(e.getDefaultAffiliation(), orcid, "distinction"))); + sortAffiliationsByCreatedDate(affiliationGroupForms); + + affiliationGroupForms.forEach(e -> professionalActivities.add(AffiliationSummary.valueOf(e.getDefaultAffiliation(), orcid, e.getAffiliationType().value()))); return professionalActivities; } @@ -508,4 +508,9 @@ private String formatDate(XMLGregorianCalendar xmlGregorianCalendar) { private Long getLastModifiedTime(String orcid) { return profileEntityManager.getLastModified(orcid); } + + private void sortAffiliationsByCreatedDate(List affiliationGroupForms) { + affiliationGroupForms.sort(Comparator.comparing(a -> a.getDefaultAffiliation().getCreatedDate().toJavaDate())); + Collections.reverse(affiliationGroupForms); + } } diff --git a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java index 640e0a3a64e..131a2c66ef1 100644 --- a/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java +++ b/orcid-web/src/test/java/org/orcid/frontend/web/controllers/PublicRecordControllerTest.java @@ -222,4 +222,14 @@ public void testGetRecordSummaryPrivateName() { assertNull(record.getName()); } + + @Test + public void testGetRecordSummaryProfessionalActivitiesSortedByCreationDate() { + RecordSummary record = publicRecordController.getSummaryRecord("0000-0000-0000-0008"); + + assertEquals(5, record.getProfessionalActivitiesCount()); + assertEquals("2023-01-05", record.getProfessionalActivities().get(0).getStartDate()); + assertEquals("2023-01-04", record.getProfessionalActivities().get(1).getStartDate()); + assertEquals("2023-01-03", record.getProfessionalActivities().get(2).getStartDate()); + } } From 3d49b8af4f3a55eb3ed691674d9aa1f0ad48714b Mon Sep 17 00:00:00 2001 From: Daniel Palafox Date: Wed, 16 Aug 2023 23:09:20 +0700 Subject: [PATCH 2/2] fix: Fix test errors caused by adding more affiliations in test data --- .../persistence/dao/OrgDisambiguatedDaoTest.java | 2 +- .../org/orcid/persistence/dao/ProfileDaoTest.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgDisambiguatedDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgDisambiguatedDaoTest.java index 561b5d2e3b8..f763e1f3869 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgDisambiguatedDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/OrgDisambiguatedDaoTest.java @@ -50,7 +50,7 @@ public void testFindDisambuguatedOrgsWithIncorrectPopularity() { assertEquals(1, results.size()); Pair pair = results.get(0); assertEquals(1, pair.getLeft().longValue()); - assertEquals(48, pair.getRight().intValue()); + assertEquals(50, pair.getRight().intValue()); } @Test diff --git a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java index 710c6ec766e..6a86cede3e0 100644 --- a/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java +++ b/orcid-persistence/src/test/java/org/orcid/persistence/dao/ProfileDaoTest.java @@ -104,9 +104,9 @@ public void testfindById() { public void testFindAll() { List all = profileDao.getAll(); assertNotNull(all); - assertEquals(22, all.size()); + assertEquals(23, all.size()); Long count = profileDao.countAll(); - assertEquals(Long.valueOf(22), count); + assertEquals(Long.valueOf(23), count); } @Test @@ -127,7 +127,7 @@ public void testInsert() throws DataSetException { assertEquals(profile.getDateCreated(), profile.getLastModified()); Long count = profileDao.countAll(); - assertEquals(Long.valueOf(23), count); + assertEquals(Long.valueOf(24), count); profile = profileDao.find(newOrcid); assertNotNull(profile); @@ -151,7 +151,7 @@ public void testInsertWithPrimaryInstitutions() throws DataSetException { assertNotNull(profile.getLastModified()); Long count = profileDao.countAll(); - assertEquals(Long.valueOf(23), count); + assertEquals(Long.valueOf(24), count); profile = profileDao.find(newOrcid); assertNotNull(profile); @@ -177,7 +177,7 @@ public void testInsertWithInstitutionDepartments() throws DataSetException { assertNotNull(retrievedProfile.getLastModified()); Long count = profileDao.countAll(); - assertEquals(Long.valueOf(23), count); + assertEquals(Long.valueOf(24), count); } @Test @@ -278,12 +278,12 @@ public void testUpdateIndexingStatus() { public void testGetConfirmedProfileCount() { String orcid = "4444-4444-4444-4446"; Long confirmedProfileCount = profileDao.getConfirmedProfileCount(); - assertEquals(Long.valueOf(22), confirmedProfileCount); + assertEquals(Long.valueOf(23), confirmedProfileCount); ProfileEntity profileEntity = profileDao.find(orcid); profileEntity.setCompletedDate(null); profileDao.persist(profileEntity); confirmedProfileCount = profileDao.getConfirmedProfileCount(); - assertEquals(Long.valueOf(21), confirmedProfileCount); + assertEquals(Long.valueOf(22), confirmedProfileCount); } @Test