test: NbpServiceTest completed?

This commit is contained in:
Piotr Dec 2024-05-23 22:38:20 +02:00
parent b2cbfad2ac
commit b38a507ce9
Signed by: stawros
GPG key ID: F89F27AD8F881A91
4 changed files with 59 additions and 15 deletions

View file

@ -1,26 +1,36 @@
package eu.ztsh.wymiana.service;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import eu.ztsh.wymiana.EntityCreator;
import eu.ztsh.wymiana.WireMockExtension;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.mockito.Mockito;
import org.springframework.web.client.RestClient;
import java.time.Clock;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import static org.assertj.core.api.Assertions.assertThat;
@ExtendWith(WireMockExtension.class)
class NbpServiceTest {
private static final ZoneId zone = ZoneId.of("Europe/Warsaw");
private static final LocalDate today = LocalDate.of(2024, Month.MAY, 12); // Sunday
private static Clock clock;
private final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private final RestClient restClient = RestClient.builder().baseUrl(WireMockExtension.baseUrl).build();
private NbpService nbpService;
@BeforeAll
@ -31,11 +41,11 @@ class NbpServiceTest {
@BeforeEach
void prepareTest() {
nbpService = new NbpService(clock);
nbpService = new NbpService(clock, restClient);
}
@ParameterizedTest
@EnumSource(value = DayOfWeek.class, names = {"SATURDAY","SUNDAY"}, mode = EnumSource.Mode.EXCLUDE)
@EnumSource(value = DayOfWeek.class, names = {"SATURDAY", "SUNDAY"}, mode = EnumSource.Mode.EXCLUDE)
void getFetchDateOnWorkingDayTest(DayOfWeek dayOfWeek) {
updateClock(dayOfWeek);
assertThat(nbpService.getFetchDate()).isEqualTo(
@ -51,32 +61,44 @@ class NbpServiceTest {
}
@ParameterizedTest
@EnumSource(value = DayOfWeek.class, names = {"SATURDAY","SUNDAY"})
@EnumSource(value = DayOfWeek.class, names = {"SATURDAY", "SUNDAY"})
void getFetchDateOnWeekendTest(DayOfWeek dayOfWeek) {
updateClock(dayOfWeek);
assertThat(nbpService.getFetchDate()).isEqualTo(LocalDate.of(2024, Month.MAY, 10));
}
@Test
void getWithoutCacheTest() {
throw new UnsupportedOperationException("Not implemented yet");
void getWithoutCacheTest() throws JsonProcessingException {
var date = dtf.format(updateClock(DayOfWeek.FRIDAY));
var url = "/api/exchangerates/rates/c/usd/%s/".formatted(date);
WireMockExtension.response(url, 200, new ObjectMapper().writeValueAsString(EntityCreator.rates(date)));
nbpService.fetchData(EntityCreator.Constants.USD_SYMBOL, date);
WireMockExtension.verifyGet(1, url);
}
@Test
void getWithCacheTest() {
throw new UnsupportedOperationException("Not implemented yet");
void getWithCacheTest() throws JsonProcessingException {
var date = dtf.format(updateClock(DayOfWeek.FRIDAY));
var url = "/api/exchangerates/rates/c/usd/%s/".formatted(date);
WireMockExtension.response(url, 200, new ObjectMapper().writeValueAsString(EntityCreator.rates(date)));
nbpService.fetchData(EntityCreator.Constants.USD_SYMBOL, date);
nbpService.fetchData(EntityCreator.Constants.USD_SYMBOL, date);
WireMockExtension.verifyGet(1, url);
}
@Test
void getInvalidCurrencyTest() {
throw new UnsupportedOperationException("Not implemented yet");
var date = dtf.format(updateClock(DayOfWeek.FRIDAY));
var url = "/api/exchangerates/rates/c/usb/%s/".formatted(date);
WireMockExtension.response(url, 404, "404 NotFound - Not Found - Brak danych");
nbpService.fetchData("usb", date);
WireMockExtension.verifyGet(1, url);
}
private void updateClock(DayOfWeek dayOfWeek) {
Mockito.when(clock.instant()).thenReturn(
today.with(TemporalAdjusters.previousOrSame(dayOfWeek))
.atStartOfDay(zone)
.toInstant());
private LocalDate updateClock(DayOfWeek dayOfWeek) {
var date = today.with(TemporalAdjusters.previousOrSame(dayOfWeek));
Mockito.when(clock.instant()).thenReturn(date.atStartOfDay(zone).toInstant());
return LocalDate.from(date);
}
}