Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Erro: Cannot resolve constructor

Estou com esse erro, alguém pode me ajudar, por favor?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

7 respostas
package med.voll.api.domain.medico;

import med.voll.api.domain.consulta.Consulta;
import med.voll.api.domain.endereco.DadosEndereco;
import med.voll.api.domain.paciente.DadosCadastroPacientes;
import med.voll.api.domain.paciente.Paciente;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureTestDatabase;
import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
import org.springframework.boot.test.autoconfigure.orm.jpa.TestEntityManager;
import org.springframework.test.context.ActiveProfiles;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
import static org.assertj.core.api.Assertions.assertThat;

@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
class MedicoRepositoryTest {

    @Autowired
    private MedicoRepository medicoRepository;

    @Autowired
    private TestEntityManager em;

    @Test
    @DisplayName("Deveria devolver null quando único médico cadastrado não está disponível na data")
    void escolherMedicoAleatorioLivreNaDataCenario1() {
        var proximaSegundaAs10 = LocalDate.now()
                .with(TemporalAdjusters.next(DayOfWeek.MONDAY))
                .atTime(10, 0);

        var medico = cadastrarMedico("Medico", "medico@voll.med", "123456", Especialidade.CARDIOLOGIA);
        var paciente = cadastrarPaciente("Paciente", "paciente@voll.med", "00000000000");
        cadastrarConsulta(medico, paciente, proximaSegundaAs10);

        var medicoLivre = medicoRepository.escolherMedicoAleatorioLivreNaData(Especialidade.CARDIOLOGIA, proximaSegundaAs10);
        assertThat(medicoLivre).isEqualTo(medico);

    }
    private void cadastrarConsulta(Medico medico, Paciente paciente, LocalDateTime data) {
        em.persist(new Consulta(null, medico, paciente, data));
    }

    private Medico cadastrarMedico(String nome, String email, String crm, Especialidade especialidade) {
        var medico = new Medico(dadosMedico(nome, email, crm, especialidade));
        em.persist(medico);
        return medico;
    }

    private Paciente cadastrarPaciente(String nome, String email, String cpf) {
        var paciente = new Paciente(dadosPaciente(nome, email, cpf));
        em.persist(paciente);
        return paciente;
    }

    private DadosCadastroMedicos dadosMedico(String nome, String email, String crm, Especialidade especialidade) {
        return new DadosCadastroMedicos(
                nome,
                email,
                "61999999999",
                crm,
                especialidade,
                dadosEndereco()
        );
    }

    private DadosCadastroPacientes dadosPaciente(String nome, String email, String cpf) {
        return new DadosCadastroPacientes(
                nome,
                email,
                "61999999999",
                cpf,
                dadosEndereco()
        );
    }
    private DadosEndereco dadosEndereco() {
        return new DadosEndereco(
                "rua xpto",
                "bairro",
                "00000000",
                "Brasilia",
                "DF",
                null,
                null
        );
    }
}

Oi!

Se você tiver feito a funcionaldiade de cancelamento de consultas, altere essa linha para:

em.persist(new Consulta(null, medico, paciente, data, null));

Eu de fato fiz a funcionalidade de cancelamento de consultas, contudo, ao tentar colocar como null o motivo de cancelamento, eu recebo este erro:

org.opentest4j.AssertionFailedError: expected: med.voll.api.domain.medico.Medico@3e but was: null Expected :med.voll.api.domain.medico.Medico@3e Actual :null

O seu assert está incorreto no teste. Deveria ser:

assertThat(medicoLivre).isNull();

Agora foi com a correção do assert, obrigada!

Antes eu tentei rodar o teste informando o motivo do cancelamento e ele rodou, tinha deixado o código assim, pode me explicar o que poderia ter de prejuízo se deixasse dessa forma?

em.persist(new Consulta(null, medico, paciente, data, MotivoCancelamento.OUTROS));
solução!

Vai funcionar, pois o teste não está checando nada em relação ao motivo de cancelamento. Mas, teoricamente não está correto, pois ao cadastrar uma consulta o motivo de cancelamento deveria ser null, já que a consulta acabou de ser criada e ainda não foi cancelada ;)

Bons estudos!

Ahhhh agora entendi! Muito obrigada :)