Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SELC-4483] Set institution description and institutionRootname when call userApi to create userRole #412

Merged
merged 3 commits into from
Apr 15, 2024
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 @@ -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);
}

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

Expand All @@ -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);
}

Expand Down
Loading