Napisałem test integracyjny, który sprawdza czy jeśli do seansu zostało mniej niż 24 godziny, to przy próbie anulowania rezerwacji miejsca poleci wyjątek, że jest za późno na to. Problem w tym, że wydaje mi się, że test wygląda zbyt skomplikowanie i jest mało czytelny. Wszystko przez problem z czasem. Najpierw muszę dodać seans, do którego zostało mniej niż 24 godziny i rezerwacje na niego, którą w teście będę próbował anulować, ale żeby to zrobić muszę się nakombinować z przekazywaniem Clocka.
@Test
void should_canceling_booking_be_impossible_when_less_than_24h_to_screening() throws Exception {
//given
var currentDate = getCurrentDate(clock);
var hoursUntilBooking = 23;
var sampleScreeningDate = currentDate.minusHours(hoursUntilBooking);
var sampleScreening = addSampleScreening(filmFacade, screeningFacade, sampleScreeningDate);
var sampleSeat = sampleScreening.seats().get(0);
var timeDuringBooking = Clock.fixed(
sampleScreeningDate.minusHours(hoursUntilBooking + 1).toInstant(ZoneOffset.UTC),
ZoneOffset.UTC
);
var sampleSeatBooking = screeningFacade.bookSeat(
sampleBookSeatDTO(
sampleScreening.id(),
sampleSeat.id()
),
timeDuringBooking
);
//when
var result = mockMvc.perform(
patch("/seats-bookings/" + sampleSeatBooking.id() + "/cancel")
);
//then
result
.andExpect(status().isBadRequest())
.andExpect(content().string(
"Too late for seat booking cancelling: " + sampleSeat.id()
));
}
Czy da się napisać ten test lepiej i bardziej czytelniej?