From efe5af98e68d0fd991f4068177f3b1cd56ff2b38 Mon Sep 17 00:00:00 2001
From: gianmarcoplutino <119858159+gianmarcoplutino@users.noreply.github.com>
Date: Mon, 22 Jul 2024 17:11:16 +0200
Subject: [PATCH] [SELC - 5274] feat: Added new API to check recipientCode
(#334)
---
app/src/main/resources/swagger/api-docs.json | 83 +++++++++++++++++++
connector-api/pom.xml | 2 +-
.../connector/api/OnboardingMsConnector.java | 3 +
.../model/RecipientCodeStatusResult.java | 9 ++
.../openapi/api-selfcare-onboarding-docs.json | 76 +++++++++++++----
.../connector/OnboardingMsConnectorImpl.java | 6 ++
.../rest/mapper/OnboardingMapper.java | 3 +
.../OnboardingMsConnectorImplTest.java | 27 ++++++
core/pom.xml | 6 ++
.../onboarding/core/InstitutionService.java | 3 +
.../core/InstitutionServiceImpl.java | 10 +++
.../core/InstitutionServiceImplTest.java | 15 ++++
.../controller/InstitutionV2Controller.java | 17 +++-
.../web/model/RecipientCodeStatus.java | 9 ++
.../mapper/OnboardingResourceMapper.java | 3 +
.../resources/swagger/swagger_en.properties | 1 +
.../InstitutionV2ControllerTest.java | 19 +++++
17 files changed, 271 insertions(+), 21 deletions(-)
create mode 100644 connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/model/RecipientCodeStatusResult.java
create mode 100644 web/src/main/java/it/pagopa/selfcare/onboarding/web/model/RecipientCodeStatus.java
diff --git a/app/src/main/resources/swagger/api-docs.json b/app/src/main/resources/swagger/api-docs.json
index 6f386ab9..9e10b1dc 100644
--- a/app/src/main/resources/swagger/api-docs.json
+++ b/app/src/main/resources/swagger/api-docs.json
@@ -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" ],
diff --git a/connector-api/pom.xml b/connector-api/pom.xml
index 4650747b..fcf8d7de 100644
--- a/connector-api/pom.xml
+++ b/connector-api/pom.xml
@@ -14,7 +14,7 @@
it.pagopa.selfcare
onboarding-sdk-product
- 0.1.15
+ 0.1.18
diff --git a/connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/api/OnboardingMsConnector.java b/connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/api/OnboardingMsConnector.java
index a0f0ea88..2633da99 100644
--- a/connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/api/OnboardingMsConnector.java
+++ b/connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/api/OnboardingMsConnector.java
@@ -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;
@@ -38,4 +39,6 @@ public interface OnboardingMsConnector {
boolean checkManager(OnboardingData onboardingData);
VerifyAggregateResult verifyAggregatesCsv(MultipartFile file);
+
+ RecipientCodeStatusResult checkRecipientCode(String originId, String recipientCode);
}
diff --git a/connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/model/RecipientCodeStatusResult.java b/connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/model/RecipientCodeStatusResult.java
new file mode 100644
index 00000000..6372f0bf
--- /dev/null
+++ b/connector-api/src/main/java/it/pagopa/selfcare/onboarding/connector/model/RecipientCodeStatusResult.java
@@ -0,0 +1,9 @@
+package it.pagopa.selfcare.onboarding.connector.model;
+
+
+public enum RecipientCodeStatusResult {
+ ACCEPTED,
+ DENIED_NO_BILLING,
+ DENIED_NO_ASSOCIATION
+}
+
diff --git a/connector/rest/docs/openapi/api-selfcare-onboarding-docs.json b/connector/rest/docs/openapi/api-selfcare-onboarding-docs.json
index 9ca9e6fb..b5fb3dc5 100644
--- a/connector/rest/docs/openapi/api-selfcare-onboarding-docs.json
+++ b/connector/rest/docs/openapi/api-selfcare-onboarding-docs.json
@@ -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" ],
@@ -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",
@@ -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" : {
diff --git a/connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImpl.java b/connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImpl.java
index 06c55dd8..d5ba8f93 100644
--- a/connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImpl.java
+++ b/connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImpl.java
@@ -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;
@@ -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());
+ }
}
diff --git a/connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/rest/mapper/OnboardingMapper.java b/connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/rest/mapper/OnboardingMapper.java
index 7846180a..c4191512 100644
--- a/connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/rest/mapper/OnboardingMapper.java
+++ b/connector/rest/src/main/java/it/pagopa/selfcare/onboarding/connector/rest/mapper/OnboardingMapper.java
@@ -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;
@@ -133,4 +134,6 @@ default String setOrigin(Origin origin) {
OnboardingPaRequest toOnboardingPaAggregationRequest(OnboardingData onboardingData);
VerifyAggregateResult toVerifyAggregateResult(VerifyAggregateResponse body);
+
+ RecipientCodeStatusResult toRecipientCodeStatusResult(RecipientCodeStatus recipientCodeStatus);
}
diff --git a/connector/rest/src/test/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImplTest.java b/connector/rest/src/test/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImplTest.java
index 7631c9b6..4f237b14 100644
--- a/connector/rest/src/test/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImplTest.java
+++ b/connector/rest/src/test/java/it/pagopa/selfcare/onboarding/connector/OnboardingMsConnectorImplTest.java
@@ -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;
@@ -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 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);
+ }
}
diff --git a/core/pom.xml b/core/pom.xml
index 874ff66c..c246a716 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -16,6 +16,12 @@
it.pagopa.selfcare
selc-onboarding-connector-api
+
+ it.pagopa.selfcare
+ onboarding-sdk-common
+ 0.1.18
+ compile
+
\ No newline at end of file
diff --git a/core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionService.java b/core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionService.java
index 8d0690c7..a34d9bd6 100644
--- a/core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionService.java
+++ b/core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionService.java
@@ -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;
@@ -51,4 +52,6 @@ public interface InstitutionService {
List getByFilters(String productId, String taxCode, String origin, String originId, String subunitCode);
VerifyAggregateResult validateAggregatesCsv(MultipartFile file);
+
+ RecipientCodeStatusResult checkRecipientCode(String originId, String recipientCode);
}
diff --git a/core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImpl.java b/core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImpl.java
index 68b15812..628b3d68 100644
--- a/core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImpl.java
+++ b/core/src/main/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImpl.java
@@ -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;
@@ -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) {
diff --git a/core/src/test/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImplTest.java b/core/src/test/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImplTest.java
index b33b9164..a598a146 100644
--- a/core/src/test/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImplTest.java
+++ b/core/src/test/java/it/pagopa/selfcare/onboarding/core/InstitutionServiceImplTest.java
@@ -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;
@@ -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");
diff --git a/web/src/main/java/it/pagopa/selfcare/onboarding/web/controller/InstitutionV2Controller.java b/web/src/main/java/it/pagopa/selfcare/onboarding/web/controller/InstitutionV2Controller.java
index e187025e..9754e87a 100644
--- a/web/src/main/java/it/pagopa/selfcare/onboarding/web/controller/InstitutionV2Controller.java
+++ b/web/src/main/java/it/pagopa/selfcare/onboarding/web/controller/InstitutionV2Controller.java
@@ -11,10 +11,7 @@
import it.pagopa.selfcare.onboarding.common.InstitutionType;
import it.pagopa.selfcare.onboarding.core.InstitutionService;
-import it.pagopa.selfcare.onboarding.web.model.CompanyOnboardingDto;
-import it.pagopa.selfcare.onboarding.web.model.InstitutionResource;
-import it.pagopa.selfcare.onboarding.web.model.OnboardingProductDto;
-import it.pagopa.selfcare.onboarding.web.model.VerifyAggregatesResponse;
+import it.pagopa.selfcare.onboarding.web.model.*;
import it.pagopa.selfcare.onboarding.web.model.mapper.InstitutionMapper;
import it.pagopa.selfcare.onboarding.web.model.mapper.OnboardingResourceMapper;
import lombok.extern.slf4j.Slf4j;
@@ -129,4 +126,16 @@ public VerifyAggregatesResponse verifyAggregatesCsv(@RequestParam("aggregates")
return response;
}
+ @GetMapping(value = "/onboarding/recipientCode/verification")
+ @ResponseStatus(HttpStatus.OK)
+ @ApiOperation(value = "", notes = "${swagger.onboarding.institutions.api.onboarding.checkRecipientCode}")
+ public RecipientCodeStatus checkRecipientCode(@RequestParam(value = "originId") String originId,
+ @RequestParam(value = "recipientCode") String recipientCode) {
+ log.trace("Check recipientCode start");
+ log.debug("Check originId start for institution with originId {} and recipientCode {}", originId, recipientCode);
+ RecipientCodeStatus response = onboardingResourceMapper.toRecipientCodeStatus(institutionService.checkRecipientCode(originId, recipientCode));
+ log.trace("Check recipientCode end");
+ return response;
+ }
+
}
diff --git a/web/src/main/java/it/pagopa/selfcare/onboarding/web/model/RecipientCodeStatus.java b/web/src/main/java/it/pagopa/selfcare/onboarding/web/model/RecipientCodeStatus.java
new file mode 100644
index 00000000..c2a7ed25
--- /dev/null
+++ b/web/src/main/java/it/pagopa/selfcare/onboarding/web/model/RecipientCodeStatus.java
@@ -0,0 +1,9 @@
+package it.pagopa.selfcare.onboarding.web.model;
+
+
+public enum RecipientCodeStatus {
+ ACCEPTED,
+ DENIED_NO_BILLING,
+ DENIED_NO_ASSOCIATION
+}
+
diff --git a/web/src/main/java/it/pagopa/selfcare/onboarding/web/model/mapper/OnboardingResourceMapper.java b/web/src/main/java/it/pagopa/selfcare/onboarding/web/model/mapper/OnboardingResourceMapper.java
index fd1e24ab..4414b927 100644
--- a/web/src/main/java/it/pagopa/selfcare/onboarding/web/model/mapper/OnboardingResourceMapper.java
+++ b/web/src/main/java/it/pagopa/selfcare/onboarding/web/model/mapper/OnboardingResourceMapper.java
@@ -2,6 +2,7 @@
import it.pagopa.selfcare.commons.base.security.PartyRole;
import it.pagopa.selfcare.onboarding.connector.model.InstitutionLegalAddressData;
+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.VerifyAggregateResult;
import it.pagopa.selfcare.onboarding.connector.model.onboarding.OnboardingData;
@@ -91,4 +92,6 @@ default List toAdmin(List users) {
}
VerifyAggregatesResponse toVerifyAggregatesResponse(VerifyAggregateResult verifyAggregateResult);
+
+ RecipientCodeStatus toRecipientCodeStatus (RecipientCodeStatusResult recipientCodeStatusResult);
}
diff --git a/web/src/main/resources/swagger/swagger_en.properties b/web/src/main/resources/swagger/swagger_en.properties
index 8abd30a3..df6fbc97 100644
--- a/web/src/main/resources/swagger/swagger_en.properties
+++ b/web/src/main/resources/swagger/swagger_en.properties
@@ -6,6 +6,7 @@ swagger.onboarding.pnPGInstitutions.api.description=PN PG Institution operations
swagger.onboarding.product.api.description=Product operations
swagger.onboarding.institutions.api.onboarding=The service allows the onboarding of Users to an Institution
swagger.onboarding.institutions.api.onboarding.subunit=The service allows the onboarding of Users to a subunit of an Institution
+swagger.onboarding.institutions.api.onboarding.checkRecipientCode=The service allows to verify if recipientCode is valid or not
swagger.onboarding.institutions.api.getInstitutionOnboardingInfo=The service retrieves the institutions Manager and institution informations
swagger.onboarding.institutions.api.getInstitutionGeographicTaxonomy=The service retrieve the institution's geographic taxonomy
swagger.onboarding.institutions.api.getInstitutions=The service retrieves all the onboarded institutions related to the logged user
diff --git a/web/src/test/java/it/pagopa/selfcare/onboarding/web/controller/InstitutionV2ControllerTest.java b/web/src/test/java/it/pagopa/selfcare/onboarding/web/controller/InstitutionV2ControllerTest.java
index bb4f1e79..0002b75b 100644
--- a/web/src/test/java/it/pagopa/selfcare/onboarding/web/controller/InstitutionV2ControllerTest.java
+++ b/web/src/test/java/it/pagopa/selfcare/onboarding/web/controller/InstitutionV2ControllerTest.java
@@ -199,4 +199,23 @@ void verifyAggregatesCsvFailure() throws Exception {
verify(institutionServiceMock, times(1)).validateAggregatesCsv(any(MultipartFile.class));
verifyNoMoreInteractions(institutionServiceMock);
}
+
+ @Test
+ void verifyRecipientCode() throws Exception {
+ // Given
+ String recipientCode = "recipientCode";
+ String originId = "originId";
+
+ // When
+ mvc.perform(MockMvcRequestBuilders
+ .get(BASE_URL + "/onboarding/recipientCode/verification")
+ .queryParam( "recipientCode", recipientCode)
+ .queryParam( "originId", originId)
+ .contentType(APPLICATION_JSON_VALUE))
+ .andExpect(status().isOk());
+
+ // Then
+ verify(institutionServiceMock, times(1)).checkRecipientCode(any(), any());
+ verifyNoMoreInteractions(institutionServiceMock);
+ }
}