diff --git a/clearing-parent/gateway-api/pom.xml b/clearing-parent/gateway-api/pom.xml index f04184e96..7dc3e784c 100644 --- a/clearing-parent/gateway-api/pom.xml +++ b/clearing-parent/gateway-api/pom.xml @@ -72,17 +72,7 @@ org.springframework.boot - spring-boot-test-autoconfigure - test - - - org.junit.jupiter - junit-jupiter - test - - - org.springframework - spring-test + spring-boot-starter-test test diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateErrorHandler.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateErrorHandler.java index c6000dc0c..00f3bd5d0 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateErrorHandler.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/config/RestTemplateErrorHandler.java @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; import org.springframework.stereotype.Component; import org.springframework.util.StreamUtils; @@ -11,6 +12,7 @@ import org.springframework.web.client.ResponseErrorHandler; import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest; import ru.spcex.clearing.gatewayapi.controller.outbound.response.ErrorResponse; import ru.spcex.clearing.gatewayapi.enums.OutboundRequestType; +import ru.spcex.clearing.gatewayapi.service.NotificationService; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; @@ -30,13 +32,16 @@ public class RestTemplateErrorHandler implements ResponseErrorHandler { private final KafkaSender kafaSender; private final ObjectMapper objectMapper; private final Map outboundRequestByUuid; + private final NotificationService notificationService; public RestTemplateErrorHandler(KafkaSender kafaSender, ObjectMapper objectMapper, - Map outboundRequestByUuid) { + Map outboundRequestByUuid, + NotificationService notificationService) { this.kafaSender = kafaSender; this.objectMapper = objectMapper; this.outboundRequestByUuid = outboundRequestByUuid; + this.notificationService = notificationService; } @Override @@ -51,11 +56,12 @@ public class RestTemplateErrorHandler implements ResponseErrorHandler { log.info("Response error body: " + responseErrorBody); ErrorResponse errorResponse = objectMapper.readValue(responseErrorBody, ErrorResponse.class); String errorMessage; + OutboundRequest outboundRequest = null; if (StringUtils.isEmpty(errorResponse.getMessage())) { String error = (String) errorResponse.getUnknownProperties().get("error"); errorMessage = String.format("Error: %s", error); } else { - OutboundRequest outboundRequest = outboundRequestByUuid.remove(errorResponse.getId()); + outboundRequest = outboundRequestByUuid.remove(errorResponse.getId()); if (outboundRequest != null) { errorMessage = makeMessage(outboundRequest, errorResponse); } else { @@ -63,8 +69,12 @@ public class RestTemplateErrorHandler implements ResponseErrorHandler { errorMessage = errorResponse.getMessage(); } } - NotificationNewRequest notificationNewRequest = createNotification(errorMessage); - kafaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, notificationNewRequest); + if (HttpStatus.BAD_REQUEST.equals(response.getStatusCode()) && outboundRequest != null && notificationService.canProcess(outboundRequest.getType())) { + notificationService.sendErrorNotification(errorResponse, outboundRequest); + } else { + NotificationNewRequest notificationNewRequest = createNotification(errorMessage); + kafaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, notificationNewRequest); + } } private NotificationNewRequest createNotification(String message) { diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java index 7a47cbfd6..3ee258360 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/GatewayController.java @@ -19,6 +19,7 @@ import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.mkr.MMLis import ru.spcex.clearing.gatewayapi.controller.inbound.request.operations.OperationsRequest; import ru.spcex.clearing.gatewayapi.controller.inbound.response.CommonResponse; import ru.spcex.clearing.gatewayapi.exception.GatewayException; +import ru.spcex.clearing.gatewayapi.service.NotificationService; import ru.spcex.clearing.gatewayapi.service.OperationService; import ru.spcex.clearing.gatewayapi.service.processor.CompanyProcessor; import ru.spcex.clearing.gatewayapi.service.processor.ListingCurrProcessor; @@ -45,6 +46,7 @@ public class GatewayController { private final ListingCurrProcessor listingCurrProcessor; private final ExecutorService executor; private final OperationService operationService; + private final NotificationService notificationService; private List validTypes = Arrays.asList("DAY_START", "ON_DEMAND"); @@ -54,7 +56,8 @@ public class GatewayController { ListingMMProcessor listingMMProcessor, ListingCurrProcessor listingCurrProcessor, @Qualifier("gatewayExecutor") ExecutorService executor, - OperationService operationService) { + OperationService operationService, + NotificationService notificationService) { this.messageResolver = messageResolver; this.companiesProcessor = companiesProcessor; this.listingFondProcessor = listingFondProcessor; @@ -62,6 +65,7 @@ public class GatewayController { this.listingCurrProcessor = listingCurrProcessor; this.executor = executor; this.operationService = operationService; + this.notificationService = notificationService; } @@ -154,6 +158,7 @@ public class GatewayController { @ResponseBody public CommonResponse limits(@RequestBody LimitRequest request) { log.debug("Received message: {}", request); + notificationService.sendLimitNotification(request); return createCommonResponse(request.getId()); } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/inbound/request/limit/LimitRequest.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/inbound/request/limit/LimitRequest.java index 81905185d..12af846e5 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/inbound/request/limit/LimitRequest.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/controller/inbound/request/limit/LimitRequest.java @@ -6,7 +6,7 @@ import java.util.UUID; public class LimitRequest { @JsonProperty("result") - private String result; + private Boolean result; @JsonProperty("description") private String description; @JsonProperty("id") @@ -16,11 +16,11 @@ public class LimitRequest { @JsonProperty("error_file") private String errorFile; - public String getResult() { + public Boolean getResult() { return result; } - public void setResult(String result) { + public void setResult(Boolean result) { this.result = result; } diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java index c94e63ac4..0b7f95d91 100644 --- a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/GatewayService.java @@ -51,7 +51,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean { public GatewayService(Consumer kafkaQueue, Producer kafkaProducer, - RestTemplate restTemplate, + @Qualifier("rest-template") RestTemplate restTemplate, UserRoleVerification userRoleVerification, GatewayApiSettings gatewayApiSettings, @Qualifier("sentAssets") Map> sentAssets, @@ -274,7 +274,7 @@ public class GatewayService extends QueueConsumer implements InitializingBean { } } - private String formingInboundUrl(String path) { + public String formingInboundUrl(String path) { return "%s://%s:%s/%s".formatted( inboundServerSettings.getEnableSsl() ? "https" : "http", inboundServerSettings.getHost(), diff --git a/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/NotificationService.java b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/NotificationService.java new file mode 100644 index 000000000..1d1e38fa2 --- /dev/null +++ b/clearing-parent/gateway-api/src/main/java/ru/spcex/clearing/gatewayapi/service/NotificationService.java @@ -0,0 +1,70 @@ +package ru.spcex.clearing.gatewayapi.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import ru.spcex.clearing.gatewayapi.controller.inbound.request.limit.LimitRequest; +import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest; +import ru.spcex.clearing.gatewayapi.controller.outbound.response.ErrorResponse; +import ru.spcex.clearing.gatewayapi.enums.OutboundRequestType; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.NotificationNewRequest; +import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.platform.enumeration.ObjectType; +import ru.spcex.platform.enumeration.Priority; + +import java.util.List; +import java.util.Map; +import java.util.UUID; + +@Service +public class NotificationService { + private final Logger log = LoggerFactory.getLogger(getClass()); + + private final KafkaSender kafkaSender; + private final Map outboundRequestByUuid; + private final List supportedTypes = List.of(OutboundRequestType.FILL_LIMITS.getKey()); + + public NotificationService(KafkaSender kafkaSender, + Map outboundRequestByUuid) { + this.kafkaSender = kafkaSender; + this.outboundRequestByUuid = outboundRequestByUuid; + } + + public void sendLimitNotification(LimitRequest request) { + NotificationNewRequest newRequest = new NotificationNewRequest(); + OutboundRequest outboundReq = outboundRequestByUuid.get(request.getId()); + if (outboundReq == null) { + log.error("Unknown uuid = {} in LimitRequest", request.getId()); + return; + } + log.info("Receive request: uuid = {}, file = {} with result = {} and sending section = {}.", + request.getId(), request.getLogFile(), request.getResult(), outboundReq.getSection()); + newRequest.setObjectType(ObjectType.rgst.getKey()); + newRequest.setComment(request.getDescription()); + if (request.getResult() != null && request.getResult()) { + newRequest.setPriority(Priority.LOW.getKey()); + } else if (request.getResult() != null && !request.getResult()) { + newRequest.setPriority(Priority.HIGH.getKey()); + } else { + log.error("Unknown status in LimitRequest result = {}, uuid = {}", request.getResult(), request.getId()); + } + log.info("Sending notification to kafka: {}", newRequest); + kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, newRequest); + } + + public void sendErrorNotification(ErrorResponse response, OutboundRequest request) { + NotificationNewRequest newRequest = new NotificationNewRequest(); + log.info("Receive ErrorResponse: uuid = {}, file = {} and sending section = {}.", + response.getId(), request.getContent().get("file"), request.getSection()); + newRequest.setObjectType(ObjectType.rgst.getKey()); + newRequest.setComment(response.getMessage()); + newRequest.setPriority(Priority.HIGH.getKey()); + log.info("Sending notification to kafka: {}", newRequest); + kafkaSender.sendRequestToQueue(Consts.NOTIFICATION_NEW, newRequest); + } + + public boolean canProcess(String type) { + return supportedTypes.contains(type); + } +} diff --git a/clearing-parent/gateway-api/src/main/resources/application.properties b/clearing-parent/gateway-api/src/main/resources/application.properties index 758d6cd26..d52efb390 100644 --- a/clearing-parent/gateway-api/src/main/resources/application.properties +++ b/clearing-parent/gateway-api/src/main/resources/application.properties @@ -28,5 +28,5 @@ gateway-api.kafka-consumer.buffer-memory=33554432 gateway-api.inbound-server.enable-ssl=false gateway-api.inbound-server.host=10.200.200.183 gateway-api.inbound-server.port=8084 -gateway-api.inbound-server.pathLOCM=/test_rest/inbound_request -gateway-api.inbound-server.pathLOSC=/test_rest/inbound_request \ No newline at end of file +gateway-api.inbound-server.pathLOCM=test_rest/inbound_request +gateway-api.inbound-server.pathLOSC=test_rest/inbound_request \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/TestConfiguration.java b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/MapperConf.java similarity index 91% rename from clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/TestConfiguration.java rename to clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/MapperConf.java index 3ebd2091d..84926e7ba 100644 --- a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/TestConfiguration.java +++ b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/MapperConf.java @@ -6,12 +6,12 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import ru.spcex.clearing.test.json.JsonUtil; -@Configuration -public class TestConfiguration { +@TestConfiguration +public class MapperConf { @Bean("testObjectMapper") public ObjectMapper objectMapper() { diff --git a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/RestTemplateTestConfig.java b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/RestTemplateTestConfig.java deleted file mode 100644 index f3873ee29..000000000 --- a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/RestTemplateTestConfig.java +++ /dev/null @@ -1,15 +0,0 @@ -package ru.spcex.clearing.gatewayapi.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.client.RestTemplate; - -@Configuration -public class RestTemplateTestConfig { - - @Bean("rest-template") - public RestTemplate restTemplate(RestTemplateErrorHandler restTemplateErrorHandler) { - RestTemplate restTemplate = new RestTemplate(); - return restTemplate; - } -} \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/TestConfig.java b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/TestConfig.java index 41a77c826..af9e87d60 100644 --- a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/TestConfig.java +++ b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/config/TestConfig.java @@ -1,18 +1,22 @@ package ru.spcex.clearing.gatewayapi.config; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.boot.web.client.RestTemplateBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; -import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.FilterType; -@Configuration -@ComponentScan(basePackages = {"ru.spcex.clearing.gatewayapi.controller", "ru.spcex.clearing.gatewayapi.service"}) +@TestConfiguration +@ComponentScan(basePackages = {"ru.spcex.clearing.gatewayapi.config", + "ru.spcex.clearing.gatewayapi.controller", + "ru.spcex.clearing.gatewayapi.service"}, + excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = KafkaConfig.class), + @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = GatewayApiImdgConfig.class)}) +//@EnableConfigurationProperties(value = GatewayApiSettings.class) нужна только если не @SpringBootTest public class TestConfig { @Bean - public GatewayApiSettings getGatewayApiSettings() { - GatewayApiSettings gatewayApiSettings = new GatewayApiSettings(); - InboundServerSettings inboundServerSettings = new InboundServerSettings(); - gatewayApiSettings.setInboundServer(inboundServerSettings); - return gatewayApiSettings; + public RestTemplateBuilder restTemplateBuilder() { + return new RestTemplateBuilder(); } } \ No newline at end of file diff --git a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/controller/AbstractControllerTest.java b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/controller/AbstractControllerTest.java index 119897877..7125ad989 100644 --- a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/controller/AbstractControllerTest.java +++ b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/controller/AbstractControllerTest.java @@ -14,7 +14,6 @@ import org.springframework.web.context.WebApplicationContext; import org.springframework.web.filter.CharacterEncodingFilter; import ru.spcex.clearing.gatewayapi.config.BeanConfiguration; import ru.spcex.clearing.gatewayapi.config.RestTemplateErrorHandler; -import ru.spcex.clearing.gatewayapi.config.RestTemplateTestConfig; import ru.spcex.clearing.gatewayapi.config.TestConfig; import ru.spcex.clearing.gatewayapi.controller.inbound.request.CommonRequest; import ru.spcex.clearing.gatewayapi.controller.inbound.response.CommonResponse; @@ -35,7 +34,6 @@ import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFi @ContextConfiguration(classes = { BeanConfiguration.class, - RestTemplateTestConfig.class, RestTemplateErrorHandler.class, TestConfig.class, ImdgTestConfig.class, diff --git a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/service/GatewayServiceTest.java b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/service/GatewayServiceTest.java index 83fbea1d2..5cb275a18 100644 --- a/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/service/GatewayServiceTest.java +++ b/clearing-parent/gateway-api/src/test/java/ru/spcex/clearing/gatewayapi/service/GatewayServiceTest.java @@ -1,6 +1,168 @@ package ru.spcex.clearing.gatewayapi.service; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.test.autoconfigure.web.client.AutoConfigureWebClient; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.mock.http.client.MockClientHttpResponse; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.test.web.client.MockRestServiceServer; +import org.springframework.test.web.client.ResponseCreator; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.ResultActions; +import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; +import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.util.StreamUtils; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.filter.CharacterEncodingFilter; +import ru.spcex.clearing.gatewayapi.config.GatewayApiSettings; +import ru.spcex.clearing.gatewayapi.config.TestConfig; +import ru.spcex.clearing.gatewayapi.controller.inbound.request.limit.LimitRequest; +import ru.spcex.clearing.gatewayapi.controller.outbound.request.OutboundRequest; +import ru.spcex.clearing.gatewayapi.controller.outbound.response.ErrorResponse; +import ru.spcex.clearing.gatewayapi.controller.outbound.response.SuccessResponse; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.utilities.LimExportedRequest; +import ru.spcex.clearing.test.config.ImdgTestConfig; +import ru.spcex.clearing.test.config.KafkaTestConfig; +import ru.spcex.platform.enumeration.Section; +import ru.spcex.platform.imdg.api.ImdgProvider; + +import javax.annotation.PostConstruct; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.nio.charset.Charset; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicReference; + +import static org.springframework.test.web.client.match.MockRestRequestMatchers.requestTo; +import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = {TestConfig.class, + ImdgTestConfig.class, + KafkaTestConfig.class}) +@SpringBootTest +@AutoConfigureWebClient(registerRestTemplate = true) public class GatewayServiceTest { + private static final CharacterEncodingFilter CHARACTER_ENCODING_FILTER = new CharacterEncodingFilter(); + public static final String LIMITS_URL = "/limits/"; + private MockRestServiceServer mockServer; + + @Autowired + @Qualifier("testObjectMapper") + private ObjectMapper mapper; + + @Autowired + @Qualifier("rest-template") + private RestTemplate restTemplate; + + @Autowired + private GatewayService service; + + @Autowired + private GatewayApiSettings settings; + + @Autowired + private WebApplicationContext webApplicationContext; + + @Autowired + @Qualifier("hazelcastServiceTest") + protected ImdgProvider imdgProvider; + + private MockMvc mockMvc; + + static { + Path path = Paths.get("src", "main", "resources"); + String currentPath = path.toAbsolutePath().toString(); + System.setProperty("spring.config.location", currentPath + File.separator); + + CHARACTER_ENCODING_FILTER.setEncoding("UTF-8"); + CHARACTER_ENCODING_FILTER.setForceEncoding(true); + } + + @PostConstruct + private void postConstruct() { + mockServer = MockRestServiceServer.bindTo(restTemplate).build(); + mockMvc = MockMvcBuilders + .webAppContextSetup(webApplicationContext) + .addFilter(CHARACTER_ENCODING_FILTER) +// .apply(springSecurity()) + .build(); + imdgProvider.waitAvailable(); + } + + protected ResultActions perform(MockHttpServletRequestBuilder builder) throws Exception { + return mockMvc.perform(builder); + } + + @Disabled//Для отладки + @Test + void requestOnLimit() throws Exception { + String message = "test response"; + BaseRequest req = new BaseRequest<>(); + LimExportedRequest reqP = new LimExportedRequest(); + req.setRequestPayload(reqP); + reqP.setSection(Section.FOND.getKey()); + reqP.setLimFileName("limits_security_20240108134638.lim"); + AtomicReference uuid = prepareMockServerResponse(HttpStatus.OK, message); + service.requestOnLimit(req); + LimitRequest request = new LimitRequest(); + request.setId(uuid.get()); + request.setResult(true); + request.setDescription(message); + MvcResult mvcResult = perform(MockMvcRequestBuilders.post(LIMITS_URL) + .contentType(MediaType.APPLICATION_JSON) + .content(mapper.writeValueAsString(request))) + .andDo(print())//output to the log request and response + .andExpect(status().isOk()) + .andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON)) + .andReturn(); + + uuid = prepareMockServerResponse(HttpStatus.BAD_REQUEST, message); + service.requestOnLimit(req); + } + + public AtomicReference prepareMockServerResponse(HttpStatus responseStatus, String message) { + mockServer.reset(); + + AtomicReference body = new AtomicReference<>(); + AtomicReference uuid = new AtomicReference<>(); + ResponseCreator responseCreator = r -> { + String reqBody = StreamUtils.copyToString((ByteArrayOutputStream) r.getBody(), Charset.defaultCharset()); + OutboundRequest request = mapper.readValue(reqBody, OutboundRequest.class); + if (HttpStatus.BAD_REQUEST.equals(responseStatus)){ + ErrorResponse errorResponse = new ErrorResponse(); + errorResponse.setId(request.getId()); + errorResponse.setMessage(message); + body.set(mapper.writeValueAsString(errorResponse)); + } else { + SuccessResponse errorResponse = new SuccessResponse(); + errorResponse.setId(request.getId()); + body.set(mapper.writeValueAsString(errorResponse)); + } + uuid.set(request.getId()); + MockClientHttpResponse response = new MockClientHttpResponse(body.get().getBytes(Charset.defaultCharset()), responseStatus); + response.getHeaders().setContentType(MediaType.APPLICATION_JSON); + return response; + }; + mockServer.expect(requestTo(service.formingInboundUrl(settings.getInboundServer().getPathLOCM()))).andRespond(responseCreator); + return uuid; + } // @Test // public void makeContentByReportRequestTest() { diff --git a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationNewRequest.java b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationNewRequest.java index 2711c0480..6ed258995 100644 --- a/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationNewRequest.java +++ b/platform-parent/platform-messaging/src/main/java/ru/spcex/clearing/platform/messaging/domain/cud/utilities/NotificationNewRequest.java @@ -63,4 +63,16 @@ public class NotificationNewRequest { public void setPriority(String priority) { this.priority = priority; } + + @Override + public String toString() { + return "NotificationNewRequest{" + + "senderId=" + senderId + + ", addresseeId=" + addresseeId + + ", objectType='" + objectType + '\'' + + ", objectId=" + objectId + + ", comment='" + comment + '\'' + + ", priority='" + priority + '\'' + + '}'; + } }