From cc95a67759bb479e813e2396cd1bf2466f3a0ba9 Mon Sep 17 00:00:00 2001 From: akulikov Date: Wed, 26 Jun 2024 19:13:33 +0300 Subject: [PATCH] report-service new test --- .../services/ReportServiceTest_KS.java | 157 ++++++++++++++++-- .../KS_REP_CASH_NETTO_extended_expected.csv | 16 ++ .../ks/ksRepCashNetto_registries.csv | 19 +++ 3 files changed, 175 insertions(+), 17 deletions(-) create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_extended_expected.csv create mode 100644 clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/ksRepCashNetto_registries.csv diff --git a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java index c319f92d6..5b0eafc3c 100644 --- a/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java +++ b/clearing-parent/reports-service/src/test/java/ru/spcex/clearing/reports/services/ReportServiceTest_KS.java @@ -1,14 +1,41 @@ package ru.spcex.clearing.reports.services; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Pattern; import com.opencsv.CSVParser; import com.opencsv.CSVParserBuilder; import com.opencsv.CSVReader; import com.opencsv.CSVReaderBuilder; import com.opencsv.exceptions.CsvValidationException; +import javax.annotation.PostConstruct; import org.apache.commons.io.FileUtils; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.producer.Producer; -import org.junit.jupiter.api.*; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Assertions; +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.MethodOrderer; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -42,24 +69,24 @@ import ru.spcex.clearing.reports.config.validation.ValidationConfig; import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; -import ru.spcex.platform.enumeration.*; +import ru.spcex.platform.enumeration.AccountType; +import ru.spcex.platform.enumeration.ClearingCategory; +import ru.spcex.platform.enumeration.CompanySymbol; +import ru.spcex.platform.enumeration.CoverageStatus; +import ru.spcex.platform.enumeration.DocumentTypes; +import ru.spcex.platform.enumeration.MoneyFlowSide; +import ru.spcex.platform.enumeration.RegistryDesignation; +import ru.spcex.platform.enumeration.RegistryInstrumentType; +import ru.spcex.platform.enumeration.RegistryStatus; +import ru.spcex.platform.enumeration.RegistryUnit; +import ru.spcex.platform.enumeration.ReportBuilderType; +import ru.spcex.platform.enumeration.Section; +import ru.spcex.platform.enumeration.SessionType; +import ru.spcex.platform.enumeration.Side; +import ru.spcex.platform.enumeration.WorkflowStatus; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import javax.annotation.PostConstruct; -import java.io.File; -import java.io.FileReader; -import java.io.IOException; -import java.math.BigDecimal; -import java.time.Instant; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; -import java.util.*; - -import static org.junit.jupiter.api.Assertions.assertEquals; - @ExtendWith(SpringExtension.class) @ContextConfiguration(classes = { BeanConfiguration.class, @@ -73,6 +100,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; }) @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class ReportServiceTest_KS { + private Pattern bigDecimalPattern = Pattern.compile("^[-+\\d.,]+$"); + private BigDecimal bigDecimalZero = new BigDecimal(BigInteger.ZERO, 4); protected DateTimeFormatter dateFormatter_yyyyMMdd = DateTimeFormatter.ofPattern("yyyyMMdd"); private static File outFolder; private static int reportRequestCnt = 0; @@ -1156,6 +1185,93 @@ public class ReportServiceTest_KS { executionDepositImdg.delete(executionDeposit); } + @Test + @Order(11) + public void ksRepCashNettoExtendedTest() throws IOException, CsvValidationException { + clearTestDir(); + + Session session = new Session(); + session.setCreated( + Instant.ofEpochMilli(LocalDateTime.of( + 2022, + 1, + 1, + 1, + 1, + 1 + ).toEpochSecond(ZoneOffset.UTC)) + ); + Long sessionId = sessionImdg.insert(session); + + ReportRequestWithSessionId reportRequest = new ReportRequestWithSessionId(); + reportRequest.setReportId(ReportBuilderType.KS_REP_CASH_NETTO.getKey()); + reportRequest.setSessionId(sessionId); + + CSVParser parser = new CSVParserBuilder() + .withSeparator(';') + .withIgnoreQuotations(true) + .build(); + + List registries = new ArrayList<>(); + List accounts = new ArrayList<>(); + try (CSVReader csvReader = new CSVReaderBuilder( + new FileReader( + getClass().getClassLoader().getResource("expected_reports_csv/ks/ksRepCashNetto_registries.csv").getFile() + ) + ).withSkipLines(1) + .withCSVParser(parser) + .build()) { + do { + String[] row = csvReader.readNext(); + if (row == null) break; + Registry registry = new Registry(); + registry.setSessionId(sessionId); + registry.setClearingDate(LocalDate.now()); + registry.setTradingCode(row[1]); + registry.setTradingClearingRegistry(row[14]); + registry.setRegistryDesignation(row[8]); + registry.setRegistryInstrumentType(row[9]); + registry.setRegistryCapacity(row[10]); + registry.setRegistryUnit(row[11]); + registry.setRegistryCode(row[12]); + registry.setAccountType(row[6]); + registry.setAccount(row[7]); + if (row[6].equalsIgnoreCase(AccountType.Info.getKey())) { + Account account = new Account(); + account.setCompanyId(1L); + account.setAccountType(AccountType.Anlt.getKey()); + account.setAccount(row[7]); + accountImdg.insert(account); + accounts.add(account); + } + registry.setSessionType(row[42]); + registry.setSection(row[47]); + registry.setBalance(new BigDecimal(row[18].replace(',', '.'))); + registry.setSecuritySymbol(row[17]); + registryImdg.insert(registry); + registries.add(registry); + } while (true); + } + + String jsonString = TestUtils.getJsonStringForSystem(reportRequest, 0L); + + TestUtils.addRecordToKafka((MockConsumer) reportService.getConsumer(), + Consts.CREATE_REPORT_FOR_SESSION_ID, + reportRequestWithSessionIdCnt++, + 0, + jsonString); + + TestUtils.waitingSendAndCheckRecord(0L, producer); + + File outFile = outFolder.listFiles()[0]; + File expectedFile = new File(getClass().getClassLoader().getResource("expected_reports_csv/ks/KS_REP_CASH_NETTO_extended_expected.csv").getFile()); + compareCSVFiles(expectedFile, outFile, Arrays.asList("SESSION_ID", "DATE", "ACCOUNT", "SESSION_DATE", "TR_EXECDATE")); + + for (Registry registry : registries) registryImdg.delete(registry); + for (Account account : accounts) accountImdg.delete(account); + sessionImdg.delete(session); + } + private void compareCSVFiles(File expectedFile, File actualFile, List columnsForSkip) throws IOException, CsvValidationException { if (columnsForSkip == null) columnsForSkip = Collections.emptyList(); @@ -1204,7 +1320,14 @@ public class ReportServiceTest_KS { String expected = expectedLine[expectedIdx]; String actual = actualLine[actualIdx]; lineEqual = expected.equals(actual); - if (!lineEqual) break; + if (!lineEqual) { + if (bigDecimalPattern.matcher(expected).find() && bigDecimalPattern.matcher(actual).find()) { + BigDecimal actualBD = new BigDecimal(actual.replace(',', '.')); + BigDecimal expectedBD = new BigDecimal(expected.replace(',', '.')); + lineEqual = Math.abs(actualBD.subtract(expectedBD).compareTo(bigDecimalZero)) <= 0; + } + if (!lineEqual) break; + } } if (lineEqual) { findEqual = true; diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_extended_expected.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_extended_expected.csv new file mode 100644 index 000000000..d7c096390 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/KS_REP_CASH_NETTO_extended_expected.csv @@ -0,0 +1,16 @@ +"FIRMID","SESSION_ID","SESSION_DATE","ACCOUNT","TKR","VALUE","DATE","OBL_VALUE","REQ_VALUE","LOT_CURRENCY","CURRENCY_NETTO","TR_EXECDATE" +"8","47580029","24.06.2024T12:06:41","30411860700000006064","0008MAT00001",,"24.06.2024",,,"UZS","10000.00000000","24.06.2024" +"8","47580029","24.06.2024T12:06:41","30411810200000006064","0008MAT00001",,"24.06.2024",,,"RUB","-69.75000000","24.06.2024" +"8","47580029","24.06.2024T12:06:41","30411810000000002064","0008CAT00001","9743.90","24.06.2024",,,"RUB",, +"8","47580029","24.06.2024T12:06:41","30411810000000002064","0008CAT00001",,"24.06.2024","0.00","7000000000.00","RUB",, +"472","47580029","24.06.2024T12:06:41","30411810101000002413","0472CAT00001","-9743.90","24.06.2024",,,"RUB",, +"472","47580029","24.06.2024T12:06:41","30411810101000002413","0472CAT00001",,"24.06.2024",,,"RUB","59884.02000000","24.06.2024" +"472","47580029","24.06.2024T12:06:41","30411156900000006413","0472CAT00001",,"24.06.2024",,,"CNY","10.00000000","24.06.2024" +"234","47580029","24.06.2024T12:06:41","30414810600000007000","0234CAT00001",,"24.06.2024",,,"RUB","-69627.92000000","24.06.2024" +"45","47580029","24.06.2024T12:06:41","30411810300000002049","0045CAT00001",,"24.06.2024","0.00","3000000000.00","RUB",, +"472","47580029","24.06.2024T12:06:41","30411860500000006413","0472CAT00001",,"24.06.2024",,,"UZS","-10000000.00000000","24.06.2024" +"234","47580029","24.06.2024T12:06:41","30414810600000007000","0234CAT00001",,"24.06.2024",,,"CNY","-10.00000000","24.06.2024" +"302","47580029","24.06.2024T12:06:41","30411810700000006056","0302MAT00001",,"24.06.2024","10000000000.00","0.00","RUB",, +"234","47580029","24.06.2024T12:06:41","30414810600000007000","0234CAT00001",,"24.06.2024",,,"UZS","10000000.00000000","24.06.2024" +"95","47580029","24.06.2024T12:06:41","30411860000000006094","0095CAT00001",,"24.06.2024",,,"UZS","-10000.00000000","24.06.2024" +"95","47580029","24.06.2024T12:06:41","30411810300000002094","0095CAT00001",,"24.06.2024",,,"RUB","69.75000000","24.06.2024" diff --git a/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/ksRepCashNetto_registries.csv b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/ksRepCashNetto_registries.csv new file mode 100644 index 000000000..ee191b2e6 --- /dev/null +++ b/clearing-parent/reports-service/src/test/resources/expected_reports_csv/ks/ksRepCashNetto_registries.csv @@ -0,0 +1,19 @@ +company_id;trading_code;clearing_code;short_name;full_name;account_id;account_type;account;registry_designation;registry_instrument_type;registry_capacity;registry_unit;registry_code;trading_clearing_registry_id;trading_clearing_registry;registry_status;security_id;security_symbol;balance;open_balance;close_balance;credit;debit;settled_credit;settled_debit;check_balance;diff_balance;plan_balance;balance_dimension;settlement_date;settlement_code;trading_date;clearing_date;refund_date;value_date;price;contract;counter_party_id;comment;parent_id;group_id;session_id;session_type;payment_id;id;created_at;updated_at;section +4500120;95;95;Банк ВТБ (ПАО);Банк ВТБ (публичное акционерное общество);4410078;CLRN;30411810300000002094;C;M;A;T;CMAT;21240012;0095CAT00001;CLRD;643;RUB;69,75;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;80162;(null);(null);507;47580029;UNIT;(null);47580094;24.06.2024 14:16;24.06.2024 15:19;CURR +80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;38690096;CLRN;3,04118607E+019;C;M;A;T;CMAT;130040;0008MAT00001;CLRD;860;UZS;10000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;4500120;(null);(null);507;47580029;UNIT;(null);47580076;24.06.2024 14:16;24.06.2024 15:19;CURR +80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;38690028;CLRN;3,04111569E+019;C;M;A;T;CMAT;1860016;0472CAT00001;CLRD;156;CNY;10;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;4500072;(null);(null);508;47580029;UNIT;(null);47580074;24.06.2024 14:16;24.06.2024 15:19;CURR +80136;45;45;АО "АБ "РОССИЯ";Акционерное общество «Акционерный Банк «РОССИЯ»;130023;CLRN;3,04118103E+019;C;M;A;T;CMAT;1860025;0045CAT00001;CLRD;643;RUB;3000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;17,12;DT1000S001U/240624/45/24062400000001;80074;(null);(null);24062400000001;47580029;UNIT;(null);47580072;24.06.2024 14:16;24.06.2024 15:19;MKR +4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";47130002;INFO;3,99118600000001E+019;C;M;A;T;CMAT;47130004;0234CAT00001;CLRD;860;UZS;10000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;80022;(null);(null);1518298;47580029;UNIT;(null);47580093;24.06.2024 14:16;24.06.2024 15:19;CURR +80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130013;CLRN;3,041181E+019;C;M;A;T;CMAT;1930000;0008CAT00001;CLRD;643;RUB;7000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;16,88;DT1000S001U/240624/8/24062400000002;80074;(null);(null);24062400000002;47580029;UNIT;(null);47580079;24.06.2024 14:16;24.06.2024 15:19;MKR +4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";4410023;INFO;3,99118100000003E+019;C;M;A;T;CMAT;47130004;0234CAT00001;CLRD;643;RUB;129,58;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;80022;(null);(null);508;47580029;UNIT;(null);47580073;24.06.2024 14:16;24.06.2024 15:19;CURR +80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130013;CLRN;3,041181E+019;C;M;A;T;CMAT;1930000;0008CAT00001;CLRD;643;RUB;9743,9;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;97;(null);80022;(null);(null);1461034;47580029;UNIT;(null);47580085;24.06.2024 14:16;24.06.2024 15:19;FOND +80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;C;M;A;T;CMAT;1860016;0472CAT00001;CLRD;643;RUB;69757,5;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;4500072;(null);(null);1518298;47580029;UNIT;(null);47580090;24.06.2024 14:16;24.06.2024 15:19;CURR +80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;38690032;CLRN;3,04118605E+019;L;M;A;T;LMAT;1860016;0472CAT00001;CLRD;860;UZS;10000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;4500072;(null);(null);1518298;47580029;UNIT;(null);47580075;24.06.2024 14:16;24.06.2024 15:19;CURR +4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";47130000;INFO;3,99111560000002E+019;L;M;A;T;LMAT;47130004;0234CAT00001;CLRD;156;CNY;10;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;80022;(null);(null);508;47580029;UNIT;(null);47580087;24.06.2024 14:16;24.06.2024 15:19;CURR +80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;L;M;A;T;LMAT;1860016;0472CAT00001;CLRD;643;RUB;129,58;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;12,9575;38840004;4500072;(null);(null);508;47580029;UNIT;(null);47580083;24.06.2024 14:16;24.06.2024 15:19;CURR +80022;472;472;ПАО "Промсвязьбанк";Публичное акционерное общество «Промсвязьбанк» ;130005;CLRN;3,0411810101E+019;L;M;A;T;LMAT;1860016;0472CAT00001;CLRD;643;RUB;9743,9;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;97;(null);80162;(null);(null);1461034;47580029;UNIT;(null);47580095;24.06.2024 14:16;24.06.2024 15:19;FOND +80074;302;302;Комитет финансов СПб;Комитет финансов Санкт-Петербурга;130019;CLRN;3,04118107E+019;L;M;A;T;LMAT;130034;0302MAT00001;CLRD;643;RUB;7000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;16,88;DT1000S001U/240624/8/24062400000002;80162;(null);(null);24062400000002;47580029;UNIT;(null);47580089;24.06.2024 14:16;24.06.2024 15:19;MKR +4500072;234;234;Банк "ВБРР" (АО);Акционерное общество "Всероссийский банк развития регионов";4410023;INFO;3,99118100000003E+019;L;M;A;T;LMAT;47130004;0234CAT00001;CLRD;643;RUB;69757,5;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7575;38840005;80022;(null);(null);1518298;47580029;UNIT;(null);47580078;24.06.2024 14:16;24.06.2024 15:19;CURR +80074;302;302;Комитет финансов СПб;Комитет финансов Санкт-Петербурга;130019;CLRN;3,04118107E+019;L;M;A;T;LMAT;130034;0302MAT00001;CLRD;643;RUB;3000000000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;25.06.2024;24.06.2024;17,12;DT1000S001U/240624/45/24062400000001;80136;(null);(null);24062400000001;47580029;UNIT;(null);47580086;24.06.2024 14:16;24.06.2024 15:19;MKR +80162;8;8;ПАО Сбербанк;Публичное акционерное общество «Сбербанк России»;130017;CLRN;3,04118102E+019;L;M;A;T;LMAT;130040;0008MAT00001;CLRD;643;RUB;69,75;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;4500120;(null);(null);507;47580029;UNIT;(null);47580084;24.06.2024 14:16;24.06.2024 15:19;CURR +4500120;95;95;Банк ВТБ (ПАО);Банк ВТБ (публичное акционерное общество);38690016;CLRN;30411810300000002049;L;M;A;T;LMAT;21240012;0095CAT00001;CLRD;860;UZS;10000;(null);(null);0;0;0;0;0;0;0;MONY;24.06.2024;T0;24.06.2024;24.06.2024;(null);24.06.2024;69,7515;38840009;80162;(null);(null);507;47580029;UNIT;(null);47580088;24.06.2024 14:16;24.06.2024 15:19;CURR