From 91959896062287ba607adeee0781e63404c58fb5 Mon Sep 17 00:00:00 2001 From: flaminiaScarciofolo Date: Mon, 15 Apr 2024 14:29:37 +0200 Subject: [PATCH 1/2] [SELC-4483] Set institution description and institutionRootname when call userApi to create userRole --- .../connector/api/UserApiConnector.java | 6 +-- .../connector/rest/UserConnectorImpl.java | 39 +++++++++++++------ .../connector/rest/UserConnectorImplTest.java | 21 ++++++++-- .../dashboard/core/UserV2ServiceImpl.java | 11 +++--- .../dashboard/core/UserV2ServiceImplTest.java | 8 ++-- 5 files changed, 58 insertions(+), 27 deletions(-) diff --git a/connector-api/src/main/java/it/pagopa/selfcare/dashboard/connector/api/UserApiConnector.java b/connector-api/src/main/java/it/pagopa/selfcare/dashboard/connector/api/UserApiConnector.java index a02449adf..62115c55f 100644 --- a/connector-api/src/main/java/it/pagopa/selfcare/dashboard/connector/api/UserApiConnector.java +++ b/connector-api/src/main/java/it/pagopa/selfcare/dashboard/connector/api/UserApiConnector.java @@ -1,8 +1,8 @@ package it.pagopa.selfcare.dashboard.connector.api; +import it.pagopa.selfcare.dashboard.connector.model.institution.Institution; import it.pagopa.selfcare.dashboard.connector.model.institution.InstitutionBase; import it.pagopa.selfcare.dashboard.connector.model.user.*; -import it.pagopa.selfcare.dashboard.connector.model.user.MutableUserFieldsDto; import it.pagopa.selfcare.dashboard.connector.model.user.User; import it.pagopa.selfcare.dashboard.connector.model.user.UserInfo; import it.pagopa.selfcare.dashboard.connector.model.user.UserInstitution; @@ -35,8 +35,8 @@ public interface UserApiConnector { List retrieveFilteredUser(String userId, String institutionId, String productId); - String createOrUpdateUserByFiscalCode(String institutionId, String productId, UserToCreate userDto, List role); + String createOrUpdateUserByFiscalCode(Institution institution, String productId, UserToCreate userDto, List role); - void createOrUpdateUserByUserId(String institutionId, String productId, String userId, List role); + void createOrUpdateUserByUserId(Institution institution, String productId, String userId, List role); } diff --git a/connector/rest/src/main/java/it/pagopa/selfcare/dashboard/connector/rest/UserConnectorImpl.java b/connector/rest/src/main/java/it/pagopa/selfcare/dashboard/connector/rest/UserConnectorImpl.java index 51300b7b0..392cc9ae3 100644 --- a/connector/rest/src/main/java/it/pagopa/selfcare/dashboard/connector/rest/UserConnectorImpl.java +++ b/connector/rest/src/main/java/it/pagopa/selfcare/dashboard/connector/rest/UserConnectorImpl.java @@ -4,6 +4,7 @@ import it.pagopa.selfcare.commons.base.security.PartyRole; import it.pagopa.selfcare.dashboard.connector.api.UserApiConnector; import it.pagopa.selfcare.dashboard.connector.exception.ResourceNotFoundException; +import it.pagopa.selfcare.dashboard.connector.model.institution.Institution; import it.pagopa.selfcare.dashboard.connector.model.institution.InstitutionBase; import it.pagopa.selfcare.dashboard.connector.model.user.User; import it.pagopa.selfcare.dashboard.connector.model.user.*; @@ -193,27 +194,34 @@ private List getValidUserStates() { } @Override - public String createOrUpdateUserByFiscalCode(String institutionId, String productId, UserToCreate userDto, List roles) { + public String createOrUpdateUserByFiscalCode(Institution institution, String productId, UserToCreate userDto, List roles) { log.trace("createOrUpdateUserByFiscalCode start"); log.debug("createOrUpdateUserByFiscalCode userDto = {}", userDto); if(roles == null || roles.isEmpty()) { throw new IllegalArgumentException("Role list cannot be empty"); } - CreateUserDto createUserDto = buildCreateUserDto(institutionId, productId, userDto, roles); + CreateUserDto createUserDto = buildCreateUserDto(institution, productId, userDto, roles); String userId = userApiRestClient._usersPost(createUserDto).getBody(); log.trace("createOrUpdateUserByFiscalCode end"); return userId; } - private CreateUserDto buildCreateUserDto(String institutionId, String productId, UserToCreate userDto, List roles) { - return CreateUserDto.builder() - .institutionId(institutionId) + private CreateUserDto buildCreateUserDto(Institution institution, String productId, UserToCreate userDto, List roles) { + var builder = CreateUserDto.builder() + .institutionId(institution.getId()) + .institutionDescription(institution.getDescription()) .user(buildUser(userDto)) - .product(buildProduct(productId, roles)) - .build(); + .product(buildProduct(productId, roles)); + + if (!Objects.isNull(institution.getRootParent())) { + builder.institutionRootName(institution.getRootParent().getDescription()); + } + + return builder.build(); } + private it.pagopa.selfcare.user.generated.openapi.v1.dto.User buildUser(UserToCreate userDto) { return it.pagopa.selfcare.user.generated.openapi.v1.dto.User.builder() .fiscalCode(userDto.getTaxCode()) @@ -231,17 +239,24 @@ private Product1 buildProduct(String productId, List roles) { + public void createOrUpdateUserByUserId(Institution institution, String productId, String userId, List roles) { log.trace("createOrUpdateUserByUserId start"); - AddUserRoleDto addUserRoleDto = AddUserRoleDto.builder() - .institutionId(institutionId) + var addUserRoleDtoBuilder = AddUserRoleDto.builder() + .institutionId(institution.getId()) + .institutionDescription(institution.getDescription()) .product(Product.builder() .productRoles(roles.stream().map(it.pagopa.selfcare.dashboard.connector.model.user.CreateUserDto.Role::getProductRole).toList()) .role(it.pagopa.selfcare.user.generated.openapi.v1.dto.PartyRole.valueOf(roles.get(0).getPartyRole().name())) .productId(productId) - .build()) - .build(); + .build()); + + if(!Objects.isNull(institution.getRootParent())){ + addUserRoleDtoBuilder.institutionRootName(institution.getRootParent().getDescription()); + } + + AddUserRoleDto addUserRoleDto = addUserRoleDtoBuilder.build(); + userApiRestClient._usersUserIdPost(userId, addUserRoleDto); log.trace("createOrUpdateUserByUserId end"); } diff --git a/connector/rest/src/test/java/it/pagopa/selfcare/dashboard/connector/rest/UserConnectorImplTest.java b/connector/rest/src/test/java/it/pagopa/selfcare/dashboard/connector/rest/UserConnectorImplTest.java index b9bf4d726..b1e458239 100644 --- a/connector/rest/src/test/java/it/pagopa/selfcare/dashboard/connector/rest/UserConnectorImplTest.java +++ b/connector/rest/src/test/java/it/pagopa/selfcare/dashboard/connector/rest/UserConnectorImplTest.java @@ -2,9 +2,10 @@ import it.pagopa.selfcare.commons.base.security.SelfCareAuthority; import it.pagopa.selfcare.dashboard.connector.exception.ResourceNotFoundException; +import it.pagopa.selfcare.dashboard.connector.model.institution.Institution; import it.pagopa.selfcare.dashboard.connector.model.institution.InstitutionBase; +import it.pagopa.selfcare.dashboard.connector.model.institution.RootParentResponse; import it.pagopa.selfcare.dashboard.connector.model.user.CreateUserDto; -import it.pagopa.selfcare.dashboard.connector.model.user.MutableUserFieldsDto; import it.pagopa.selfcare.dashboard.connector.model.user.User; import it.pagopa.selfcare.dashboard.connector.model.user.*; import it.pagopa.selfcare.dashboard.connector.rest.client.UserApiRestClient; @@ -363,8 +364,15 @@ void testCreateOrUpdateUserByFiscalCode() { CreateUserDto.Role role2 = new CreateUserDto.Role(); role2.setPartyRole(it.pagopa.selfcare.commons.base.security.PartyRole.MANAGER); role2.setProductRole("admin2"); + + RootParentResponse response = new RootParentResponse(); + response.setDescription("rootDescription"); + Institution institution = new Institution(); + institution.setId("id"); + institution.setDescription("description"); + institution.setRootParent(response); // Act - userConnector.createOrUpdateUserByFiscalCode("institutionId", "productId", userDto, List.of(role, role2)); + userConnector.createOrUpdateUserByFiscalCode(institution, "productId", userDto, List.of(role, role2)); // Assert that nothing has changed verify(userApiRestClient)._usersPost(Mockito.any()); @@ -384,8 +392,15 @@ void testCreateOrUpdateUserByUserId() { role.setPartyRole(it.pagopa.selfcare.commons.base.security.PartyRole.MANAGER); role.setProductRole("admin"); + RootParentResponse response = new RootParentResponse(); + response.setDescription("rootDescription"); + Institution institution = new Institution(); + institution.setId("id"); + institution.setDescription("description"); + institution.setRootParent(response); + // Act - userConnector.createOrUpdateUserByUserId("institutionId", "productId", "userId", List.of(role)); + userConnector.createOrUpdateUserByUserId(institution, "productId", "userId", List.of(role)); // Assert that nothing has changed verify(userApiRestClient)._usersUserIdPost(eq("userId"), any()); diff --git a/core/src/main/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImpl.java b/core/src/main/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImpl.java index 7fe2cf7d8..470b781da 100644 --- a/core/src/main/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImpl.java +++ b/core/src/main/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImpl.java @@ -139,9 +139,9 @@ public Collection getUsersByInstitutionId(String institutionId, String public String createUsers(String institutionId, String productId, UserToCreate userDto) { log.trace("createOrUpdateUserByFiscalCode start"); log.debug("createOrUpdateUserByFiscalCode userDto = {}", userDto); - verifyOnboardingStatus(institutionId, productId); + Institution institution = verifyOnboardingStatus(institutionId, productId); List role = retrieveRole(productId, userDto.getProductRoles()); - String userId = userApiConnector.createOrUpdateUserByFiscalCode(institutionId, productId, userDto, role); + String userId = userApiConnector.createOrUpdateUserByFiscalCode(institution, productId, userDto, role); log.trace("createOrUpdateUserByFiscalCode end"); return userId; } @@ -150,19 +150,20 @@ public String createUsers(String institutionId, String productId, UserToCreate u public void addUserProductRoles(String institutionId, String productId, String userId, Set productRoles) { log.trace("createOrUpdateUserByUserId start"); log.debug("createOrUpdateUserByUserId userId = {}", userId); - verifyOnboardingStatus(institutionId, productId); + Institution institution = verifyOnboardingStatus(institutionId, productId); List role = retrieveRole(productId, productRoles); - userApiConnector.createOrUpdateUserByUserId(institutionId, productId, userId, role); + userApiConnector.createOrUpdateUserByUserId(institution, productId, userId, role); log.trace("createOrUpdateUserByUserId end"); } - private void verifyOnboardingStatus(String institutionId, String productId) { + private Institution verifyOnboardingStatus(String institutionId, String productId) { Institution institution = msCoreConnector.getInstitution(institutionId); if (institution.getOnboarding() == null || institution.getOnboarding().stream() .noneMatch(onboarding -> onboarding.getProductId().equals(productId) && onboarding.getStatus().equals(RelationshipState.ACTIVE)) ) { throw new InvalidOnboardingStatusException("The product is not active for the institution"); } + else return institution; } /** diff --git a/core/src/test/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java b/core/src/test/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java index 558d8103d..db03ee879 100644 --- a/core/src/test/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java +++ b/core/src/test/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java @@ -238,14 +238,14 @@ void addUserProductRoles_ok() { when(msCoreConnectorMock.getInstitution(institutionId)).thenReturn(institution); when(productsConnector.getProduct(productId)).thenReturn(product); - doNothing().when(userApiConnector).createOrUpdateUserByUserId(eq(institutionId), eq(productId), eq(userId), anyList()); + doNothing().when(userApiConnector).createOrUpdateUserByUserId(eq(institution), eq(productId), eq(userId), anyList()); // when userService.addUserProductRoles(institutionId, productId, userId, productRoles); // then verify(userApiConnector, times(1)) - .createOrUpdateUserByUserId(eq(institutionId), eq(productId), eq(userId), anyList()); + .createOrUpdateUserByUserId(eq(institution), eq(productId), eq(userId), anyList()); verifyNoMoreInteractions(userApiConnector); } @@ -309,7 +309,7 @@ void createUsersByFiscalCode() { when(productsConnector.getProduct(productId)).thenReturn(product); - when(userApiConnector.createOrUpdateUserByFiscalCode(eq(institutionId), eq(productId), eq(userToCreate), anyList())).thenReturn("userId"); + when(userApiConnector.createOrUpdateUserByFiscalCode(eq(institution), eq(productId), eq(userToCreate), anyList())).thenReturn("userId"); when(msCoreConnectorMock.getInstitution(institutionId)).thenReturn(institution); @@ -319,7 +319,7 @@ void createUsersByFiscalCode() { // then assertNotNull(userId); verify(userApiConnector, times(1)) - .createOrUpdateUserByFiscalCode(eq(institutionId), eq(productId), eq(userToCreate), anyList()); + .createOrUpdateUserByFiscalCode(eq(institution), eq(productId), eq(userToCreate), anyList()); verifyNoMoreInteractions(userApiConnector); } From c42c220aa4a0e043cc534381f76523a665669de3 Mon Sep 17 00:00:00 2001 From: manuraf Date: Mon, 15 Apr 2024 14:42:36 +0200 Subject: [PATCH 2/2] fix unit test --- .../pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/test/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java b/core/src/test/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java index a819c0892..ac5f9afe6 100644 --- a/core/src/test/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java +++ b/core/src/test/java/it/pagopa/selfcare/dashboard/core/UserV2ServiceImplTest.java @@ -322,7 +322,7 @@ void createUsersByFiscalCode() { assertNotNull(userId); ArgumentCaptor> captorRoles = ArgumentCaptor.forClass(List.class); verify(userApiConnector, times(1)) - .createOrUpdateUserByFiscalCode(eq(institutionId), eq(productId), eq(userToCreate), captorRoles.capture()); + .createOrUpdateUserByFiscalCode(eq(institution), eq(productId), eq(userToCreate), captorRoles.capture()); assertEquals(captorRoles.getValue().get(0).getProductRole(), productRole); verifyNoMoreInteractions(userApiConnector);