Mam metodę, która tworzy taska dla użytkownika i zwraca Mono z dtosa utworzonego taska:
public Mono<TaskDTO> createTask(CreateTaskDTO dto) {
return reactiveTaskRepository
.add(new Task(dto.content(), dto.priority(), dto.status(), dto.username() ) )
.map(Task::toDTO);
}
Chciałbym otestować to tak, że po wywołaniu metody createTask używam metody readTaskById i sprawdzam czy dtosy się zgadzają. Test wygląda tak:
@Test
@WithMockUser(username = "user1")
void should_add_task() {
var sampleUser = addSampleUser().block();
taskFacade.createTask(
new CreateTaskDTO(
"Content",
TaskPriority.LOW,
TaskStatus.UNDONE,
sampleUser.username()
)
).subscribe(createdTaskDTO -> StepVerifier
.create(taskFacade.readTaskById(createdTaskDTO.id() ) )
.expectNext(createdTaskDTO)
.verifyComplete()
);
}
Problem w tym, że nawet jeśli test nie przejdzie przez ten framework do testowania Reactora (np. poda się randomowe id taska i poleci exception) to sam test spring-bootowy zawsze przechodzi. Dostaje taki błąd (oczekiwany z resztą):
reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.AssertionError: expectation "expectNext(TaskDTO[id=2cd98d15-943a-4e50-99ac-12bb5242830c, content=Content, priority=LOW, status=UNDONE, creationDate=2022-08-13T0902.817465400Z])" failed (expected: onNext(TaskDTO[id=2cd98d15-943a-4e50-99ac-12bb5242830c, content=Content, priority=LOW, status=UNDONE, creationDate=2022-08-13T0902.817465400Z]); actual: onError(com.example.taskmanager.task.domain.exception.TaskNotFoundException: Task not found: bc8e4c9c-bbea-4c20-95af-39fd75366645))
Caused by: java.lang.AssertionError: expectation "expectNext(TaskDTO[id=2cd98d15-943a-4e50-99ac-12bb5242830c, content=Content, priority=LOW, status=UNDONE, creationDate=2022-08-13T0902.817465400Z])" failed (expected: onNext(TaskDTO[id=2cd98d15-943a-4e50-99ac-12bb5242830c, content=Content, priority=LOW, status=UNDONE, creationDate=2022-08-13T0902.817465400Z]); actual: onError(com.example.taskmanager.task.domain.exception.TaskNotFoundException: Task not found: bc8e4c9c-bbea-4c20-95af-39fd75366645))
A test jest na zielono.