Na resolução da primeira parte do desafio de implementação dos testes nos é apresentado uma versão diferente da classe ValidacaoTutorComAdocaoEmAndamento, sendo a que está presente no projeto antes da finalização do curso desta maneira:
@Component
public class ValidacaoTutorComAdocaoEmAndamento implements ValidacaoSolicitacaoAdocao {
@Autowired
private AdocaoRepository adocaoRepository;
@Autowired
private TutorRepository tutorRepository;
public void validar(SolicitacaoAdocaoDto dto) {
List<Adocao> adocoes = adocaoRepository.findAll();
Tutor tutor = tutorRepository.getReferenceById(dto.idTutor());
for (Adocao a : adocoes) {
if (a.getTutor() == tutor && a.getStatus() == StatusAdocao.AGUARDANDO_AVALIACAO) {
throw new ValidacaoException("Tutor já possui outra adoção aguardando avaliação!");
}
}
}
}
Seguindo o código presente no projeto consegui desenvolver os seguintes testes acerca de um tutor sem adoção em andamento e com:
@ExtendWith(MockitoExtension.class)
class ValidacaoTutorComAdocaoEmAndamentoTest {
@InjectMocks
private ValidacaoTutorComAdocaoEmAndamento validacaoTutorComAdocaoEmAndamento;
@Mock
private AdocaoRepository adocaoRepository;
@Mock
private TutorRepository tutorRepository;
@Mock
private SolicitacaoAdocaoDto dto;
@Mock
private Tutor tutor;
@Mock
private Pet pet;
@Spy
private List<Adocao> listaDeAdocoes = new ArrayList<>();
@Spy
private Adocao adocao;
@Test
void deveriaPermitirAdocaoParaTutorSemAdocaoEmAndamento() {
adocao = new Adocao(tutor, pet, "Motivo qualquer");
adocao.marcarComoAprovada();
listaDeAdocoes.add(adocao);
BDDMockito.given(tutorRepository.getReferenceById(dto.idTutor())).willReturn(tutor);
BDDMockito.given(adocaoRepository.findAll()).willReturn(listaDeAdocoes);
Assertions.assertDoesNotThrow(() -> validacaoTutorComAdocaoEmAndamento.validar(dto));
}
@Test
void deveriaNaoPermitirAdocaoParaTutorComAdocaoEmAndamento() {
adocao = new Adocao(tutor, pet, "Motivo qualquer");
listaDeAdocoes.add(adocao);
BDDMockito.given(tutorRepository.getReferenceById(dto.idTutor())).willReturn(tutor);
BDDMockito.given(adocaoRepository.findAll()).willReturn(listaDeAdocoes);
Assertions.assertThrows(ValidacaoException.class, () -> validacaoTutorComAdocaoEmAndamento.validar(dto));
}
}
Gostaria apenas de um feedback sobre o código desenvolvido e também compartilhar uma possível solução para aqueles que se depararam com dificuldades na implementação.