test: File processing service unit tests

This commit is contained in:
Piotr Dec 2024-07-18 19:14:03 +02:00
parent 2025cca693
commit 141551c3d8
Signed by: stawros
GPG key ID: F89F27AD8F881A91
4 changed files with 70 additions and 0 deletions

View file

View file

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

View file

@ -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
1 Warszawa;2018-09-19 05:17:32.619;9.97
2 Warszawa;2018-09-20 18:44:42.468;39.02
3 Warszawa;2018-09-21 11:17:42.31833.27
4 Warszawa;2018-09-22 19:25:07.568;34.85

View file

@ -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
1 Warszawa 2018-09-19 05:17:32.619 9.97
2 Warszawa 2018-09-20 18:44:42.468 39.02
3 Warszawa 2018-09-21 11:17:42.318 33.27
4 Warszawa 2018-09-22 19:25:07.568 34.85