Skip to content

Commit

Permalink
[SELC-4483] Set institution description and institutionRootname when …
Browse files Browse the repository at this point in the history
…call userApi to create userRole (#412)

Co-authored-by: Manuel Rafeli <[email protected]>
  • Loading branch information
flaminiaScarciofolo and manuraf authored Apr 15, 2024
1 parent 74a2b05 commit 012b8d0
Show file tree
Hide file tree
Showing 5 changed files with 59 additions and 27 deletions.
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -35,8 +35,8 @@ public interface UserApiConnector {

List<UserInstitution> retrieveFilteredUser(String userId, String institutionId, String productId);

String createOrUpdateUserByFiscalCode(String institutionId, String productId, UserToCreate userDto, List<CreateUserDto.Role> role);
String createOrUpdateUserByFiscalCode(Institution institution, String productId, UserToCreate userDto, List<CreateUserDto.Role> role);

void createOrUpdateUserByUserId(String institutionId, String productId, String userId, List<CreateUserDto.Role> role);
void createOrUpdateUserByUserId(Institution institution, String productId, String userId, List<CreateUserDto.Role> role);

}
Original file line number Diff line number Diff line change
Expand Up @@ -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.*;
Expand Down Expand Up @@ -193,27 +194,34 @@ private List<String> getValidUserStates() {
}

@Override
public String createOrUpdateUserByFiscalCode(String institutionId, String productId, UserToCreate userDto, List<it.pagopa.selfcare.dashboard.connector.model.user.CreateUserDto.Role> roles) {
public String createOrUpdateUserByFiscalCode(Institution institution, String productId, UserToCreate userDto, List<it.pagopa.selfcare.dashboard.connector.model.user.CreateUserDto.Role> 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<it.pagopa.selfcare.dashboard.connector.model.user.CreateUserDto.Role> roles) {
return CreateUserDto.builder()
.institutionId(institutionId)
private CreateUserDto buildCreateUserDto(Institution institution, String productId, UserToCreate userDto, List<it.pagopa.selfcare.dashboard.connector.model.user.CreateUserDto.Role> 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())
Expand All @@ -231,17 +239,24 @@ private Product1 buildProduct(String productId, List<it.pagopa.selfcare.dashboar
}

@Override
public void createOrUpdateUserByUserId(String institutionId, String productId, String userId, List<it.pagopa.selfcare.dashboard.connector.model.user.CreateUserDto.Role> roles) {
public void createOrUpdateUserByUserId(Institution institution, String productId, String userId, List<it.pagopa.selfcare.dashboard.connector.model.user.CreateUserDto.Role> 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");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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());
Expand All @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,9 +139,9 @@ public Collection<UserInfo> 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<CreateUserDto.Role> 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;
}
Expand All @@ -150,19 +150,20 @@ public String createUsers(String institutionId, String productId, UserToCreate u
public void addUserProductRoles(String institutionId, String productId, String userId, Set<String> productRoles) {
log.trace("createOrUpdateUserByUserId start");
log.debug("createOrUpdateUserByUserId userId = {}", userId);
verifyOnboardingStatus(institutionId, productId);
Institution institution = verifyOnboardingStatus(institutionId, productId);
List<CreateUserDto.Role> 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;
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,14 +239,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);
}

Expand Down Expand Up @@ -311,7 +311,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);

Expand All @@ -322,8 +322,9 @@ void createUsersByFiscalCode() {
assertNotNull(userId);
ArgumentCaptor<List<CreateUserDto.Role>> 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);
}

Expand Down

0 comments on commit 012b8d0

Please sign in to comment.