From 141551c3d8d186554ac96475939ab78360a593e3 Mon Sep 17 00:00:00 2001 From: Piotr Dec Date: Thu, 18 Jul 2024 19:14:03 +0200 Subject: [PATCH] test: File processing service unit tests --- src/test/java/.gitkeep | 0 .../impl/files/FileLoadingServiceTest.java | 62 +++++++++++++++++++ src/test/resources/malformed.csv | 4 ++ src/test/resources/success.csv | 4 ++ 4 files changed, 70 insertions(+) delete mode 100644 src/test/java/.gitkeep create mode 100644 src/test/java/eu/ztsh/lfr/core/impl/files/FileLoadingServiceTest.java create mode 100644 src/test/resources/malformed.csv create mode 100644 src/test/resources/success.csv diff --git a/src/test/java/.gitkeep b/src/test/java/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/java/eu/ztsh/lfr/core/impl/files/FileLoadingServiceTest.java b/src/test/java/eu/ztsh/lfr/core/impl/files/FileLoadingServiceTest.java new file mode 100644 index 0000000..d747f36 --- /dev/null +++ b/src/test/java/eu/ztsh/lfr/core/impl/files/FileLoadingServiceTest.java @@ -0,0 +1,62 @@ +package eu.ztsh.lfr.core.impl.files; + +import eu.ztsh.lfr.config.DataProperties; +import eu.ztsh.lfr.model.FileProcessingException; +import eu.ztsh.lfr.model.events.FileProcessedEvent; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; +import org.springframework.context.ApplicationEventPublisher; + +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatNoException; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class FileLoadingServiceTest { + + private final ApplicationEventPublisher eventPublisher = Mockito.mock(ApplicationEventPublisher.class); + + @Test + void successfulRunTest() { + var captor = ArgumentCaptor.forClass(FileProcessedEvent.class); + var service = createFileLoadingService("success.csv"); + assertThatNoException().isThrownBy(service::onFileModified); + Mockito.verify(eventPublisher, Mockito.times(1)) + .publishEvent(captor.capture()); + var averages = captor.getValue().averages(); + assertThat(averages).hasSize(1); + var list = averages.get("Warszawa"); + assertThat(list).hasSize(1); + assertThat(list.getFirst()).satisfies(item -> { + assertThat(item.getYear()).isEqualTo("2018"); + // 29.2775, but it is BigDecimal with scale 2 and round half up + assertThat(item.getAverageTemperature().doubleValue()).isEqualTo(29.28); + }); + } + + @Test + void notExistingFileTest() { + var service = createFileLoadingService("not-existing.csv"); + assertThatThrownBy(service::onFileModified) + .isInstanceOf(FileProcessingException.class) + .hasRootCauseInstanceOf(IOException.class); + Mockito.verifyNoInteractions(eventPublisher); + } + + @Test + void malformedFileTest() { + var service = createFileLoadingService("malformed.csv"); + assertThatThrownBy(service::onFileModified) + .isInstanceOf(FileProcessingException.class) + .hasMessage("Error in line Warszawa;2018-09-21 11:17:42.31833.27") + .hasRootCauseInstanceOf(ArrayIndexOutOfBoundsException.class); + Mockito.verifyNoInteractions(eventPublisher); + } + + private FileLoadingService createFileLoadingService(String path) { + return new FileLoadingService(new DataProperties("src/test/resources/" + path), eventPublisher); + } + +} diff --git a/src/test/resources/malformed.csv b/src/test/resources/malformed.csv new file mode 100644 index 0000000..b634989 --- /dev/null +++ b/src/test/resources/malformed.csv @@ -0,0 +1,4 @@ +Warszawa;2018-09-19 05:17:32.619;9.97 +Warszawa;2018-09-20 18:44:42.468;39.02 +Warszawa;2018-09-21 11:17:42.31833.27 +Warszawa;2018-09-22 19:25:07.568;34.85 diff --git a/src/test/resources/success.csv b/src/test/resources/success.csv new file mode 100644 index 0000000..7a4d8c5 --- /dev/null +++ b/src/test/resources/success.csv @@ -0,0 +1,4 @@ +Warszawa;2018-09-19 05:17:32.619;9.97 +Warszawa;2018-09-20 18:44:42.468;39.02 +Warszawa;2018-09-21 11:17:42.318;33.27 +Warszawa;2018-09-22 19:25:07.568;34.85