Исправил ошибку.
This commit is contained in:
psemenkov 2023-08-21 11:57:35 +03:00
parent 2ea1c4332e
commit 661c5916db
5 changed files with 494 additions and 4 deletions

View file

@ -33,11 +33,12 @@ public class SecurityService {
}
public void sendRequest(FondListingsRequest request) {
List<FondSecurity> securityList = request.getSecurities();
CodeStatusComparator<FondSecurity> comparatorBySecSymbolAndWorkflowStatus = CodeStatusComparator.create(
FondSecurity::getSecuritySymbol,
FondSecurity::getWorkflowStatus);
securityList.sort(comparatorBySecSymbolAndWorkflowStatus);
FondSecurity::getSecuritySymbol,
FondSecurity::getWorkflowStatus);
List<FondSecurity> securityList = request.getSecurities().stream()
.filter(r->r.getSecuritySymbol() != null && r.getWorkflowStatus() != null)
.sorted(comparatorBySecSymbolAndWorkflowStatus).toList();
for (FondSecurity security : securityList) {
try {
log.debug("process security uuid: {}", security.getId());

View file

@ -0,0 +1,15 @@
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;
}
}

View file

@ -0,0 +1,18 @@
package ru.spcex.clearing.gatewayapi.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = {"ru.spcex.clearing.gatewayapi.controller", "ru.spcex.clearing.gatewayapi.service"})
public class TestConfig {
@Bean
public GatewayApiSettings getGatewayApiSettings() {
GatewayApiSettings gatewayApiSettings = new GatewayApiSettings();
InboundServerSettings inboundServerSettings = new InboundServerSettings();
gatewayApiSettings.setInboundServer(inboundServerSettings);
return gatewayApiSettings;
}
}

View file

@ -0,0 +1,97 @@
package ru.spcex.clearing.gatewayapi.controller;
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.servlet.WebMvcTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
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;
import ru.spcex.clearing.platform.messaging.domain.BaseRequest;
import ru.spcex.clearing.test.config.ImdgTestConfig;
import ru.spcex.clearing.test.config.KafkaTestConfig;
import ru.spcex.clearing.test.json.MatcherFactoryWithJson;
import ru.spcex.platform.imdg.api.ImdgProvider;
import javax.annotation.PostConstruct;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.concurrent.atomic.AtomicLong;
import static ru.spcex.clearing.test.json.MatcherFactoryWithJson.usingIgnoringFieldsComparatorForClass;
@ContextConfiguration(classes = {
BeanConfiguration.class,
RestTemplateTestConfig.class,
RestTemplateErrorHandler.class,
TestConfig.class,
ImdgTestConfig.class,
KafkaTestConfig.class})
//todo может быть указать пакедж а не список контроллеров
@ExtendWith(SpringExtension.class)
@WebMvcTest
public abstract class AbstractControllerTest {
protected static final MatcherFactoryWithJson.Matcher<BaseRequest> BASE_REQUEST_MATCHER = usingIgnoringFieldsComparatorForClass(BaseRequest.class,"userId");
// protected static final MatcherFactoryWithJson.Matcher<CudResponse> CUD_RESPONSE_MATCHER = usingIgnoringFieldsComparatorForClass(CudResponse.class);
protected static final AtomicLong currentId = new AtomicLong();
private static final CharacterEncodingFilter CHARACTER_ENCODING_FILTER = new CharacterEncodingFilter();
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);
}
@Autowired
private WebApplicationContext webApplicationContext;
@Autowired
@Qualifier("hazelcastServiceTest")
protected ImdgProvider imdgProvider;
private MockMvc mockMvc;
@PostConstruct
private void postConstruct() {
mockMvc = MockMvcBuilders
.webAppContextSetup(webApplicationContext)
.addFilter(CHARACTER_ENCODING_FILTER)
// .apply(springSecurity())
.build();
imdgProvider.waitAvailable();
}
protected ResultActions perform(MockHttpServletRequestBuilder builder) throws Exception {
return mockMvc.perform(builder);
}
protected CommonResponse createResponse(CommonRequest request, boolean success) {
CommonResponse commonResponse = new CommonResponse();
commonResponse.setId(request.getId());
commonResponse.setType(request.getType());
commonResponse.setDatetime(request.getDatetime());
commonResponse.setSection(request.getSection());
if (success) {
commonResponse.setCode(0L);
commonResponse.setMessage("success");
}
return commonResponse;
}
}

