report-service new test

This commit is contained in:
akulikov 2024-06-26 19:13:33 +03:00
parent eb8ce07f27
commit cc95a67759
3 changed files with 175 additions and 17 deletions

View file

@ -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;

View file

@ -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"
1 FIRMID SESSION_ID SESSION_DATE ACCOUNT TKR VALUE DATE OBL_VALUE REQ_VALUE LOT_CURRENCY CURRENCY_NETTO TR_EXECDATE
2 8 47580029 24.06.2024T12:06:41 30411860700000006064 0008MAT00001 24.06.2024 UZS 10000.00000000 24.06.2024
3 8 47580029 24.06.2024T12:06:41 30411810200000006064 0008MAT00001 24.06.2024 RUB -69.75000000 24.06.2024
4 8 47580029 24.06.2024T12:06:41 30411810000000002064 0008CAT00001 9743.90 24.06.2024 RUB
5 8 47580029 24.06.2024T12:06:41 30411810000000002064 0008CAT00001 24.06.2024 0.00 7000000000.00 RUB
6 472 47580029 24.06.2024T12:06:41 30411810101000002413 0472CAT00001 -9743.90 24.06.2024 RUB
7 472 47580029 24.06.2024T12:06:41 30411810101000002413 0472CAT00001 24.06.2024 RUB 59884.02000000 24.06.2024
8 472 47580029 24.06.2024T12:06:41 30411156900000006413 0472CAT00001 24.06.2024 CNY 10.00000000 24.06.2024
9 234 47580029 24.06.2024T12:06:41 30414810600000007000 0234CAT00001 24.06.2024 RUB -69627.92000000 24.06.2024
10 45 47580029 24.06.2024T12:06:41 30411810300000002049 0045CAT00001 24.06.2024 0.00 3000000000.00 RUB
11 472 47580029 24.06.2024T12:06:41 30411860500000006413 0472CAT00001 24.06.2024 UZS -10000000.00000000 24.06.2024
12 234 47580029 24.06.2024T12:06:41 30414810600000007000 0234CAT00001 24.06.2024 CNY -10.00000000 24.06.2024
13 302 47580029 24.06.2024T12:06:41 30411810700000006056 0302MAT00001 24.06.2024 10000000000.00 0.00 RUB
14 234 47580029 24.06.2024T12:06:41 30414810600000007000 0234CAT00001 24.06.2024 UZS 10000000.00000000 24.06.2024
15 95 47580029 24.06.2024T12:06:41 30411860000000006094 0095CAT00001 24.06.2024 UZS -10000.00000000 24.06.2024
16 95 47580029 24.06.2024T12:06:41 30411810300000002094 0095CAT00001 24.06.2024 RUB 69.75000000 24.06.2024

View file

@ -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.