Skip to content

Commit 7bcecfd

Browse files
authored
[SELC-5862] fix: serialize ADMIN_EA updating openapi of user-ms (#441)
1 parent 2c2ed5f commit 7bcecfd

File tree

9 files changed

+585
-190
lines changed

9 files changed

+585
-190
lines changed

src/main/docs/openapi/api-selfcare-user-docs.json

+535-115
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
package it.pagopa.selfcare.external_api.client;
22

3-
import it.pagopa.selfcare.user.generated.openapi.v1.api.UserControllerApi;
3+
import it.pagopa.selfcare.user.generated.openapi.v1.api.UserApi;
44
import org.springframework.cloud.openfeign.FeignClient;
55

66
@FeignClient(name = "${rest-client.ms-user-api.serviceCode}", url = "${rest-client.ms-user-api.base-url}")
7-
public interface MsUserApiRestClient extends UserControllerApi {
7+
public interface MsUserApiRestClient extends UserApi {
88
}

src/main/java/it/pagopa/selfcare/external_api/mapper/UserMapper.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public ProductService getProductService(){
3939
@Named("toProductRoleLabel")
4040
protected String toProductRoleLabel(OnboardedProductResponse onboardedProduct, Product product) {
4141
ProductRole productRole = null;
42-
try { productRole = ProductUtils.getProductRole(onboardedProduct.getProductRole(), PartyRole.valueOf(onboardedProduct.getRole().name()), product); }
42+
try { productRole = ProductUtils.getProductRole(onboardedProduct.getProductRole(), PartyRole.valueOf(onboardedProduct.getRole()), product); }
4343
catch (IllegalArgumentException ignored) {}
4444

4545
return Optional.ofNullable(productRole)

src/main/java/it/pagopa/selfcare/external_api/service/InstitutionServiceImpl.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public List<ProductResource> getInstitutionUserProductsV2(String institutionId,
128128
InstitutionResponse institutionResponse = institutionApiClient._retrieveInstitutionByIdUsingGET(institutionId).getBody();
129129

130130
Set<String> productsSet = new HashSet<>();
131-
ResponseEntity<List<UserDataResponse>> response = msUserApiRestClient._usersUserIdInstitutionInstitutionIdGet(institutionId, userId, userId, null, null, null, List.of(ACTIVE.name()));
131+
ResponseEntity<List<UserDataResponse>> response = msUserApiRestClient._retrieveUsers(institutionId, userId, userId, null, null, null, List.of(ACTIVE.name()));
132132
if (Objects.nonNull(response) && Objects.nonNull(response.getBody()) && !response.getBody().isEmpty()) {
133133
//There is only a document for the couple institutionId/userId
134134
productsSet = response.getBody().get(0).getProducts().stream()
@@ -154,7 +154,7 @@ public Collection<UserProductResponse> getInstitutionProductUsersV2(String insti
154154
Assert.hasText(productId, "A Product id is required");
155155
List<String> productRolesList = CollectionUtils.isEmpty(productRoles) ? null : new ArrayList<>(productRoles);
156156

157-
List<UserInstitution> usersInstitutions = Objects.requireNonNull(msUserApiRestClient._usersGet(
157+
List<UserInstitution> usersInstitutions = Objects.requireNonNull(msUserApiRestClient._retrievePaginatedAndFilteredUser(
158158
institutionId, null, productRolesList, List.of(productId), null
159159
, null, List.of(ACTIVE.name()), userId).getBody())
160160
.stream().map(userMapper::toUserInstitutionsFromUserInstitutionResponse).toList();
@@ -170,7 +170,7 @@ public Collection<UserProductResponse> getInstitutionProductUsersV2(String insti
170170
userProduct.setRoles(userInstitution.getProducts().stream().map(OnboardedProductResponse::getProductRole).toList());
171171
return userProduct;
172172
})
173-
.collect(Collectors.toList());
173+
.toList();
174174

175175
log.debug(LogUtils.CONFIDENTIAL_MARKER, "getInstitutionProductUsers result = {}", userProductResponses);
176176
log.trace("getInstitutionProductUsers end");

src/main/java/it/pagopa/selfcare/external_api/service/OnboardingServiceImpl.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ private List<RelationshipInfo> processUsersWithId(Map<String, List<UserToOnboard
106106
private String addUserRole(String userId, Institution institution, String productId, String role, List<String> productRoles) {
107107
it.pagopa.selfcare.user.generated.openapi.v1.dto.Product product = it.pagopa.selfcare.user.generated.openapi.v1.dto.Product.builder()
108108
.productId(productId)
109-
.role(it.pagopa.selfcare.user.generated.openapi.v1.dto.PartyRole.valueOf(role))
109+
.role(role)
110110
.productRoles(productRoles)
111111
.build();
112112

@@ -117,7 +117,7 @@ private String addUserRole(String userId, Institution institution, String produc
117117
.institutionRootName(institution.getParentDescription())
118118
.build();
119119

120-
msUserApiRestClient._usersUserIdPost(userId, addUserRoleDto);
120+
msUserApiRestClient._createOrUpdateByUserId(userId, addUserRoleDto);
121121

122122
return userId;
123123
}
@@ -141,7 +141,7 @@ private String createUser(Institution institution, String productId, String role
141141

142142
Product1 product = Product1.builder()
143143
.productId(productId)
144-
.role(it.pagopa.selfcare.user.generated.openapi.v1.dto.PartyRole.valueOf(role))
144+
.role(role)
145145
.productRoles(productRoles)
146146
.build();
147147

@@ -154,7 +154,7 @@ private String createUser(Institution institution, String productId, String role
154154
.institutionRootName(institution.getParentDescription())
155155
.build();
156156

157-
String userId = msUserApiRestClient._usersPost(createUserDto).getBody();
157+
String userId = msUserApiRestClient._createOrUpdateByFiscalCode(createUserDto).getBody();
158158
log.info("User created with id: {}", userId);
159159
return userId;
160160
}

src/main/java/it/pagopa/selfcare/external_api/service/UserServiceImpl.java

+7-20
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class UserServiceImpl implements UserService {
4040
public UserInfoWrapper getUserInfoV2(String fiscalCode, List<RelationshipState> userStatuses) {
4141
log.trace("geUserInfo start");
4242
it.pagopa.selfcare.user.generated.openapi.v1.dto.SearchUserDto searchUserDto = new it.pagopa.selfcare.user.generated.openapi.v1.dto.SearchUserDto(fiscalCode);
43-
final User user = userMapper.toUserFromUserDetailResponse(msUserApiRestClient._usersSearchPost(null, searchUserDto).getBody());
43+
final User user = userMapper.toUserFromUserDetailResponse(msUserApiRestClient._searchUserByFiscalCode(null, searchUserDto).getBody());
4444
List<OnboardedInstitutionInfo> onboardedInstitutions = getOnboardedInstitutionsDetails(user.getId(), null);
4545
List<String> userStatusesString = userStatuses == null ? Collections.emptyList()
4646
: userStatuses.stream().map(RelationshipState::toString).toList();
@@ -67,7 +67,7 @@ public UserInfoWrapper getUserInfoV2(String fiscalCode, List<RelationshipState>
6767

6868
@Override
6969
public UserDetailsWrapper getUserOnboardedProductsDetailsV2(String userId, String institutionId, String productId) {
70-
List<UserInstitution> usersInstitutions = Objects.requireNonNull(msUserApiRestClient._usersGet(
70+
List<UserInstitution> usersInstitutions = Objects.requireNonNull(msUserApiRestClient._retrievePaginatedAndFilteredUser(
7171
institutionId, null, null, List.of(productId), null
7272
, null, null, userId).getBody())
7373
.stream().map(userMapper::toUserInstitutionsFromUserInstitutionResponse).toList();
@@ -106,7 +106,7 @@ public UserDetailsWrapper getUserOnboardedProductsDetailsV2(String userId, Strin
106106
public List<OnboardedInstitutionInfo> getOnboardedInstitutionsDetails(String userId, String productId) {
107107
//fix temporanea per il funzionamento della getUserInfo di support
108108

109-
List<UserInstitution> usersInstitutions = Objects.requireNonNull(msUserApiRestClient._usersGet(
109+
List<UserInstitution> usersInstitutions = Objects.requireNonNull(msUserApiRestClient._retrievePaginatedAndFilteredUser(
110110
null, null, null, Objects.isNull(productId) ? null : List.of(productId), null
111111
, 350, null, userId).getBody())
112112
.stream().map(userMapper::toUserInstitutionsFromUserInstitutionResponse).toList();
@@ -167,7 +167,7 @@ private List<OnboardedInstitutionInfo> getInstitutionDetails(String institutionI
167167
@Override
168168
public List<OnboardedInstitutionResource> getOnboardedInstitutionsDetailsActive(String userId, String productId) {
169169

170-
List<UserInstitution> institutionsWithProductActive = Objects.requireNonNull(msUserApiRestClient._usersGet(
170+
List<UserInstitution> institutionsWithProductActive = Objects.requireNonNull(msUserApiRestClient._retrievePaginatedAndFilteredUser(
171171
null, null, null, Objects.isNull(productId) ? null : List.of(productId), null
172172
, null, List.of(ACTIVE.name()), userId).getBody())
173173
.stream().map(userMapper::toUserInstitutionsFromUserInstitutionResponse)
@@ -218,22 +218,9 @@ private void retrieveBilling(Institution institution, String productId, Onboarde
218218

219219
@Override
220220
public List<UserInstitution> getUsersInstitutions(String userId, String institutionId, Integer page, Integer size, List<String> productRoles, List<String> products, List<PartyRole> roles, List<String> states){
221-
return Objects.requireNonNull(msUserApiRestClient._usersGet(
222-
institutionId, page, productRoles, products, toDtoPartyRole(roles)
223-
, size, states, userId).getBody())
221+
return Objects.requireNonNull(msUserApiRestClient._retrievePaginatedAndFilteredUser(
222+
institutionId, page, productRoles, products, Optional.ofNullable(roles).map(rolesList -> rolesList.stream().map(PartyRole::name).toList()).orElse(null),
223+
size, states, userId).getBody())
224224
.stream().map(userMapper::toUserInstitutionsFromUserInstitutionResponse).toList();
225225
}
226-
227-
private List<it.pagopa.selfcare.user.generated.openapi.v1.dto.PartyRole> toDtoPartyRole(List<PartyRole> roles) {
228-
List<it.pagopa.selfcare.user.generated.openapi.v1.dto.PartyRole> partyRoles = new ArrayList<>();
229-
if (roles != null) {
230-
roles.forEach(partyRole -> {
231-
it.pagopa.selfcare.user.generated.openapi.v1.dto.PartyRole role = it.pagopa.selfcare.user.generated.openapi.v1.dto.PartyRole.valueOf(partyRole.name());
232-
partyRoles.add(role);
233-
});
234-
} else {
235-
return Collections.emptyList();
236-
}
237-
return partyRoles;
238-
}
239226
}

src/test/java/it/pagopa/selfcare/external_api/service/InstitutionServiceImplTest.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ void getInstitutionUserProducts_WithOneMatch() {
103103
it.pagopa.selfcare.user.generated.openapi.v1.dto.OnboardedProductResponse onboardedProductResponse2 = new it.pagopa.selfcare.user.generated.openapi.v1.dto.OnboardedProductResponse();
104104
onboardedProductResponse2.setProductId("123");
105105
userDataResponse.setProducts(List.of(onboardedProductResponse, onboardedProductResponse2));
106-
when(msUserApiRestClient._usersUserIdInstitutionInstitutionIdGet(institutionId, userId, userId, null, null, null, List.of(ACTIVE.name())))
106+
when(msUserApiRestClient._retrieveUsers(institutionId, userId, userId, null, null, null, List.of(ACTIVE.name())))
107107
.thenReturn(ResponseEntity.ok(List.of(userDataResponse)));
108108

109109
Product product = new Product();
@@ -129,7 +129,7 @@ void getInstitutionUserProducts_WithTwoMatch() {
129129
it.pagopa.selfcare.user.generated.openapi.v1.dto.OnboardedProductResponse onboardedProductResponse2 = new it.pagopa.selfcare.user.generated.openapi.v1.dto.OnboardedProductResponse();
130130
onboardedProductResponse.setProductId("id2");
131131
userDataResponse.setProducts(List.of(onboardedProductResponse, onboardedProductResponse2));
132-
when(msUserApiRestClient._usersUserIdInstitutionInstitutionIdGet(institutionId, userId, userId, null, null, null, List.of(ACTIVE.name())))
132+
when(msUserApiRestClient._retrieveUsers(institutionId, userId, userId, null, null, null, List.of(ACTIVE.name())))
133133
.thenReturn(ResponseEntity.ok(List.of(userDataResponse)));
134134

135135
Product product = new Product();
@@ -172,7 +172,7 @@ void getInstitutionProductUserV2EmptyList() throws Exception {
172172
List<UserInstitutionResponse> userInstitutions = objectMapper.readValue(resourceStream, new TypeReference<>() {
173173
});
174174
userInstitutions.forEach(userInstitutionResponse -> userInstitutionResponse.setProducts(Collections.emptyList()));
175-
Mockito.when(msUserApiRestClient._usersGet(institutionId, null, null, List.of(productId), null, null, List.of(ACTIVE.name()), userId))
175+
Mockito.when(msUserApiRestClient._retrievePaginatedAndFilteredUser(institutionId, null, null, List.of(productId), null, null, List.of(ACTIVE.name()), userId))
176176
.thenReturn(ResponseEntity.ok(userInstitutions));
177177

178178

@@ -195,7 +195,7 @@ void getInstitutionProductUserV2WithUuidInServiceType() throws Exception {
195195
byte[] resourceStream = Files.readAllBytes(resource.getFile().toPath());
196196
List<UserInstitutionResponse> userInstitutions = objectMapper.readValue(resourceStream, new TypeReference<>() {
197197
});
198-
Mockito.when(msUserApiRestClient._usersGet(institutionId, null, null, List.of(productId), null, null, List.of(ACTIVE.name()), userId))
198+
Mockito.when(msUserApiRestClient._retrievePaginatedAndFilteredUser(institutionId, null, null, List.of(productId), null, null, List.of(ACTIVE.name()), userId))
199199
.thenReturn(ResponseEntity.ok(userInstitutions));
200200
when(productService.getProductRaw(productId)).thenReturn(dummyProduct(productId));
201201

@@ -225,7 +225,7 @@ void getInstitutionProductUserV2WithoutUuidInServiceType() throws Exception {
225225
byte[] resourceStream = Files.readAllBytes(resource.getFile().toPath());
226226
List<UserInstitutionResponse> userInstitutions = objectMapper.readValue(resourceStream, new TypeReference<>() {
227227
});
228-
Mockito.when(msUserApiRestClient._usersGet(institutionId, null, null, List.of(productId), null, null, List.of(ACTIVE.name()), userId))
228+
Mockito.when(msUserApiRestClient._retrievePaginatedAndFilteredUser(institutionId, null, null, List.of(productId), null, null, List.of(ACTIVE.name()), userId))
229229
.thenReturn(ResponseEntity.ok(userInstitutions));
230230

231231
ClassPathResource userResource = new ClassPathResource("expectations/UserV2.json");

src/test/java/it/pagopa/selfcare/external_api/service/OnboardingServiceImplTest.java

+7-19
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,8 @@
77
import it.pagopa.selfcare.external_api.client.MsOnboardingControllerApi;
88
import it.pagopa.selfcare.external_api.client.MsUserApiRestClient;
99
import it.pagopa.selfcare.external_api.exception.ResourceNotFoundException;
10-
import it.pagopa.selfcare.external_api.mapper.OnboardingMapper;
1110
import it.pagopa.selfcare.external_api.mapper.OnboardingMapperImpl;
1211
import it.pagopa.selfcare.external_api.mapper.UserResourceMapper;
13-
import it.pagopa.selfcare.external_api.model.institution.Institution;
1412
import it.pagopa.selfcare.external_api.model.onboarding.InstitutionUpdate;
1513
import it.pagopa.selfcare.external_api.model.onboarding.OnboardingData;
1614
import it.pagopa.selfcare.external_api.model.onboarding.OnboardingUsersRequest;
@@ -21,7 +19,6 @@
2119
import org.junit.jupiter.api.extension.ExtendWith;
2220
import org.mockito.InjectMocks;
2321
import org.mockito.Mock;
24-
import org.mockito.Mockito;
2522
import org.mockito.Spy;
2623
import org.mockito.junit.jupiter.MockitoExtension;
2724
import org.springframework.core.io.ClassPathResource;
@@ -32,7 +29,9 @@
3229
import java.util.List;
3330

3431
import static it.pagopa.selfcare.onboarding.common.InstitutionType.*;
35-
import static org.mockito.Mockito.*;
32+
import static org.junit.jupiter.api.Assertions.assertEquals;
33+
import static org.mockito.Mockito.any;
34+
import static org.mockito.Mockito.when;
3635

3736
@ExtendWith({MockitoExtension.class})
3837
class OnboardingServiceImplTest extends BaseServiceTestUtils {
@@ -54,6 +53,7 @@ class OnboardingServiceImplTest extends BaseServiceTestUtils {
5453
@Spy
5554
private OnboardingMapperImpl onboardingMapper;
5655

56+
@Override
5757
@BeforeEach
5858
public void setUp() {
5959
super.setUp();
@@ -105,18 +105,6 @@ void onboardingUsers_noInstitutionFound() throws Exception {
105105
"Institution not found for given value");
106106
}
107107

108-
@Test
109-
void onboardingUsers_noInstitutionFound2() throws Exception {
110-
ClassPathResource inputResource = new ClassPathResource("expectations/OnboardingUsersRequest.json");
111-
byte[] onboardingUsersRequestStream = Files.readAllBytes(inputResource.getFile().toPath());
112-
OnboardingUsersRequest onboardingUsersRequest = objectMapper.readValue(onboardingUsersRequestStream, OnboardingUsersRequest.class);
113-
when(institutionApiClient._getInstitutionsUsingGET(onboardingUsersRequest.getInstitutionTaxCode(), onboardingUsersRequest.getInstitutionSubunitCode(), null, null))
114-
.thenReturn(ResponseEntity.ok(new InstitutionsResponse().institutions(Collections.emptyList())));
115-
Assertions.assertThrows(ResourceNotFoundException.class,
116-
() -> onboardingService.onboardingUsers(onboardingUsersRequest, "userName", "surname"),
117-
"Institution not found for given value");
118-
}
119-
120108

121109
@Test
122110
void onboardingUsers_happyPath() throws Exception {
@@ -130,10 +118,10 @@ void onboardingUsers_happyPath() throws Exception {
130118
});
131119
when(institutionApiClient._getInstitutionsUsingGET(onboardingUsersRequest.getInstitutionTaxCode(), onboardingUsersRequest.getInstitutionSubunitCode(), null, null))
132120
.thenReturn(ResponseEntity.ok(new InstitutionsResponse().institutions(institutions)));
133-
when(msUserApiRestClient._usersPost(any())).thenReturn(ResponseEntity.ok("userId"));
134-
when(msUserApiRestClient._usersUserIdPost(any(), any())).thenReturn(ResponseEntity.ok().build());
121+
when(msUserApiRestClient._createOrUpdateByFiscalCode(any())).thenReturn(ResponseEntity.ok("userId"));
122+
when(msUserApiRestClient._createOrUpdateByUserId(any(), any())).thenReturn(ResponseEntity.ok().build());
135123
List<RelationshipInfo> result = onboardingService.onboardingUsers(onboardingUsersRequest, "userName", "surname");
136124

137-
assert result.size() == 2;
125+
assertEquals(result.size(), 2);
138126
}
139127
}

0 commit comments

Comments
 (0)