1
resposta

[Sugestão] Validação da classe ValidacaoTutorComAdocaoEmAndamento antes da otimização do código

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.

1 resposta

Olá, Jonas!

Fico feliz em ver que você está se dedicando aos testes e compartilhando suas soluções. Isso é muito valioso para a comunidade!

Analisando o seu código, vejo que você seguiu a mesma estrutura que foi apresentada no curso, isso é ótimo! Seus testes parecem estar bem estruturados e cobrindo os cenários necessários.

Portanto, sua abordagem atual funciona e está correta do ponto de vista da lógica de programação. Parabéns pelo seu trabalho e obrigada por compartilhar sua solução!

Bons estudos!

Sucesso

Um grande abraço e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!