diff --git a/src/test/java/ru/nbch/credit_tracker/utils/UtilTest.java b/src/test/java/ru/nbch/credit_tracker/utils/UtilTest.java new file mode 100644 index 0000000..c7dc696 --- /dev/null +++ b/src/test/java/ru/nbch/credit_tracker/utils/UtilTest.java @@ -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 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 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 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()); + } + } +} diff --git a/src/test/resources/monitoring_request/directory_request.zip b/src/test/resources/monitoring_request/directory_request.zip new file mode 100644 index 0000000..7ad23ba Binary files /dev/null and b/src/test/resources/monitoring_request/directory_request.zip differ diff --git a/src/test/resources/monitoring_request/empty_request.zip b/src/test/resources/monitoring_request/empty_request.zip new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/monitoring_request/invalid_id_request.zip b/src/test/resources/monitoring_request/invalid_id_request.zip new file mode 100644 index 0000000..0de7ae4 Binary files /dev/null and b/src/test/resources/monitoring_request/invalid_id_request.zip differ diff --git a/src/test/resources/monitoring_request/invalid_phone_request.zip b/src/test/resources/monitoring_request/invalid_phone_request.zip new file mode 100644 index 0000000..f323048 Binary files /dev/null and b/src/test/resources/monitoring_request/invalid_phone_request.zip differ diff --git a/src/test/resources/monitoring_request/invalid_xml.zip b/src/test/resources/monitoring_request/invalid_xml.zip new file mode 100644 index 0000000..25fc176 Binary files /dev/null and b/src/test/resources/monitoring_request/invalid_xml.zip differ diff --git a/src/test/resources/monitoring_request/many_files_request.zip b/src/test/resources/monitoring_request/many_files_request.zip new file mode 100644 index 0000000..b5b6002 Binary files /dev/null and b/src/test/resources/monitoring_request/many_files_request.zip differ diff --git a/src/test/resources/monitoring_request/no_required_tag_request.zip b/src/test/resources/monitoring_request/no_required_tag_request.zip new file mode 100644 index 0000000..cd26a33 Binary files /dev/null and b/src/test/resources/monitoring_request/no_required_tag_request.zip differ diff --git a/src/test/resources/monitoring_request/no_unique_ids_request.zip b/src/test/resources/monitoring_request/no_unique_ids_request.zip new file mode 100644 index 0000000..ee92049 Binary files /dev/null and b/src/test/resources/monitoring_request/no_unique_ids_request.zip differ diff --git a/src/test/resources/monitoring_request/txt_request.zip b/src/test/resources/monitoring_request/txt_request.zip new file mode 100644 index 0000000..b635e01 Binary files /dev/null and b/src/test/resources/monitoring_request/txt_request.zip differ diff --git a/src/test/resources/monitoring_request/valid_request.zip b/src/test/resources/monitoring_request/valid_request.zip new file mode 100644 index 0000000..e1ac937 Binary files /dev/null and b/src/test/resources/monitoring_request/valid_request.zip differ