diff --git a/assertion-service/src/main/java/org/orcid/memberportal/service/assertion/services/AssertionService.java b/assertion-service/src/main/java/org/orcid/memberportal/service/assertion/services/AssertionService.java index 5cf1e638..e16c2b02 100644 --- a/assertion-service/src/main/java/org/orcid/memberportal/service/assertion/services/AssertionService.java +++ b/assertion-service/src/main/java/org/orcid/memberportal/service/assertion/services/AssertionService.java @@ -277,7 +277,8 @@ public void deleteById(String id, AssertionServiceUser user) throws RegistryDele String salesforceId = user.getSalesforceId(); checkAssertionAccess(assertion, salesforceId); - if (!StringUtils.isEmpty(assertion.getPutCode())) { + // don't bother trying to delete affiliations for deactivated / deprecated profiles in the registry + if (!StringUtils.isEmpty(assertion.getPutCode()) && !AssertionStatus.RECORD_DEACTIVATED_OR_DEPRECATED.name().equals(assertion.getStatus())) { LOG.info("Deleting assertion {} in ORCID registry", id); deleteAssertionFromOrcidRegistry(assertion); } diff --git a/assertion-service/src/test/java/org/orcid/memberportal/service/assertion/services/AssertionServiceTest.java b/assertion-service/src/test/java/org/orcid/memberportal/service/assertion/services/AssertionServiceTest.java index d6e0b234..1d336b12 100644 --- a/assertion-service/src/test/java/org/orcid/memberportal/service/assertion/services/AssertionServiceTest.java +++ b/assertion-service/src/test/java/org/orcid/memberportal/service/assertion/services/AssertionServiceTest.java @@ -1046,6 +1046,28 @@ void testDeleteByIdAlreadyDeletedInTheRegistry() throws org.json.JSONException, Mockito.verify(orcidAPIClient, Mockito.times(1)).deleteAffiliation(Mockito.anyString(), Mockito.eq("exchange-token"), Mockito.any(Assertion.class)); } + @Test + void testDeleteByIdDeprecatedOrDeactivated() throws org.json.JSONException, ClientProtocolException, IOException, RegistryDeleteFailureException, DeactivatedException, DeprecatedException { + Assertion assertion = getAssertionWithEmailAndPutCode("test@orcid.org", "1001"); + assertion.setSalesforceId("salesforce-id"); + assertion.setStatus(AssertionStatus.RECORD_DEACTIVATED_OR_DEPRECATED.name()); + + Mockito.when(assertionRepository.findById(Mockito.eq("id"))).thenReturn(Optional.of(assertion)); + Mockito.when(assertionsUserService.getLoggedInUserSalesforceId()).thenReturn("salesforce-id"); + Mockito.when(orcidRecordService.findOneByEmail(Mockito.eq("test@orcid.org"))).thenReturn(Optional.empty()); + Mockito.when(assertionRepository.countByEmailAndSalesforceId(Mockito.eq("test@orcid.org"), Mockito.eq(DEFAULT_SALESFORCE_ID))).thenReturn(2l); + Mockito.when(orcidRecordService.generateLinkForEmail("test@orcid.org")).thenReturn("don't care"); + Mockito.doNothing().when(assertionRepository).deleteById(Mockito.eq("id")); + + assertionService.deleteById("id", getUser()); + + Mockito.verify(assertionRepository, Mockito.times(1)).deleteById(Mockito.eq("id")); + Mockito.verify(orcidRecordService, Mockito.never()).deleteOrcidRecord(Mockito.any()); + Mockito.verify(assertionRepository, Mockito.times(1)).findById(Mockito.eq("id")); + Mockito.verify(orcidAPIClient, Mockito.never()).exchangeToken(Mockito.anyString(), Mockito.anyString()); + Mockito.verify(orcidAPIClient, Mockito.never()).deleteAffiliation(Mockito.anyString(), Mockito.eq("exchange-token"), Mockito.any(Assertion.class)); + } + @Test void testDeleteByIdWithRegistryDeleteFailure() throws org.json.JSONException, ClientProtocolException, IOException, RegistryDeleteFailureException, DeactivatedException, DeprecatedException { Assertion assertion = getAssertionWithEmailAndPutCode("test@orcid.org", "1001");