diff --git a/web/src/main/java/it/pagopa/selfcare/dashboard/web/security/ExchangeTokenServiceV2.java b/web/src/main/java/it/pagopa/selfcare/dashboard/web/security/ExchangeTokenServiceV2.java index 5001c75dd..602929db1 100644 --- a/web/src/main/java/it/pagopa/selfcare/dashboard/web/security/ExchangeTokenServiceV2.java +++ b/web/src/main/java/it/pagopa/selfcare/dashboard/web/security/ExchangeTokenServiceV2.java @@ -13,6 +13,7 @@ import it.pagopa.selfcare.dashboard.connector.api.UserApiConnector; import it.pagopa.selfcare.dashboard.connector.model.groups.UserGroupInfo; import it.pagopa.selfcare.dashboard.connector.model.product.Product; +import it.pagopa.selfcare.dashboard.connector.model.user.OnboardedProduct; import it.pagopa.selfcare.dashboard.connector.model.user.User; import it.pagopa.selfcare.dashboard.connector.model.user.UserInstitution; import it.pagopa.selfcare.dashboard.core.InstitutionService; @@ -42,9 +43,10 @@ import java.security.spec.RSAPrivateCrtKeySpec; import java.time.Duration; import java.util.*; -import java.util.stream.Collectors; import java.util.stream.Stream; +import static java.util.stream.Collectors.groupingBy; + @Slf4j @Service public class ExchangeTokenServiceV2 { @@ -207,12 +209,16 @@ private TokenExchangeClaims retrieveAndSetClaims(String credential, Institution private Map retrieveProductsFromInstitutionAndUser(UserInstitution userInstitution) { - return userInstitution + Map map = new HashMap<>(); + userInstitution .getProducts() .stream() - .collect(Collectors.toMap( - it.pagopa.selfcare.dashboard.connector.model.user.OnboardedProduct::getProductId, - product -> new ProductGrantedAuthority(product.getRole(), List.of(product.getProductRole()), product.getProductId()))); + .collect(groupingBy(OnboardedProduct::getProductId)) + .forEach((key, value) -> map.put(key, new ProductGrantedAuthority( + value.get(0).getRole(), + value.stream().map(OnboardedProduct::getProductRole).toList(), + key))); + return map; } diff --git a/web/src/test/java/it/pagopa/selfcare/dashboard/web/security/ExchangeTokenServiceV2Test.java b/web/src/test/java/it/pagopa/selfcare/dashboard/web/security/ExchangeTokenServiceV2Test.java index f29a2b1bf..64c125c55 100644 --- a/web/src/test/java/it/pagopa/selfcare/dashboard/web/security/ExchangeTokenServiceV2Test.java +++ b/web/src/test/java/it/pagopa/selfcare/dashboard/web/security/ExchangeTokenServiceV2Test.java @@ -522,8 +522,14 @@ void exchange_ok(PrivateKey privateKey) throws Exception { onboardedProduct.setProductId(productId); onboardedProduct.setProductRole(productRole); + + OnboardedProduct onboardedProduct2 = new OnboardedProduct(); + onboardedProduct2.setRole(MANAGER); + onboardedProduct2.setProductId(productId); + onboardedProduct2.setProductRole("admin2"); + UserInstitution userInstitution = new UserInstitution(); - userInstitution.setProducts(List.of(onboardedProduct)); + userInstitution.setProducts(List.of(onboardedProduct, onboardedProduct2)); Institution institutionMock = mockInstance(new Institution()); institutionMock.setId(institutionId); when( institutionServiceMock.getInstitutionById(any())).thenReturn(institutionMock); @@ -559,7 +565,7 @@ void exchange_ok(PrivateKey privateKey) throws Exception { assertEquals(institutionInfo.getDescription(), institution.getName()); assertEquals(institutionId, institution.getId()); checkNotNullFields(institution, "parentDescription", "rootParent"); - assertEquals(1, institution.getRoles().size()); + assertEquals(2, institution.getRoles().size()); List groups = institution.getGroups(); assertEquals(pageable.getPageSize(), groups.size()); assertTrue(groups.stream().allMatch(groupId -> groupId.equals(groupInfo.getId())));