Added tests for entry extracting and monitoring request validation

This commit is contained in:
Mikhail Trofimov 2025-07-02 13:09:33 +03:00
parent 3358a8ee21
commit bd2ad04a65
11 changed files with 156 additions and 0 deletions

View file

@ -0,0 +1,156 @@
package ru.nbch.credit_tracker.utils;
import jakarta.xml.bind.JAXBException;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import ru.nbch.credit_tracker.entities.request.monitoring_request.MonitoringRequest;
import ru.nbch.credit_tracker.enums.SignalError;
import ru.nbch.credit_tracker.exceptions.SignalClientException;
import ru.nbch.credit_tracker.service.xml.jaxb.IXmlProcessor;
import ru.nbch.credit_tracker.service.xml.jaxb.XmlProcessorImplAnyClasses;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.Collections;
import java.util.Optional;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
@SpringBootTest(classes = {UtilTest.TestConfig.class})
public class UtilTest {
private final IXmlProcessor xmlProcessor;
@Autowired
public UtilTest(IXmlProcessor xmlProcessor) {
this.xmlProcessor = xmlProcessor;
}
@Configuration
public static class TestConfig {
@Bean
public IXmlProcessor xmlProcessor() throws JAXBException {
return new XmlProcessorImplAnyClasses(Charset.forName("windows-1251"),
MonitoringRequest.class);
}
}
private static Stream<Arguments> entryTestCases() {
return Stream.of(
Arguments.of(
"/monitoring_request/valid_request.zip",
true
),
Arguments.of(
"/monitoring_request/directory_request.zip",
false
)
,
Arguments.of(
"/monitoring_request/empty_request.zip",
false
)
,
Arguments.of(
"/monitoring_request/many_files_request.zip",
false
)
,
Arguments.of(
"/monitoring_request/txt_request.zip",
false
)
);
}
@ParameterizedTest(name = "[{index}] PATH: [ {0} ] EXPECTED: [ {1} ]")
@MethodSource("entryTestCases")
void testExtractEntryFromZip(String path, boolean expected) {
ZipInputStream zipInputStream;
Optional<ZipEntry> xmlFileEntry;
try {
zipInputStream = new ZipInputStream(getClass().getResourceAsStream(path));
xmlFileEntry = ZipUtils.extractValidEntry(zipInputStream);
Assertions.assertEquals(expected, xmlFileEntry.isPresent());
zipInputStream.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static Stream<Arguments> validationTestCases() {
return Stream.of(
Arguments.of(
"/monitoring_request/valid_request.zip",
null,
null
),
Arguments.of(
"/monitoring_request/invalid_xml.zip",
SignalError.ERROR_011,
Collections.emptyList().toArray(new Object[0])
)
,
Arguments.of(
"/monitoring_request/no_required_tag_request.zip",
SignalError.ERROR_002,
new Object[]{"Password"}
),
Arguments.of(
"/monitoring_request/invalid_phone_request.zip",
SignalError.ERROR_003,
Collections.emptyList().toArray(new Object[0])
),
Arguments.of(
"/monitoring_request/invalid_id_request.zip",
SignalError.ERROR_010,
Collections.emptyList().toArray(new Object[0])
),
Arguments.of(
"/monitoring_request/no_unique_ids_request.zip",
SignalError.ERROR_004,
new Object[]{"abc125"}
)
);
}
@ParameterizedTest(name = "[{index}] PATH: [ {0} ] SIGNALERROR: [ {1} ] ARGS [ {2} ]")
@MethodSource("validationTestCases")
void testMonitoringRequestValidation(String path, SignalError signalError, Object[] args) {
ZipInputStream zipInputStream = null;
MonitoringRequest monitoringRequest;
try {
zipInputStream = new ZipInputStream(getClass().getResourceAsStream(path));
zipInputStream.getNextEntry();
monitoringRequest = xmlProcessor.read(zipInputStream, MonitoringRequest.class);
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
if (zipInputStream != null) {
try {
zipInputStream.close();
} catch (IOException e) {
throw new RuntimeException();
}
}
}
SignalClientException ex = null;
try {
ValidationUtil.validateMonitoringRequest(monitoringRequest);
} catch (SignalClientException e) {
ex = e;
}
if (ex != null) {
Assertions.assertEquals(signalError, ex.getErrorMessage().getSubject());
Assertions.assertArrayEquals(args, ex.getErrorMessage().getArgs());
}
}
}

Binary file not shown.

Binary file not shown.