Skip to content

Commit 5130a9f

Browse files
Merge pull request #243 from pagopa/feature/SELC-6199
[SELC-6199] fix: update userMailUuid on onboarding
2 parents 4d68335 + 119c39b commit 5130a9f

File tree

2 files changed

+132
-10
lines changed

2 files changed

+132
-10
lines changed

apps/user-ms/src/main/java/it/pagopa/selfcare/user/service/UserServiceImpl.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -459,10 +459,11 @@ public Uni<String> createUserByUserId(AddUserRoleDto userDto, String userId, Log
459459
Map<String, Object> queryParameter = userUtils.retrieveMapForFilter(userInstitutionFilters, productFilters);
460460
return userInstitutionService.retrieveFirstFilteredUserInstitution(queryParameter)
461461
.onItem().transformToUni(userInstitution -> {
462-
if (Objects.nonNull(userInstitution)) {
462+
if (Optional.ofNullable(userInstitution).isPresent()) {
463463
log.info("User with userId: {} has already onboarded for product {}. Proceeding with check role", userId, userDto.getProduct().getProductId());
464464
PartyRole roleOnProduct = retrieveUserRoleOnProduct(userInstitution, userDto.getProduct().getProductId());
465-
return evaluateRoleAndCreateOrUpdateUserByUserId(userDto, userId, loggedUser, roleOnProduct);
465+
return checkAndUpdateUserMail(userInstitution, userDto.getUserMailUuid())
466+
.onItem().transformToUni(ignore -> evaluateRoleAndCreateOrUpdateUserByUserId(userDto, userId, loggedUser, roleOnProduct));
466467
} else {
467468
log.info("User with userId: {} has not onboarded for product {}. Proceeding with create", userId, userDto.getProduct().getProductId());
468469
return createOrUpdateUserByUserId(userDto, userId, loggedUser);
@@ -471,6 +472,20 @@ public Uni<String> createUserByUserId(AddUserRoleDto userDto, String userId, Log
471472
.onFailure().invoke(exception -> log.error("Error during createOrUpdateManagerByUserId for userId: {}, institutionId: {}: {}", userId, userDto.getInstitutionId(), exception.getMessage(), exception));
472473
}
473474

475+
/**
476+
* Check if the user's mail uuid is still the same on UserInstitution and update it if not
477+
*/
478+
private Uni<UserInstitution> checkAndUpdateUserMail(UserInstitution userInstitution, String userMailUuid) {
479+
if (userMailUuid == null || userMailUuid.equals(userInstitution.getUserMailUuid())) {
480+
log.info("UserMailUuid not changed for user {} and institution {}", userInstitution.getUserId(), userInstitution.getInstitutionId());
481+
return Uni.createFrom().item(userInstitution);
482+
}
483+
userInstitution.setUserMailUuid(userMailUuid);
484+
userInstitution.setUserMailUpdatedAt(OffsetDateTime.now());
485+
log.info("Updating userMailUuid for user {} and institution {}", userInstitution.getUserId(), userInstitution.getInstitutionId());
486+
return userInstitutionService.persistOrUpdate(userInstitution);
487+
}
488+
474489
/**
475490
* The evaluateRoleAndCreateOrUpdateUserByUserId method is designed to evaluate the role of a user for a specific product
476491
* and either create or update the user's role based on certain conditions.

apps/user-ms/src/test/java/it/pagopa/selfcare/user/service/UserServiceTest.java

Lines changed: 115 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@
2727
import it.pagopa.selfcare.user.entity.filter.OnboardedProductFilter;
2828
import it.pagopa.selfcare.user.entity.filter.UserInstitutionFilter;
2929
import it.pagopa.selfcare.user.exception.InvalidRequestException;
30-
import it.pagopa.selfcare.user.exception.UserRoleAlreadyPresentException;
3130
import it.pagopa.selfcare.user.exception.ResourceNotFoundException;
31+
import it.pagopa.selfcare.user.exception.UserRoleAlreadyPresentException;
3232
import it.pagopa.selfcare.user.mapper.UserMapper;
3333
import it.pagopa.selfcare.user.model.LoggedUser;
3434
import it.pagopa.selfcare.user.model.OnboardedProduct;
@@ -48,13 +48,7 @@
4848
import org.mockito.ArgumentCaptor;
4949
import org.mockito.Mockito;
5050
import org.mockito.Spy;
51-
import org.openapi.quarkus.user_registry_json.model.BirthDateCertifiableSchema;
52-
import org.openapi.quarkus.user_registry_json.model.EmailCertifiableSchema;
53-
import org.openapi.quarkus.user_registry_json.model.FamilyNameCertifiableSchema;
54-
import org.openapi.quarkus.user_registry_json.model.NameCertifiableSchema;
55-
import org.openapi.quarkus.user_registry_json.model.UserResource;
56-
import org.openapi.quarkus.user_registry_json.model.UserSearchDto;
57-
import org.openapi.quarkus.user_registry_json.model.WorkContactResource;
51+
import org.openapi.quarkus.user_registry_json.model.*;
5852

5953
import java.time.LocalDate;
6054
import java.time.OffsetDateTime;
@@ -1487,6 +1481,119 @@ void createManagerByUserIdUserInstitutionNotFound() {
14871481
.assertCompleted();
14881482
}
14891483

1484+
@Test
1485+
void createUserByUserIdWithUpdatedMail() {
1486+
AddUserRoleDto addUserRoleDto = new AddUserRoleDto();
1487+
addUserRoleDto.setInstitutionId("institutionId");
1488+
addUserRoleDto.setUserMailUuid("newUserMailUuid");
1489+
AddUserRoleDto.Product addUserRoleProduct = new AddUserRoleDto.Product();
1490+
addUserRoleProduct.setProductId("test");
1491+
addUserRoleProduct.setRole(MANAGER.name());
1492+
addUserRoleDto.setProduct(addUserRoleProduct);
1493+
1494+
LoggedUser loggedUser = LoggedUser.builder().build();
1495+
OnboardedProduct product = new OnboardedProduct();
1496+
product.setProductId("test");
1497+
product.setProductRole("admin");
1498+
product.setRole(MANAGER);
1499+
product.setStatus(OnboardedProductState.ACTIVE);
1500+
1501+
UserInstitution userInstitution = new UserInstitution();
1502+
OnboardedProduct onboardedProduct = new OnboardedProduct();
1503+
onboardedProduct.setStatus(OnboardedProductState.ACTIVE);
1504+
List<OnboardedProduct> products = new ArrayList<>();
1505+
products.add(product);
1506+
products.add(onboardedProduct);
1507+
userInstitution.setProducts(products);
1508+
userInstitution.setUserMailUuid("oldUserMailUuid");
1509+
1510+
when(userInstitutionService.retrieveFirstFilteredUserInstitution(anyMap()))
1511+
.thenReturn(Uni.createFrom().item(userInstitution));
1512+
when(userInstitutionService.persistOrUpdate(userInstitution))
1513+
.thenReturn(Uni.createFrom().item(userInstitution));
1514+
1515+
userService.createUserByUserId(addUserRoleDto, "userId", loggedUser)
1516+
.subscribe().withSubscriber(UniAssertSubscriber.create())
1517+
.assertFailedWith(UserRoleAlreadyPresentException.class);
1518+
assertEquals("newUserMailUuid", userInstitution.getUserMailUuid());
1519+
assertNotNull(userInstitution.getUserMailUpdatedAt());
1520+
}
1521+
1522+
@Test
1523+
void createUserByUserIdWithoutUpdatedMail() {
1524+
AddUserRoleDto addUserRoleDto = new AddUserRoleDto();
1525+
addUserRoleDto.setInstitutionId("institutionId");
1526+
addUserRoleDto.setUserMailUuid("userMailUuid");
1527+
AddUserRoleDto.Product addUserRoleProduct = new AddUserRoleDto.Product();
1528+
addUserRoleProduct.setProductId("test");
1529+
addUserRoleProduct.setRole(MANAGER.name());
1530+
addUserRoleDto.setProduct(addUserRoleProduct);
1531+
1532+
LoggedUser loggedUser = LoggedUser.builder().build();
1533+
OnboardedProduct product = new OnboardedProduct();
1534+
product.setProductId("test");
1535+
product.setProductRole("admin");
1536+
product.setRole(MANAGER);
1537+
product.setStatus(OnboardedProductState.ACTIVE);
1538+
1539+
UserInstitution userInstitution = new UserInstitution();
1540+
OnboardedProduct onboardedProduct = new OnboardedProduct();
1541+
onboardedProduct.setStatus(OnboardedProductState.ACTIVE);
1542+
List<OnboardedProduct> products = new ArrayList<>();
1543+
products.add(product);
1544+
products.add(onboardedProduct);
1545+
userInstitution.setProducts(products);
1546+
userInstitution.setUserMailUuid("userMailUuid");
1547+
1548+
when(userInstitutionService.retrieveFirstFilteredUserInstitution(anyMap()))
1549+
.thenReturn(Uni.createFrom().item(userInstitution));
1550+
when(userInstitutionService.persistOrUpdate(userInstitution))
1551+
.thenReturn(Uni.createFrom().item(userInstitution));
1552+
1553+
userService.createUserByUserId(addUserRoleDto, "userId", loggedUser)
1554+
.subscribe().withSubscriber(UniAssertSubscriber.create())
1555+
.assertFailedWith(UserRoleAlreadyPresentException.class);
1556+
assertEquals("userMailUuid", userInstitution.getUserMailUuid());
1557+
assertNull(userInstitution.getUserMailUpdatedAt());
1558+
}
1559+
1560+
@Test
1561+
void createUserByUserIdWithNullUserMailFromRequest() {
1562+
AddUserRoleDto addUserRoleDto = new AddUserRoleDto();
1563+
addUserRoleDto.setInstitutionId("institutionId");
1564+
AddUserRoleDto.Product addUserRoleProduct = new AddUserRoleDto.Product();
1565+
addUserRoleProduct.setProductId("test");
1566+
addUserRoleProduct.setRole(MANAGER.name());
1567+
addUserRoleDto.setProduct(addUserRoleProduct);
1568+
1569+
LoggedUser loggedUser = LoggedUser.builder().build();
1570+
OnboardedProduct product = new OnboardedProduct();
1571+
product.setProductId("test");
1572+
product.setProductRole("admin");
1573+
product.setRole(MANAGER);
1574+
product.setStatus(OnboardedProductState.ACTIVE);
1575+
1576+
UserInstitution userInstitution = new UserInstitution();
1577+
OnboardedProduct onboardedProduct = new OnboardedProduct();
1578+
onboardedProduct.setStatus(OnboardedProductState.ACTIVE);
1579+
List<OnboardedProduct> products = new ArrayList<>();
1580+
products.add(product);
1581+
products.add(onboardedProduct);
1582+
userInstitution.setProducts(products);
1583+
userInstitution.setUserMailUuid("userMailUuid");
1584+
1585+
when(userInstitutionService.retrieveFirstFilteredUserInstitution(anyMap()))
1586+
.thenReturn(Uni.createFrom().item(userInstitution));
1587+
when(userInstitutionService.persistOrUpdate(userInstitution))
1588+
.thenReturn(Uni.createFrom().item(userInstitution));
1589+
1590+
userService.createUserByUserId(addUserRoleDto, "userId", loggedUser)
1591+
.subscribe().withSubscriber(UniAssertSubscriber.create())
1592+
.assertFailedWith(UserRoleAlreadyPresentException.class);
1593+
assertEquals("userMailUuid", userInstitution.getUserMailUuid());
1594+
assertNull(userInstitution.getUserMailUpdatedAt());
1595+
}
1596+
14901597
private UserInstitution createUserInstitutionWithoutManagerRole() {
14911598
UserInstitution userInstitution = new UserInstitution();
14921599
OnboardedProduct onboardedProduct = new OnboardedProduct();

0 commit comments

Comments
 (0)