Skip to content

Commit

Permalink
[SELC - 5274] feat: Added new API to check recipientCode (#334)
Browse files Browse the repository at this point in the history
  • Loading branch information
gianmarcoplutino authored Jul 22, 2024
1 parent a57976a commit efe5af9
Show file tree
Hide file tree
Showing 17 changed files with 271 additions and 21 deletions.
83 changes: 83 additions & 0 deletions app/src/main/resources/swagger/api-docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -1464,6 +1464,89 @@
} ]
}
},
"/v2/institutions/onboarding/recipientCode/verification" : {
"get" : {
"tags" : [ "institutions" ],
"summary" : "checkRecipientCode",
"description" : "The service allows to verify if recipientCode is valid or not",
"operationId" : "checkRecipientCodeUsingGET",
"parameters" : [ {
"name" : "originId",
"in" : "query",
"description" : "originId",
"required" : true,
"style" : "form",
"schema" : {
"type" : "string"
}
}, {
"name" : "recipientCode",
"in" : "query",
"description" : "recipientCode",
"required" : true,
"style" : "form",
"schema" : {
"type" : "string"
}
} ],
"responses" : {
"200" : {
"description" : "OK",
"content" : {
"application/json" : {
"schema" : {
"type" : "string",
"enum" : [ "ACCEPTED", "DENIED_NO_ASSOCIATION", "DENIED_NO_BILLING" ]
}
}
}
},
"400" : {
"description" : "Bad Request",
"content" : {
"application/problem+json" : {
"schema" : {
"$ref" : "#/components/schemas/Problem"
}
}
}
},
"401" : {
"description" : "Unauthorized",
"content" : {
"application/problem+json" : {
"schema" : {
"$ref" : "#/components/schemas/Problem"
}
}
}
},
"404" : {
"description" : "Not Found",
"content" : {
"application/problem+json" : {
"schema" : {
"$ref" : "#/components/schemas/Problem"
}
}
}
},
"500" : {
"description" : "Internal Server Error",
"content" : {
"application/problem+json" : {
"schema" : {
"$ref" : "#/components/schemas/Problem"
}
}
}
}
},
"security" : [ {
"bearerAuth" : [ "global" ]
} ]
}
},
"/v1/product/{id}" : {
"get" : {
"tags" : [ "product" ],
Expand Down
2 changes: 1 addition & 1 deletion connector-api/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
<dependency>
<groupId>it.pagopa.selfcare</groupId>
<artifactId>onboarding-sdk-product</artifactId>
<version>0.1.15</version>
<version>0.1.18</version>
</dependency>
</dependencies>
<repositories>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package it.pagopa.selfcare.onboarding.connector.api;

import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
import it.pagopa.selfcare.onboarding.connector.model.institutions.VerifyAggregateResult;
import it.pagopa.selfcare.onboarding.connector.model.onboarding.OnboardingData;
import org.springframework.core.io.Resource;
Expand Down Expand Up @@ -38,4 +39,6 @@ public interface OnboardingMsConnector {
boolean checkManager(OnboardingData onboardingData);

VerifyAggregateResult verifyAggregatesCsv(MultipartFile file);

RecipientCodeStatusResult checkRecipientCode(String originId, String recipientCode);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package it.pagopa.selfcare.onboarding.connector.model;


public enum RecipientCodeStatusResult {
ACCEPTED,
DENIED_NO_BILLING,
DENIED_NO_ASSOCIATION
}

76 changes: 60 additions & 16 deletions connector/rest/docs/openapi/api-selfcare-onboarding-docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,46 @@
"name" : "support"
} ],
"paths" : {
"/v1/onboarding/checkRecipientCode" : {
"get" : {
"tags" : [ "Onboarding Controller" ],
"summary" : "check if recipientCode is valid or not",
"parameters" : [ {
"name" : "originId",
"in" : "query",
"schema" : {
"type" : "string"
}
}, {
"name" : "recipientCode",
"in" : "query",
"schema" : {
"type" : "string"
}
} ],
"responses" : {
"200" : {
"description" : "OK",
"content" : {
"application/json" : {
"schema" : {
"$ref" : "#/components/schemas/RecipientCodeStatus"
}
}
}
},
"401" : {
"description" : "Not Authorized"
},
"403" : {
"description" : "Not Allowed"
}
},
"security" : [ {
"SecurityScheme" : [ ]
} ]
}
},
"/v1/aggregates/verification" : {
"post" : {
"tags" : [ "Aggregates Controller" ],
Expand Down Expand Up @@ -1633,6 +1673,26 @@
"type" : "string",
"example" : "2022-03-10T12:15:50"
},
"RecipientCodeStatus" : {
"enum" : [ "DENIED_NO_BILLING", "DENIED_NO_ASSOCIATION", "ACCEPTED" ],
"type" : "string"
},
"RowError" : {
"required" : [ "row" ],
"type" : "object",
"properties" : {
"row" : {
"format" : "int32",
"type" : "integer"
},
"cf" : {
"type" : "string"
},
"reason" : {
"type" : "string"
}
}
},
"OnboardingDefaultRequest" : {
"required" : [ "productId", "users", "institution" ],
"type" : "object",
Expand Down Expand Up @@ -2060,22 +2120,6 @@
}
}
},
"RowError" : {
"required" : [ "row", "cf" ],
"type" : "object",
"properties" : {
"row" : {
"format" : "int32",
"type" : "integer"
},
"cf" : {
"type" : "string"
},
"reason" : {
"type" : "string"
}
}
},
"TokenResponse" : {
"type" : "object",
"properties" : {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import it.pagopa.selfcare.onboarding.common.InstitutionPaSubunitType;
import it.pagopa.selfcare.onboarding.common.InstitutionType;
import it.pagopa.selfcare.onboarding.connector.api.OnboardingMsConnector;
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
import it.pagopa.selfcare.onboarding.connector.model.institutions.VerifyAggregateResult;
import it.pagopa.selfcare.onboarding.connector.model.onboarding.OnboardingData;
import it.pagopa.selfcare.onboarding.connector.rest.client.MsOnboardingAggregatesApiClient;
Expand Down Expand Up @@ -154,4 +155,9 @@ public boolean checkManager(OnboardingData onboardingData) {
String result = msOnboardingApiClient._v1OnboardingCheckManagerPost(onboardingMapper.toOnboardingUsersRequest(onboardingData)).getBody();
return Boolean.parseBoolean(result);
}

@Override
public RecipientCodeStatusResult checkRecipientCode(String originId, String recipientCode) {
return onboardingMapper.toRecipientCodeStatusResult(msOnboardingApiClient._v1OnboardingCheckRecipientCodeGet(originId, recipientCode).getBody());
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package it.pagopa.selfcare.onboarding.connector.rest.mapper;


import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
import it.pagopa.selfcare.onboarding.connector.model.institutions.VerifyAggregateResult;
import it.pagopa.selfcare.onboarding.connector.model.onboarding.DataProtectionOfficer;
import it.pagopa.selfcare.onboarding.connector.model.onboarding.GeographicTaxonomy;
Expand Down Expand Up @@ -133,4 +134,6 @@ default String setOrigin(Origin origin) {
OnboardingPaRequest toOnboardingPaAggregationRequest(OnboardingData onboardingData);

VerifyAggregateResult toVerifyAggregateResult(VerifyAggregateResponse body);

RecipientCodeStatusResult toRecipientCodeStatusResult(RecipientCodeStatus recipientCodeStatus);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package it.pagopa.selfcare.onboarding.connector;

import it.pagopa.selfcare.onboarding.common.InstitutionType;
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
import it.pagopa.selfcare.onboarding.connector.model.institutions.Institution;
import it.pagopa.selfcare.onboarding.connector.model.onboarding.*;
import it.pagopa.selfcare.onboarding.connector.model.onboarding.DataProtectionOfficer;
Expand Down Expand Up @@ -416,4 +417,30 @@ void checkManager() {
._v1OnboardingCheckManagerPost(request);
verifyNoMoreInteractions(msOnboardingApiClient);
}

@Test
void checkRecipientCode() {
// given
final String recipientCode = "recipientCode";
final String originId = "originId";
RecipientCodeStatus expectedStatusResult = RecipientCodeStatus.ACCEPTED;
ResponseEntity<RecipientCodeStatus> responseEntity = ResponseEntity.ok(expectedStatusResult);

when(msOnboardingApiClient._v1OnboardingCheckRecipientCodeGet(recipientCode, originId))
.thenReturn(responseEntity);
when(onboardingMapper.toRecipientCodeStatusResult(responseEntity.getBody()))
.thenReturn(RecipientCodeStatusResult.ACCEPTED);

// when
final Executable executable = () -> onboardingMsConnector.checkRecipientCode(recipientCode, originId);

// then
assertDoesNotThrow(executable);
verify(msOnboardingApiClient, times(1))
._v1OnboardingCheckRecipientCodeGet(recipientCode, originId);
verify(onboardingMapper, times(1))
.toRecipientCodeStatusResult(responseEntity.getBody());
verifyNoMoreInteractions(msOnboardingApiClient);
verifyNoMoreInteractions(onboardingMapper);
}
}
6 changes: 6 additions & 0 deletions core/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@
<groupId>it.pagopa.selfcare</groupId>
<artifactId>selc-onboarding-connector-api</artifactId>
</dependency>
<dependency>
<groupId>it.pagopa.selfcare</groupId>
<artifactId>onboarding-sdk-common</artifactId>
<version>0.1.18</version>
<scope>compile</scope>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import it.pagopa.selfcare.onboarding.connector.model.InstitutionLegalAddressData;
import it.pagopa.selfcare.onboarding.connector.model.InstitutionOnboardingData;
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
import it.pagopa.selfcare.onboarding.connector.model.institutions.Institution;
import it.pagopa.selfcare.onboarding.connector.model.institutions.InstitutionInfo;
import it.pagopa.selfcare.onboarding.connector.model.institutions.MatchInfoResult;
Expand Down Expand Up @@ -51,4 +52,6 @@ public interface InstitutionService {
List<Institution> getByFilters(String productId, String taxCode, String origin, String originId, String subunitCode);

VerifyAggregateResult validateAggregatesCsv(MultipartFile file);

RecipientCodeStatusResult checkRecipientCode(String originId, String recipientCode);
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import it.pagopa.selfcare.onboarding.connector.exceptions.ResourceNotFoundException;
import it.pagopa.selfcare.onboarding.connector.model.InstitutionLegalAddressData;
import it.pagopa.selfcare.onboarding.connector.model.InstitutionOnboardingData;
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
import it.pagopa.selfcare.onboarding.connector.model.institutions.*;
import it.pagopa.selfcare.onboarding.connector.model.institutions.infocamere.InstitutionInfoIC;
import it.pagopa.selfcare.onboarding.connector.model.onboarding.GeographicTaxonomy;
Expand Down Expand Up @@ -474,6 +475,15 @@ public VerifyAggregateResult validateAggregatesCsv(MultipartFile file) {
return verifyAggregateResult;
}

@Override
public RecipientCodeStatusResult checkRecipientCode(String originId, String recipientCode) {
log.trace("checkRecipientCode start");
log.debug("checkRecipientCode for institution with originId {} and recipientCode {}", originId, recipientCode);
RecipientCodeStatusResult result = onboardingMsConnector.checkRecipientCode(originId, recipientCode);
log.debug("checkRecipientCode result = {}", result);
log.trace("checkRecipientCode end");
return result;
}

@Override
public InstitutionOnboardingData getInstitutionOnboardingData(String externalInstitutionId, String productId) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import it.pagopa.selfcare.onboarding.connector.exceptions.ResourceNotFoundException;
import it.pagopa.selfcare.onboarding.connector.model.InstitutionLegalAddressData;
import it.pagopa.selfcare.onboarding.connector.model.InstitutionOnboardingData;
import it.pagopa.selfcare.onboarding.connector.model.RecipientCodeStatusResult;
import it.pagopa.selfcare.onboarding.connector.model.institutions.*;
import it.pagopa.selfcare.onboarding.connector.model.institutions.infocamere.BusinessInfoIC;
import it.pagopa.selfcare.onboarding.connector.model.institutions.infocamere.InstitutionInfoIC;
Expand Down Expand Up @@ -1641,6 +1642,20 @@ void validateAggregatesCsvReturnsValidResultWhenErrorsExist() {
verifyNoMoreInteractions(onboardingMsConnector);
}

@Test
void checkRecipientCode() {
// Given
when(onboardingMsConnector.checkRecipientCode(any(), any())).thenReturn(RecipientCodeStatusResult.ACCEPTED);

// When
RecipientCodeStatusResult result = institutionService.checkRecipientCode("recipientCode", "originId");

// Then
assertEquals(result, RecipientCodeStatusResult.ACCEPTED);
verify(onboardingMsConnector, times(1)).checkRecipientCode(any(), any());
verifyNoMoreInteractions(onboardingMsConnector);
}


private static InstitutionInfo createInstitutionInfoMock() {
return false ? mockInstance(new InstitutionInfo()) : mockInstance(new InstitutionInfo(), "setInstitutionLocation");
Expand Down
Loading

0 comments on commit efe5af9

Please sign in to comment.