Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
ialbert 2025-07-17 18:34:09 +03:00
commit b855cc3d62
2 changed files with 143 additions and 3 deletions

View file

@ -5,6 +5,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.List;
@ -25,6 +26,8 @@ import ru.spcex.platform.utils.log.ExceptionUtils;
@Component
public class PrepareXMLFile implements InitializingBean {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH-mm-ss");
private final Logger log = LoggerFactory.getLogger(getClass());
private final ExportXMLServiceSettings settings;
public static String outDir;
@ -61,9 +64,13 @@ public class PrepareXMLFile implements InitializingBean {
Table table = resultContainer.getTableForExport();
LocalDateTime currentDateTime = LocalDateTime.now();
resultContainer.setRegistrationDateTime(currentDateTime);
String fileName = nameTemplates.get(table).getFileName(resultContainer, files);
if (sftpConnectionError) fileName = "error_%s_%s".formatted(LocalDateTime.now(), fileName);
File xmlFile = new File(fileName);
File xmlFile = new File(nameTemplates.get(table).getFileName(resultContainer, files));
if (sftpConnectionError) {
String errorFileName = "error_%s_%s".formatted(LocalDateTime.now().format(FORMATTER), xmlFile.getName());
xmlFile = xmlFile.getParentFile().getAbsoluteFile().toPath().resolve(errorFileName).toFile();
}
log.info("XML FILE = {}", xmlFile.toPath());
try {
Path xmlFilePath = xmlFile.toPath();

View file

@ -0,0 +1,133 @@
package ru.spcex.clearing.xml.exporter.logic.stages;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.fail;
import java.io.File;
import java.io.IOException;
import java.math.BigDecimal;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import javax.annotation.PostConstruct;
import org.apache.commons.io.FileUtils;
import org.apache.kafka.clients.producer.MockProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.SpyBean;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.TestPropertySource;
import ru.clearing.classes.statics.data.sdf.SDf05;
import ru.spcex.clearing.imdg.IMDGDistributedNames;
import ru.spcex.clearing.test.TestObjectCreator;
import ru.spcex.clearing.test.config.ImdgTestConfig;
import ru.spcex.clearing.test.config.KafkaTestConfig;
import ru.spcex.clearing.xml.exporter.TestUtils;
import ru.spcex.clearing.xml.exporter.config.SFTPConfig;
import ru.spcex.clearing.xml.exporter.config.XMLExporterConfig;
import ru.spcex.clearing.xml.exporter.config.settings.ExportXMLServiceSettings;
import ru.spcex.clearing.xml.exporter.logic.data.ResultContainer;
import ru.spcex.clearing.xml.exporter.logic.data.enums.StageResult;
import ru.spcex.clearing.xml.exporter.logic.data.enums.Table;
import ru.spcex.clearing.xml.exporter.logic.data.tags.objects.DF05ObjectTag;
import ru.spcex.platform.imdg.api.Imdg;
import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService;
@SpringBootTest(classes = {
PrepareXMLFile.class,
ExportFromHazelcast.class,
ExportXMLServiceSettings.class,
XMLExporterConfig.class,
SFTPConfig.class,
ImdgTestConfig.class,
KafkaTestConfig.class,
})
@TestPropertySource(properties = {"spring.config.location=./src/test/resources/"})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class PrepareAndExportSf05FromHazelcastTest {
private final Logger log = LoggerFactory.getLogger(getClass());
private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yy");
@Autowired
@Qualifier("hazelcastServiceTest")
private HazelcastService hazelcastService;
@Captor
private ArgumentCaptor<ProducerRecord> producerRecord;
@SpyBean
private MockProducer<String, Object> producer;
@Autowired
@Qualifier("mockProducer")
protected Producer<String, Object> mockProducer;
@Autowired
private PrepareXMLFile prepareXMLFile;
@Autowired
private ExportFromHazelcast exportFromHazelcast;
@PostConstruct
private void init() {
hazelcastService.waitAvailable();
new TestObjectCreator(hazelcastService).createUserAdmin(1000L);
}
@AfterEach
void tearDown() {
try {
Files.deleteIfExists(Path.of("./src/test/resources/xml/DF-05_S_PRC1604240915_1.xml"));
} catch (IOException e) {
fail(e.getMessage());
}
}
@Test
void process_shouldExportSDf05ToObjectTag() {
SDf05 expectedSDf05 = new SDf05();
expectedSDf05.setTp(BigDecimal.TEN);
expectedSDf05.setDt(LocalDate.parse("2024-03-14"));
expectedSDf05.setTm("09:22:12");
expectedSDf05.setPr("test2");
Imdg<SDf05> imdg = hazelcastService.getImdg(IMDGDistributedNames.Map_SDf05, SDf05.class);
imdg.insert(expectedSDf05);
ResultContainer actualResultContainer = new ResultContainer(Table.S_DF05, "S");
actualResultContainer.setSourceName(null);
StageResult result = prepareXMLFile.process(actualResultContainer);
actualResultContainer.setLastStageResult(result);
StageResult stageResult = exportFromHazelcast.process(actualResultContainer);
DF05ObjectTag actualObjectTag = (DF05ObjectTag) actualResultContainer.getDocumentTag().getObjects().get(0);
Assertions.assertThat(stageResult).isEqualTo(StageResult.OK);
Assertions.assertThat(actualResultContainer.getDocumentTag().getMessageType()).isEqualTo("DF05");
Assertions.assertThat(actualObjectTag.getTp()).isEqualTo(expectedSDf05.getTp());
Assertions.assertThat(actualObjectTag.getDt()).isEqualTo(expectedSDf05.getDt());
Assertions.assertThat(actualObjectTag.getTm()).isEqualTo(expectedSDf05.getTm());
Assertions.assertThat(actualObjectTag.getPr()).isEqualTo(expectedSDf05.getPr());
try {
String actual = FileUtils.readFileToString(actualResultContainer.getFileForExport(), StandardCharsets.UTF_8);
String expected = FileUtils.readFileToString(new File("./src/test/resources/xml-original/DF-05_S_PRC1604240915_1.xml"), StandardCharsets.UTF_8);
actual = TestUtils.removeAttributes(actual, "MESSAGEDATE", "MESSAGETIME");
expected = TestUtils.removeAttributes(expected, "MESSAGEDATE", "MESSAGETIME");
assertEquals(expected, actual);
} catch (IOException e) {
fail("File comparison failed!");
}
}
}