report-service new test
This commit is contained in:
parent
eb8ce07f27
commit
cc95a67759
3 changed files with 175 additions and 17 deletions
|
|
@ -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<Registry> registries = new ArrayList<>();
|
||||
List<Account> 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<String> 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;
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
@ -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
|
||||
|
Can't render this file because it contains an unexpected character in line 4 and column 22.
|
Loading…
Add table
Reference in a new issue