Czy w testach powinno używać się adnotacji @Transactional
? Musiałem ją dodać w tym teście, bo inaczej w metodzie findEventToEdit
, konkretnie w linii if (!currentUser.equals(event.getOrganizer())) {
leciał LazyInitializationException
. Encje Event
i AppUser
są w relacji jednokierunkowej OneToOne
. Teraz odkąd zacząłem używać w testach 2 plików sql - pierwszy do dodawania danych testowych przed każdym testem, drugi do czyszczenia tabel po każdym teście to mam nowy problem - metoda getReferenceById
zwraca mi obiekt AppUser$HibernateProxy...
zamiast AppUser
, w którym wszystkie pola są null
. Usunięcie adnotacji @Transactional
z testu pomaga, ale wtedy leci wcześniej wspomniany wyjątek. W czym jest problem?
@Test
@Transactional
void shouldReturnEventToEdit() {
// when
var eventToEdit = organizerEventService.findEventToEdit(appUserRepository.getReferenceById(2L), 5L);
// then
assertThat(eventToEdit.getName()).isEqualTo("Java Dev Talks #5");
assertThat(eventToEdit.getEventImageData()).isNotBlank();
assertThat(eventToEdit.getEventImage()).isNull();
assertThat(eventToEdit.getEventType()).isEqualTo(MEETING);
assertThat(eventToEdit.getDateTime()).isEqualTo(TOMORROW.plusMonths(1).format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
assertThat(eventToEdit.getLanguage()).isEqualTo("polski");
assertThat(eventToEdit.getAdmission()).isEqualTo(FREE);
assertThat(eventToEdit.getCity()).isEqualTo("Rzeszów");
assertThat(eventToEdit.getLocation()).isEqualTo("WSIiZ");
assertThat(eventToEdit.getAddress()).isEqualTo("Sucharskiego 2, 35-225 Rzeszów");
assertThat(eventToEdit.getDescription()).isEqualTo("Spotkanie rzeszowskiej grupy pasjonatów języka Java.");
}
@Transactional
public EventEditDTO findEventToEdit(AppUser currentUser, Long id) {
Optional<Event> eventOpt = eventRepository.findById(id);
if (eventOpt.isPresent()) {
Event event = eventOpt.get();
if (!currentUser.equals(event.getOrganizer())) {
throw new AccessDeniedException("Access is denied");
}
return EventEditDTOMapper.mapToEventEditDTO(event);
}
throw new EventNotFoundException("Event with ID " + id + " not found");
}