View file

@ -0,0 +1,359 @@
package ru.spcex.clearing.gatewayapi.controller;
import org.junit.jupiter.api.Test;
import org.springframework.http.MediaType;
import org.springframework.test.web.servlet.MvcResult;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.FondListingsRequest;
import ru.spcex.clearing.gatewayapi.controller.inbound.request.listing.fond.FondSecurity;
import ru.spcex.clearing.gatewayapi.controller.inbound.response.CommonResponse;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
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;
import static ru.spcex.clearing.test.json.JsonUtil.writeValue;
class GatewayControllerTest extends AbstractControllerTest{
public static final String LISTING_FOND_URL = "/listing_fond/";
@Test
void listingsFond() throws Exception {
CommonResponse expected = new CommonResponse();
expected.setCode(0L);
expected.setMessage("success");
FondListingsRequest request = new FondListingsRequest();
List<FondSecurity> securities = new ArrayList<>();
FondSecurity fondSecurity = new FondSecurity();
fondSecurity.setId(UUID.fromString("a06ca1ef-872f-4fa5-9771-871a97599067"));
fondSecurity.setInstrumentType("EQTY");
fondSecurity.setFullName("\"МОСКОВСКИЙ КРЕДИТНЫЙ БАНК\" (публичное акционерное общество), акция обыкновенная");
fondSecurity.setFullNameEng("MKB");
fondSecurity.setIsin("RU000A0JUG31");
fondSecurity.setWorkflowStatus("ACTV");
fondSecurity.setShareType("S");
fondSecurity.setNominalValue(new BigDecimal("1.000000"));
fondSecurity.setNominalForDate(new BigDecimal("1.000000"));
fondSecurity.setNominalCurrency("RUB");
securities.add(fondSecurity);
fondSecurity.setId(UUID.fromString("a06ca1ef-872f-4fa5-9771-871a97599067"));
fondSecurity.setInstrumentType("EQTY");
fondSecurity.setFullName("\"МОСКОВСКИЙ КРЕДИТНЫЙ БАНК\" (публичное акционерное общество), акция обыкновенная");
fondSecurity.setFullNameEng("MKB");
fondSecurity.setIsin("RU000A0JUG31");
fondSecurity.setWorkflowStatus("ACTV");
fondSecurity.setShareType("S");
fondSecurity.setNominalValue(new BigDecimal("1.000000"));
fondSecurity.setNominalForDate(new BigDecimal("1.000000"));
fondSecurity.setNominalCurrency("RUB");
securities.add(fondSecurity);
request.setSecurities(securities);
String req1 = writeValue(request);
//ACT
MvcResult mvcResult = perform(MockMvcRequestBuilders.post(LISTING_FOND_URL)
.contentType(MediaType.APPLICATION_JSON)
.content(req))
.andDo(print())//output to the log request and response
//ASSERT
.andExpect(status().isOk())
.andExpect(content().contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
//.andExpect(content().json(writeValue(expected)))
.andReturn();
// CudResponseTest cudResponseTest = readValue(mvcResult.getResponse().getContentAsString(), CudResponseTest.class);
// expected.setPayload(new QueueSuccessResponse(ActionType.NEW, cudResponseTest.getPayload().getId()));
// CUD_RESPONSE_MATCHER.assertMatch(cudResponseTest, expected);
}
String req = "{\n" +
"\t\"id\": \"bbf4ccc0-bd9d-466d-9b2b-837e2bc3d35c\",\n" +
"\t\"type\": \"ON_DEMAND\",\n" +
"\t\"section\": \"FOND\",\n" +
"\t\"datetime\": \"02.08.2023 09:30:00:314\",\n" +
"\t\"security\": [{\n" +
"\t\t\t\"id\": \"a06ca1ef-872f-4fa5-9771-871a97599067\",\n" +
"\t\t\t\"instrument_type\": \"EQTY\",\n" +
"\t\t\t\"issuer_id\": \"fcb059ec-544c-4bf8-8024-fe06f22a607f\",\n" +
"\t\t\t\"short_name\": \"МКБ ао\",\n" +
"\t\t\t\"full_name\": \"\\\"МОСКОВСКИЙ КРЕДИТНЫЙ БАНК\\\" (публичное акционерное общество), акция обыкновенная\",\n" +
"\t\t\t\"full_name_eng\": \"MKB\",\n" +
" \"security_symbol\": \"RU000A0JUG31\",\n" +
"\t\t\t\"isin\": \"RU000A0JUG31\",\n" +
"\t\t\t\"workflow_status\": \"ACTV\",\n" +
"\t\t\t\"share_type\": \"S\",\n" +
"\t\t\t\"nominal_value\": \"1.000000\",\n" +
"\t\t\t\"nominal_for_date\": \"1.000000\",\n" +
"\t\t\t\"nominal_currency\": \"RUB\"\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"id\": \"a57aa2c4-8d07-46b5-bfdd-3a00c29f61c6\",\n" +
"\t\t\t\"instrument_type\": \"BOND\",\n" +
"\t\t\t\"issuer_id\": \"35bf708b-459d-432f-bb0e-899cc3530c65\",\n" +
"\t\t\t\"full_name\": \"Неконвертируемые процентные документарные облигации на предъявителя серии 08 с обязательным централизованным хранением\",\n" +
"\t\t\t\"full_name_eng\": \"PJSC \\\"RusHydro\\\" VAR 02/02/23\",\n" +
"\t\t\t\"isin\": \"RU000A0JTMK9\",\n" +
"\t\t\t\"workflow_status\": \"BLKD\",\n" +
"\t\t\t\"maturity_date\": \"02.02.2023\",\n" +
"\t\t\t\"nominal_value\": \"1000.000000\",\n" +
"\t\t\t\"nominal_for_date\": \"1000.000000\",\n" +
"\t\t\t\"nominal_currency\": \"RUB\",\n" +
"\t\t\t\"coupon_type\": \"VAR\",\n" +
"\t\t\t\"coupon_frequency\": \"2.000000\"\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"instrument_type\": \"BOND\",\n" +
"\t\t\t\"issuer_id\": \"adab5846-3fc9-4774-b1db-2e2e05f07583\",\n" +
"\t\t\t\"short_name\": \"ОФЗ 29020\",\n" +
"\t\t\t\"full_name\": \"Облигации федерального займа с переменным купонным доходом\",\n" +
"\t\t\t\"full_name_eng\": \"Minfin Rossii VAR 22/09/27\",\n" +
"\t\t\t\"security_symbol\": \"SU29020RMFS3\",\n" +
"\t\t\t\"isin\": \"RU000A102BV4\",\n" +
"\t\t\t\"workflow_status\": \"BLKD\",\n" +
"\t\t\t\"bond_type\": \"V\",\n" +
"\t\t\t\"maturity_date\": \"22.09.2027\",\n" +
"\t\t\t\"nominal_value\": \"1000.000000\",\n" +
"\t\t\t\"nominal_for_date\": \"1000.000000\",\n" +
"\t\t\t\"nominal_currency\": \"RUB\",\n" +
"\t\t\t\"coupon_type\": \"RUO\",\n" +
"\t\t\t\"coupon_frequency\": \"4.000000\"\n" +
"\t\t}\n" +
"\t],\n" +
"\t\"listing\": [{\n" +
"\t\t\t\"security_id\": \"a06ca1ef-872f-4fa5-9771-871a97599067\",\n" +
"\t\t\t\"lot_size\": 100,\n" +
"\t\t\t\"symbol_code\": \"CBOM\",\n" +
"\t\t\t\"symbol_name\": \"МКБ ао\",\n" +
"\t\t\t\"trading_currency\": \"RUB\",\n" +
"\t\t\t\"workflow_status\": \"ACTV\",\n" +
"\t\t\t\"precision\": 2,\n" +
"\t\t\t\"min_step\": 1,\n" +
"\t\t\t\"settle_code\": \"T0\",\n" +
"\t\t\t\"settle_days\": 0,\n" +
"\t\t\t\"name\": \"Акции Торги\",\n" +
"\t\t\t\"code\": \"UESC\",\n" +
"\t\t\t\"sector\": \"FOND\",\n" +
"\t\t\t\"start_date\": \"10.08.2022\",\n" +
"\t\t\t\"end_date\": \"16.09.2027\"\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"a06ca1ef-872f-4fa5-9771-871a97599067\",\n" +
"\t\t\t\"lot_size\": 100,\n" +
"\t\t\t\"symbol_code\": \"CBOM\",\n" +
"\t\t\t\"symbol_name\": \"МКБ ао\",\n" +
"\t\t\t\"trading_currency\": \"RUB\",\n" +
"\t\t\t\"workflow_status\": \"ACTV\",\n" +
"\t\t\t\"precision\": 2,\n" +
"\t\t\t\"min_step\": 1,\n" +
"\t\t\t\"settle_code\": \"T0\",\n" +
"\t\t\t\"settle_days\": 0,\n" +
"\t\t\t\"name\": \"Акции - РПС\",\n" +
"\t\t\t\"code\": \"NESC\",\n" +
"\t\t\t\"sector\": \"FOND\",\n" +
"\t\t\t\"start_date\": \"10.08.2022\",\n" +
"\t\t\t\"end_date\": \"16.09.2027\"\n" +
"\t\t}\n" +
"\t],\n" +
"\t\"coupon_schedule\": [{\n" +
"\t\t\t\"security_id\": \"a57aa2c4-8d07-46b5-bfdd-3a00c29f61c6\",\n" +
"\t\t\t\"period_start_date\": \"04.08.2022\",\n" +
"\t\t\t\"period_end_date\": \"02.02.2023\",\n" +
"\t\t\t\"coupon_rate\": \"0.100000\",\n" +
"\t\t\t\"coupon_number\": 20,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"28.12.2022\",\n" +
"\t\t\t\"period_end_date\": \"29.03.2023\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 9,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"29.03.2023\",\n" +
"\t\t\t\"period_end_date\": \"28.06.2023\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 3,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"27.09.2023\",\n" +
"\t\t\t\"period_end_date\": \"27.12.2023\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 5,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"26.03.2025\",\n" +
"\t\t\t\"period_end_date\": \"25.06.2025\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 11,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"25.06.2025\",\n" +
"\t\t\t\"period_end_date\": \"24.09.2025\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 12,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"24.09.2025\",\n" +
"\t\t\t\"period_end_date\": \"24.12.2025\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 13,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"24.12.2025\",\n" +
"\t\t\t\"period_end_date\": \"25.03.2026\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 14,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"25.03.2026\",\n" +
"\t\t\t\"period_end_date\": \"24.06.2026\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 15,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"24.06.2026\",\n" +
"\t\t\t\"period_end_date\": \"23.09.2026\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 16,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"23.09.2026\",\n" +
"\t\t\t\"period_end_date\": \"23.12.2026\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 17,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"23.12.2026\",\n" +
"\t\t\t\"period_end_date\": \"24.03.2027\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 18,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"24.03.2027\",\n" +
"\t\t\t\"period_end_date\": \"23.06.2027\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 19,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"23.06.2027\",\n" +
"\t\t\t\"period_end_date\": \"22.09.2027\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 20,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": false\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"28.09.2022\",\n" +
"\t\t\t\"period_end_date\": \"28.12.2022\",\n" +
"\t\t\t\"coupon_rate\": \"75.000000\",\n" +
"\t\t\t\"coupon_number\": 1,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"28.12.2022\",\n" +
"\t\t\t\"period_end_date\": \"29.03.2023\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 2,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"28.06.2023\",\n" +
"\t\t\t\"period_end_date\": \"27.09.2023\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 4,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"27.12.2023\",\n" +
"\t\t\t\"period_end_date\": \"27.03.2024\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 6,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"27.03.2024\",\n" +
"\t\t\t\"period_end_date\": \"26.06.2024\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 7,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"26.06.2024\",\n" +
"\t\t\t\"period_end_date\": \"25.09.2024\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 8,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"25.09.2024\",\n" +
"\t\t\t\"period_end_date\": \"25.12.2024\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 9,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"security_id\": \"8421fc8e-c0ce-451a-9c18-e074a6d58f2d\",\n" +
"\t\t\t\"period_start_date\": \"25.12.2024\",\n" +
"\t\t\t\"period_end_date\": \"26.03.2025\",\n" +
"\t\t\t\"coupon_rate\": \"7.220000\",\n" +
"\t\t\t\"coupon_number\": 10,\n" +
"\t\t\t\"coupon_currency\": \"RUB\",\n" +
"\t\t\t\"is_deleted\": true\n" +
"\t\t}\n" +
"\t]\n" +
"}";
}