From 26fc5a47261776fe7dd8a573979ad54bf4d3d788 Mon Sep 17 00:00:00 2001 From: flaminiaScarciofolo Date: Wed, 17 Apr 2024 13:03:10 +0200 Subject: [PATCH 1/4] Fix ExchangeTokenServiceV2 when retrieve institution data --- .../dashboard/core/InstitutionService.java | 2 ++ .../dashboard/core/InstitutionServiceImpl.java | 11 +++++++++++ .../model/mapper/InstitutionResourceMapper.java | 14 +++++++------- .../web/security/ExchangeTokenServiceV2.java | 15 ++++++++------- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionService.java b/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionService.java index 0a64a914a..8519a2023 100644 --- a/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionService.java +++ b/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionService.java @@ -17,6 +17,8 @@ public interface InstitutionService { InstitutionInfo getInstitution(String institutionId); + Institution getInstitutionById(String institutionId); + Collection getInstitutions(String userId); void updateInstitutionGeographicTaxonomy(String institutionId, GeographicTaxonomyList geographicTaxonomies); diff --git a/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java b/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java index a517a0128..246737c43 100644 --- a/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java +++ b/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java @@ -85,6 +85,17 @@ public InstitutionInfo getInstitution(String institutionId) { return result; } + + @Override + public Institution getInstitutionById(String institutionId) { + log.trace("getInstitution start"); + log.debug("getInstitution institutionId = {}", institutionId); + Institution result = msCoreConnector.getInstitution(institutionId); + log.debug(LogUtils.CONFIDENTIAL_MARKER, "getInstitution result = {}", result); + log.trace("getInstitution end"); + return result; + } + @Override public void updateInstitutionGeographicTaxonomy(String institutionId, GeographicTaxonomyList geographicTaxonomies) { log.trace("updateInstitutionGeographicTaxonomy start"); diff --git a/web/src/main/java/it/pagopa/selfcare/dashboard/web/model/mapper/InstitutionResourceMapper.java b/web/src/main/java/it/pagopa/selfcare/dashboard/web/model/mapper/InstitutionResourceMapper.java index dcb119dc6..09a7ac079 100644 --- a/web/src/main/java/it/pagopa/selfcare/dashboard/web/model/mapper/InstitutionResourceMapper.java +++ b/web/src/main/java/it/pagopa/selfcare/dashboard/web/model/mapper/InstitutionResourceMapper.java @@ -85,16 +85,16 @@ default String toUserRole(String userRole) { return null; } - @Mapping(target = "name", source = "institutionInfo.description") - @Mapping(target = "aooParent", source = "institutionInfo.aooParentCode") - @Mapping(target = "subUnitType", source = "institutionInfo.subunitType") - @Mapping(target = "subUnitCode", source = "institutionInfo.subunitCode") - @Mapping(target = "rootParent", expression = "java(toRootParent(institutionInfo))") + @Mapping(target = "name", source = "institution.description") + @Mapping(target = "aooParent", source = "institution.aooParentCode") + @Mapping(target = "subUnitType", source = "institution.subunitType") + @Mapping(target = "subUnitCode", source = "institution.subunitCode") + @Mapping(target = "rootParent", expression = "java(toRootParent(institution))") @Mapping(target = "roles", expression = "java(toRoles(productGrantedAuthorities, isBillingToken))") - ExchangeTokenServiceV2.Institution toInstitution(InstitutionInfo institutionInfo, List productGrantedAuthorities, boolean isBillingToken); + ExchangeTokenServiceV2.Institution toInstitution(it.pagopa.selfcare.dashboard.connector.model.institution.Institution institution, List productGrantedAuthorities, boolean isBillingToken); @Named("toRootParent") - default ExchangeTokenServiceV2.RootParent toRootParent(InstitutionInfo institutionInfo) { + default ExchangeTokenServiceV2.RootParent toRootParent(it.pagopa.selfcare.dashboard.connector.model.institution.Institution institutionInfo) { ExchangeTokenServiceV2.RootParent rootParent = new ExchangeTokenServiceV2.RootParent(); if(institutionInfo != null) { rootParent.setId(institutionInfo.getId()); 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 0023f4f9e..2f193889b 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 @@ -106,11 +106,12 @@ public ExchangedToken exchange(String institutionId, String productId, Optional< final ProductGrantedAuthority productGrantedAuthority = Optional.ofNullable(productGrantedAuthorityMap.get(productId)) .orElseThrow(() -> new IllegalArgumentException(String.format("A Product Granted SelfCareAuthority is required for product '%s' and institution '%s'", productId, institutionId))); - InstitutionInfo institutionInfo = institutionService.getInstitution(institutionId); - Assert.notNull(institutionInfo, "Institution info is required"); - Institution institution = institutionResourceMapper.toInstitution(institutionInfo, List.of(productGrantedAuthority), false); - retrieveAndSetGroups(institution, institutionId, productId, userId); - TokenExchangeClaims claims = retrieveAndSetClaims(authentication.getCredentials().toString(), institution, userId); + + it.pagopa.selfcare.dashboard.connector.model.institution.Institution institution = institutionService.getInstitutionById(institutionId); + Assert.notNull(institution, "Institution info is required"); + ExchangeTokenServiceV2.Institution institutionExchange = institutionResourceMapper.toInstitution(institution, List.of(productGrantedAuthority), false); + retrieveAndSetGroups(institutionExchange, institutionId, productId, userId); + TokenExchangeClaims claims = retrieveAndSetClaims(authentication.getCredentials().toString(), institutionExchange, userId); Product product = productsConnector.getProduct(productId); @@ -144,9 +145,9 @@ public ExchangedToken retrieveBillingExchangedToken(String institutionId) { Map productGrantedAuthorityMap = retrieveProductsFromInstitutionAndUser(institutionId, userId); addProductIfIsInvoiceable(productGrantedAuthorityMap, invoiceableProductList, productGrantedAuthorities); - InstitutionInfo institutionInfo = institutionService.getInstitution(institutionId); + it.pagopa.selfcare.dashboard.connector.model.institution.Institution institutionInfo = institutionService.getInstitutionById(institutionId); Assert.notNull(institutionInfo, "Institution info is required"); - Institution institution = institutionResourceMapper.toInstitution(institutionInfo, productGrantedAuthorities, true); + ExchangeTokenServiceV2.Institution institution = institutionResourceMapper.toInstitution(institutionInfo, productGrantedAuthorities, true); retrieveAndSetGroups(institution, institutionId, null, userId); From a96a5cd8d441ed36b501c58b30055fc18253e224 Mon Sep 17 00:00:00 2001 From: empassaro Date: Wed, 17 Apr 2024 15:19:17 +0200 Subject: [PATCH 2/4] fix: retrieve email from workContacts --- .../web/security/ExchangeTokenServiceV2.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) 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 2f193889b..5001c75dd 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 @@ -12,9 +12,9 @@ import it.pagopa.selfcare.dashboard.connector.api.ProductsConnector; import it.pagopa.selfcare.dashboard.connector.api.UserApiConnector; import it.pagopa.selfcare.dashboard.connector.model.groups.UserGroupInfo; -import it.pagopa.selfcare.dashboard.connector.model.institution.InstitutionInfo; import it.pagopa.selfcare.dashboard.connector.model.product.Product; 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; import it.pagopa.selfcare.dashboard.core.UserGroupService; import it.pagopa.selfcare.dashboard.core.UserService; @@ -102,7 +102,9 @@ public ExchangedToken exchange(String institutionId, String productId, Optional< } SelfCareUser selfCareUser = (SelfCareUser) authentication.getPrincipal(); String userId = selfCareUser.getId(); - Map productGrantedAuthorityMap = retrieveProductsFromInstitutionAndUser(institutionId, userId); + UserInstitution userInstitution = userApiConnector.getProducts(institutionId, userId); + + Map productGrantedAuthorityMap = retrieveProductsFromInstitutionAndUser(userInstitution); final ProductGrantedAuthority productGrantedAuthority = Optional.ofNullable(productGrantedAuthorityMap.get(productId)) .orElseThrow(() -> new IllegalArgumentException(String.format("A Product Granted SelfCareAuthority is required for product '%s' and institution '%s'", productId, institutionId))); @@ -111,7 +113,7 @@ public ExchangedToken exchange(String institutionId, String productId, Optional< Assert.notNull(institution, "Institution info is required"); ExchangeTokenServiceV2.Institution institutionExchange = institutionResourceMapper.toInstitution(institution, List.of(productGrantedAuthority), false); retrieveAndSetGroups(institutionExchange, institutionId, productId, userId); - TokenExchangeClaims claims = retrieveAndSetClaims(authentication.getCredentials().toString(), institutionExchange, userId); + TokenExchangeClaims claims = retrieveAndSetClaims(authentication.getCredentials().toString(), institutionExchange, userId, userInstitution.getUserMailUuid()); Product product = productsConnector.getProduct(productId); @@ -143,7 +145,9 @@ public ExchangedToken retrieveBillingExchangedToken(String institutionId) { final List productGrantedAuthorities = new ArrayList<>(); - Map productGrantedAuthorityMap = retrieveProductsFromInstitutionAndUser(institutionId, userId); + UserInstitution userInstitution = userApiConnector.getProducts(institutionId, userId); + + Map productGrantedAuthorityMap = retrieveProductsFromInstitutionAndUser(userInstitution); addProductIfIsInvoiceable(productGrantedAuthorityMap, invoiceableProductList, productGrantedAuthorities); it.pagopa.selfcare.dashboard.connector.model.institution.Institution institutionInfo = institutionService.getInstitutionById(institutionId); Assert.notNull(institutionInfo, "Institution info is required"); @@ -151,7 +155,7 @@ public ExchangedToken retrieveBillingExchangedToken(String institutionId) { retrieveAndSetGroups(institution, institutionId, null, userId); - TokenExchangeClaims claims = retrieveAndSetClaims(credentials, institution, userId); + TokenExchangeClaims claims = retrieveAndSetClaims(credentials, institution, userId, userInstitution.getUserMailUuid()); claims.setAudience(billingAudience); log.debug(LogUtils.CONFIDENTIAL_MARKER, "Exchanged claims = {}", claims); @@ -177,7 +181,7 @@ private List retrieveInvoiceableProductList() { .toList(); } - private TokenExchangeClaims retrieveAndSetClaims(String credential, Institution institution, String userId) { + private TokenExchangeClaims retrieveAndSetClaims(String credential, Institution institution, String userId, String userMailUuid) { Claims selcClaims = jwtService.getClaims(credential); Assert.notNull(selcClaims, "Session token claims is required"); TokenExchangeClaims claims = new TokenExchangeClaims(selcClaims); @@ -185,7 +189,7 @@ private TokenExchangeClaims retrieveAndSetClaims(String credential, Institution claims.setIssuer(issuer); User user = userService.getUserByInternalId(UUID.fromString(userId)); - String email = Optional.ofNullable(user.getWorkContact(institution.getId())) + String email = Optional.ofNullable(user.getWorkContact(userMailUuid)) .map(workContract -> Objects.nonNull(workContract.getEmail()) ? workContract.getEmail().getValue() : "" @@ -202,8 +206,8 @@ private TokenExchangeClaims retrieveAndSetClaims(String credential, Institution } - private Map retrieveProductsFromInstitutionAndUser(String institutionId, String userId) { - return this.userApiConnector.getProducts(institutionId, userId) + private Map retrieveProductsFromInstitutionAndUser(UserInstitution userInstitution) { + return userInstitution .getProducts() .stream() .collect(Collectors.toMap( From 730209b714b9e34d05ddd9b5a95a1f2c32c35cb4 Mon Sep 17 00:00:00 2001 From: flaminiaScarciofolo Date: Wed, 17 Apr 2024 15:55:05 +0200 Subject: [PATCH 3/4] fix tests in ExchangeTokenServiceV2Test --- .../core/InstitutionServiceImpl.java | 1 - .../security/ExchangeTokenServiceV2Test.java | 60 +++++++++++-------- 2 files changed, 34 insertions(+), 27 deletions(-) diff --git a/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java b/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java index 246737c43..bec1aab23 100644 --- a/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java +++ b/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java @@ -89,7 +89,6 @@ public InstitutionInfo getInstitution(String institutionId) { @Override public Institution getInstitutionById(String institutionId) { log.trace("getInstitution start"); - log.debug("getInstitution institutionId = {}", institutionId); Institution result = msCoreConnector.getInstitution(institutionId); log.debug(LogUtils.CONFIDENTIAL_MARKER, "getInstitution result = {}", result); log.trace("getInstitution end"); 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 895763a60..f29a2b1bf 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 @@ -8,10 +8,13 @@ import it.pagopa.selfcare.commons.base.security.SelfCareGrantedAuthority; import it.pagopa.selfcare.commons.base.security.SelfCareUser; import it.pagopa.selfcare.commons.web.security.JwtService; +import it.pagopa.selfcare.dashboard.connector.api.MsCoreConnector; import it.pagopa.selfcare.dashboard.connector.api.ProductsConnector; import it.pagopa.selfcare.dashboard.connector.api.UserApiConnector; import it.pagopa.selfcare.dashboard.connector.model.groups.UserGroupInfo; +import it.pagopa.selfcare.dashboard.connector.model.institution.Institution; import it.pagopa.selfcare.dashboard.connector.model.institution.InstitutionInfo; +import it.pagopa.selfcare.dashboard.connector.model.institution.RelationshipState; import it.pagopa.selfcare.dashboard.connector.model.product.Product; import it.pagopa.selfcare.dashboard.connector.model.product.ProductRoleInfo; import it.pagopa.selfcare.dashboard.connector.model.product.ProductTree; @@ -31,6 +34,7 @@ import org.junit.jupiter.params.provider.EnumSource; import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.data.domain.Pageable; import org.springframework.security.authentication.TestingAuthenticationToken; import org.springframework.security.core.GrantedAuthority; @@ -228,8 +232,8 @@ void exchange_noSessionTokenClaims() throws Exception { TestSecurityContextHolder.setAuthentication(authentication); InstitutionService institutionServiceMock = mock(InstitutionService.class); - InstitutionInfo institutionInfo = mockInstance(new InstitutionInfo()); - when(institutionServiceMock.getInstitution(any())) + Institution institutionInfo = mockInstance(new Institution()); + when(institutionServiceMock.getInstitutionById(any())) .thenReturn(institutionInfo); final Pageable pageable = Pageable.ofSize(100); UserGroupService groupServiceMock = mock(UserGroupService.class); @@ -310,7 +314,7 @@ void exchange_noInstitutionInfo() throws Exception { RuntimeException e = assertThrows(IllegalArgumentException.class, executable); assertEquals("Institution info is required", e.getMessage()); verify(institutionServiceMock, times(1)) - .getInstitution(institutionId); + .getInstitutionById(institutionId); verifyNoMoreInteractions(jwtServiceMock, institutionServiceMock); } @@ -354,9 +358,9 @@ void exchange_nullGroupInfo(PrivateKey privateKey) throws Exception { .setIssuedAt(iat) .setExpiration(exp)); InstitutionService institutionServiceMock = mock(InstitutionService.class); - InstitutionInfo institutionInfo = mockInstance(new InstitutionInfo()); + Institution institutionInfo = mockInstance(new Institution()); institutionInfo.setId(institutionId); - when(institutionServiceMock.getInstitution(any())) + when(institutionServiceMock.getInstitutionById(any())) .thenReturn(institutionInfo); UserGroupService groupServiceMock = mock(UserGroupService.class); when(groupServiceMock.getUserGroups(any(), any(), any(), any())) @@ -430,7 +434,7 @@ void exchange_nullGroupInfo(PrivateKey privateKey) throws Exception { verify(jwtServiceMock, times(1)) .getClaims(any()); verify(institutionServiceMock, times(1)) - .getInstitution(institutionId); + .getInstitutionById(institutionId); verify(groupServiceMock, times(1)) .getUserGroups(Optional.of(institutionId), Optional.of(productId), Optional.of(userId), Pageable.ofSize(100)); verifyNoMoreInteractions(jwtServiceMock, institutionServiceMock, groupServiceMock); @@ -465,9 +469,9 @@ void exchange_ok(PrivateKey privateKey) throws Exception { .setExpiration(exp)); InstitutionService institutionServiceMock = mock(InstitutionService.class); UserService userService = mock(UserService.class); - InstitutionInfo institutionInfo = mockInstance(new InstitutionInfo()); + Institution institutionInfo = mockInstance(new Institution()); institutionInfo.setId(institutionId); - when(institutionServiceMock.getInstitution(any())) + when(institutionServiceMock.getInstitutionById(any())) .thenReturn(institutionInfo); UserGroupService groupServiceMock = mock(UserGroupService.class); UserGroupInfo groupInfo = mockInstance(new UserGroupInfo()); @@ -520,7 +524,9 @@ void exchange_ok(PrivateKey privateKey) throws Exception { UserInstitution userInstitution = new UserInstitution(); userInstitution.setProducts(List.of(onboardedProduct)); - + Institution institutionMock = mockInstance(new Institution()); + institutionMock.setId(institutionId); + when( institutionServiceMock.getInstitutionById(any())).thenReturn(institutionMock); UserApiConnector userApiConnector = mock(UserApiConnector.class); when(userApiConnector.getProducts(anyString(), anyString())).thenReturn(userInstitution); ExchangeTokenServiceV2 ExchangeTokenServiceV2 = new ExchangeTokenServiceV2(jwtServiceMock, institutionServiceMock, groupServiceMock, productsConnectorMock, properties, userService, userApiConnector, new InstitutionResourceMapperImpl()); @@ -552,7 +558,7 @@ void exchange_ok(PrivateKey privateKey) throws Exception { assertNotNull(institution); assertEquals(institutionInfo.getDescription(), institution.getName()); assertEquals(institutionId, institution.getId()); - checkNotNullFields(institution); + checkNotNullFields(institution, "parentDescription", "rootParent"); assertEquals(1, institution.getRoles().size()); List groups = institution.getGroups(); assertEquals(pageable.getPageSize(), groups.size()); @@ -561,7 +567,7 @@ void exchange_ok(PrivateKey privateKey) throws Exception { verify(jwtServiceMock, times(1)) .getClaims(any()); verify(institutionServiceMock, times(1)) - .getInstitution(institutionId); + .getInstitutionById(institutionId); verify(groupServiceMock, times(1)) .getUserGroups(Optional.of(institutionId), Optional.of(productId), Optional.of(userId), Pageable.ofSize(100)); verifyNoMoreInteractions(jwtServiceMock, institutionServiceMock, groupServiceMock); @@ -610,7 +616,7 @@ void billingExchange_noSessionTokenClaims() throws Exception { SelfCareUser selfCareUser = SelfCareUser.builder(userId.toString()).email("test@example.com").build(); TestingAuthenticationToken authentication = new TestingAuthenticationToken(selfCareUser, "password", authorities); TestSecurityContextHolder.setAuthentication(authentication); - InstitutionInfo institutionInfo = mockInstance(new InstitutionInfo()); + Institution institutionInfo = mockInstance(new Institution()); UserGroupService groupServiceMock = mock(UserGroupService.class); InstitutionService institutionServiceMock = mock(InstitutionService.class); @@ -626,7 +632,7 @@ void billingExchange_noSessionTokenClaims() throws Exception { when(groupServiceMock.getUserGroups(any(), any(), any(), any())) .thenAnswer(invocation -> getPage(groupInfos, invocation.getArgument(3, Pageable.class), () -> pageable.getPageSize() + 1)); - when(institutionServiceMock.getInstitution(any())) + when(institutionServiceMock.getInstitutionById(any())) .thenReturn(institutionInfo); OnboardedProduct onboardedProduct = new OnboardedProduct(); @@ -689,7 +695,7 @@ void billingExchange_noInstitutionInfo() throws Exception { RuntimeException e = assertThrows(IllegalArgumentException.class, executable); assertEquals("Institution info is required", e.getMessage()); verify(institutionServiceMock, times(1)) - .getInstitution(institutionId); + .getInstitutionById(institutionId); verifyNoMoreInteractions(jwtServiceMock, institutionServiceMock); } @@ -731,9 +737,9 @@ void billingExchange_nullGroupInfo(PrivateKey privateKey) throws Exception { .setIssuedAt(iat) .setExpiration(exp)); InstitutionService institutionServiceMock = mock(InstitutionService.class); - InstitutionInfo institutionInfo = mockInstance(new InstitutionInfo()); + Institution institutionInfo = mockInstance(new Institution()); institutionInfo.setId(institutionId); - when(institutionServiceMock.getInstitution(any())) + when(institutionServiceMock.getInstitutionById(any())) .thenReturn(institutionInfo); UserGroupService groupServiceMock = mock(UserGroupService.class); when(groupServiceMock.getUserGroups(any(), any(), any(), any())) @@ -763,7 +769,12 @@ void billingExchange_nullGroupInfo(PrivateKey privateKey) throws Exception { user.setWorkContacts(workContactMap); when(userService.getUserByInternalId(any())).thenReturn(user); UserInstitution userInstitution = new UserInstitution(); - userInstitution.setProducts(EMPTY_LIST); + OnboardedProduct onboardedProduct = new OnboardedProduct(); + onboardedProduct.setRole(MANAGER); + onboardedProduct.setStatus(RelationshipState.ACTIVE); + onboardedProduct.setProductId("productId"); + onboardedProduct.setProductRole("admin"); + userInstitution.setProducts(List.of(onboardedProduct)); UserApiConnector userApiConnector = mock(UserApiConnector.class); when(userApiConnector.getProducts(anyString(), anyString())).thenReturn(userInstitution); @@ -800,7 +811,7 @@ void billingExchange_nullGroupInfo(PrivateKey privateKey) throws Exception { verify(jwtServiceMock, times(1)) .getClaims(any()); verify(institutionServiceMock, times(1)) - .getInstitution(institutionId); + .getInstitutionById(institutionId); verify(groupServiceMock, times(1)) .getUserGroups(Optional.of(institutionId), Optional.empty(), Optional.of(userId), Pageable.ofSize(100)); verifyNoMoreInteractions(jwtServiceMock, institutionServiceMock, groupServiceMock); @@ -833,9 +844,9 @@ void billingExchange_ok(PrivateKey privateKey) throws Exception { .setExpiration(exp)); InstitutionService institutionServiceMock = mock(InstitutionService.class); UserService userService = mock(UserService.class); - InstitutionInfo institutionInfo = mockInstance(new InstitutionInfo()); + Institution institutionInfo = mockInstance(new Institution()); institutionInfo.setId(institutionId); - when(institutionServiceMock.getInstitution(any())) + when(institutionServiceMock.getInstitutionById(any())) .thenReturn(institutionInfo); UserGroupService groupServiceMock = mock(UserGroupService.class); UserGroupInfo groupInfo = mockInstance(new UserGroupInfo()); @@ -885,7 +896,6 @@ void billingExchange_ok(PrivateKey privateKey) throws Exception { userInstitution.setProducts(EMPTY_LIST); UserApiConnector userApiConnector = mock(UserApiConnector.class); when(userApiConnector.getProducts(anyString(), anyString())).thenReturn(userInstitution); - ExchangeTokenServiceV2 ExchangeTokenServiceV2 = new ExchangeTokenServiceV2(jwtServiceMock, institutionServiceMock, groupServiceMock, productsConnectorMock, properties, userService, userApiConnector, new InstitutionResourceMapperImpl()); // when final ExchangedToken exchangedToken = ExchangeTokenServiceV2.retrieveBillingExchangedToken(institutionId); @@ -913,7 +923,7 @@ void billingExchange_ok(PrivateKey privateKey) throws Exception { assertNotNull(institution); assertEquals(institutionInfo.getDescription(), institution.getName()); assertEquals(institutionId, institution.getId()); - checkNotNullFields(institution); + checkNotNullFields(institution, "parentDescription", "rootParent"); List groups = institution.getGroups(); assertEquals(pageable.getPageSize(), groups.size()); assertTrue(groups.stream().allMatch(groupId -> groupId.equals(groupInfo.getId()))); @@ -921,7 +931,7 @@ void billingExchange_ok(PrivateKey privateKey) throws Exception { verify(jwtServiceMock, times(1)) .getClaims(any()); verify(institutionServiceMock, times(1)) - .getInstitution(institutionId); + .getInstitutionById(institutionId); verify(groupServiceMock, times(1)) .getUserGroups(Optional.of(institutionId), Optional.empty(), Optional.of(userId), Pageable.ofSize(100)); verifyNoMoreInteractions(jwtServiceMock, institutionServiceMock, groupServiceMock); @@ -966,10 +976,8 @@ public ExchangeTokenServiceV2.Institution getInstitution() { institution.setSubUnitCode(organizationClaim.get("subUnitCode").toString()); institution.setSubUnitType(organizationClaim.get("subUnitType").toString()); institution.setAooParent(organizationClaim.get("aooParent").toString()); - institution.setParentDescription(organizationClaim.get("parentDescription").toString()); institution.setOriginId(organizationClaim.get("ipaCode").toString()); - ExchangeTokenServiceV2.RootParent rootParent = new ExchangeTokenServiceV2.RootParent(); - rootParent.setDescription(organizationClaim.get("parentDescription").toString()); + ExchangeTokenServiceV2.RootParent rootParent = (ExchangeTokenServiceV2.RootParent) organizationClaim.get("rootParent.description"); institution.setRootParent(rootParent); return institution; } From c91d2a2f8207009952cc50b7716ac39512a39b8e Mon Sep 17 00:00:00 2001 From: flaminiaScarciofolo Date: Wed, 17 Apr 2024 16:06:28 +0200 Subject: [PATCH 4/4] add tests for getInstituionById --- .../core/InstitutionServiceImpl.java | 4 +-- .../core/InstitutionServiceImplTest.java | 28 +++++++++++++++---- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java b/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java index bec1aab23..10f3c8978 100644 --- a/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java +++ b/core/src/main/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImpl.java @@ -68,7 +68,7 @@ public InstitutionServiceImpl(@Value("${dashboard.institution.getUsers.filter.st ? Optional.empty() : Optional.of(EnumSet.copyOf(Arrays.stream(allowedStates) .map(RelationshipState::valueOf) - .collect(Collectors.toList()))); + .toList())); this.userRegistryConnector = userRegistryConnector; this.productsConnector = productsConnector; this.msCoreConnector = msCoreConnector; @@ -362,7 +362,7 @@ public Institution findInstitutionById(String institutionId) { .filter(product -> userAuthProducts.containsKey(product.getProductId())) .peek(product -> product.setAuthorized(true)) .peek(product -> product.setUserRole(LIMITED.name())) - .collect(Collectors.toList())); + .toList()); } else { institution.getOnboarding().forEach(product -> { product.setAuthorized(userAuthProducts.containsKey(product.getProductId())); diff --git a/core/src/test/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImplTest.java b/core/src/test/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImplTest.java index 5cffab3e5..e4ea1326c 100644 --- a/core/src/test/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImplTest.java +++ b/core/src/test/java/it/pagopa/selfcare/dashboard/core/InstitutionServiceImplTest.java @@ -85,6 +85,22 @@ void beforeEach() { SecurityContextHolder.clearContext(); } + @Test + void getInstitutionById() { + // Given + String institutionId = "institutionId"; + Institution institution = new Institution(); + when(msCoreConnectorMock.getInstitution(institutionId)).thenReturn(institution); + + // When + Institution result = institutionService.getInstitutionById(institutionId); + + // Then + verify(msCoreConnectorMock, times(1)).getInstitution(institutionId); + assertEquals(institution, result); + } + + @Test void getInstitution() { // given @@ -370,7 +386,7 @@ void getInstitutionProductUsers_nullAllowedStates() { assertNull(capturedFilter.getRole()); assertEquals(productId, capturedFilter.getProductId()); assertNull(capturedFilter.getProductRoles()); - assertNull( capturedFilter.getUserId()); + assertNull(capturedFilter.getUserId()); assertNull(capturedFilter.getAllowedStates()); ArgumentCaptor> filedsCaptor = ArgumentCaptor.forClass(EnumSet.class); verify(userRegistryConnector, times(1)) @@ -1079,7 +1095,7 @@ void addUserProductRoles(PartyRole partyRole) { assertDoesNotThrow(executable); verify(msCoreConnectorMock, times(1)) .createUsers(Mockito.eq(institutionId), Mockito.eq(productId), Mockito.eq(userId), createUserDtoCaptor.capture(), eq("setTitle")); - createUserDtoCaptor.getValue().getRoles().forEach(role1 -> { + createUserDtoCaptor.getValue().getRoles().forEach(role1 -> { createUserDto.getRoles().forEach(role -> { if (role.getLabel().equals(role1.getLabel())) { Assertions.assertEquals(role.getPartyRole(), role1.getPartyRole()); @@ -1173,7 +1189,7 @@ void approveOnboardingRequest_hasNullToken() { } @Test - void rejectOnboardingRequest(){ + void rejectOnboardingRequest() { // given String tokenId = UUID.randomUUID().toString(); Mockito.doNothing() @@ -1186,7 +1202,7 @@ void rejectOnboardingRequest(){ } @Test - void rejectOnboardingRequest_hasNullToken(){ + void rejectOnboardingRequest_hasNullToken() { // given String tokenId = null; // when @@ -1243,7 +1259,7 @@ void updateInstitutionDescription_hasNullDescription() { } @Test - void findInstitutionByIdTest2(){ + void findInstitutionByIdTest2() { ProductGrantedAuthority productGrantedAuthority = new ProductGrantedAuthority(MANAGER, "productRole", "productId"); TestingAuthenticationToken authentication = new TestingAuthenticationToken(null, null, @@ -1262,7 +1278,7 @@ void findInstitutionByIdTest2(){ } @Test - void findInstitutionByIdTest(){ + void findInstitutionByIdTest() { ProductGrantedAuthority productGrantedAuthority = new ProductGrantedAuthority(OPERATOR, "productRole", "productId"); TestingAuthenticationToken authentication = new TestingAuthenticationToken(null, null,