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

erro org.opentest4j.AssertionFailedError cenario1

Estou com o seguinte erro ao executar o cenario1: org.opentest4j.AssertionFailedError: expected: null but was: med.voll.api.domain.medico.Medico@4d Expected :null Actual :med.voll.api.domain.medico.Medico@4d

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

Obs: o cenario 2 onde é substituito a palavra isNull() por isEqualTo está funcionando corretamente.

9 respostas

Oi!

Manda aqui o código da sua interface MedicoRepository.

segue print MedicoRepository

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

A consulta está correta, então o problema está no teste.

Pelo cenário, deveria retornar null mesmo, pois o médico está com uma consulta na mesma data. Talvez seja problema em relação ao banco de dados, que deve estar trazendo outro registro do banco de dados. Para confirmar, coloca um system.out antes do assert para imprimir no console o nome e crm do médico que está sendo devolvido:

System.out.println("Medico: " +medicoLivre.getNome() + " - " +medicoLivre.getCrm());

Rode o teste e veja no console o que vai sair.

Segue dados da tabela e tambem print solicitado.

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

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

Está sendo retornado o próprio médico na consulta de médico aleatório livre, sendo que não deveria pois o médico deveria estar indisponível. Manda aqui o código completo dessa sua classe de testes e também da classe Consulta.

package med.voll.api.domain.consultas;

import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import med.voll.api.domain.medico.Medico;
import med.voll.api.domain.pacientes.Paciente;

import java.time.LocalDateTime;

@Table(name = "consultas")
@Entity(name = "Consulta")
@Getter
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(of="id")
public class Consulta {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "medico_id")
    private Medico medico;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "paciente_id")
    private Paciente paciente;

    private LocalDateTime data;

    @Column(name = "motivo_cancelamento")
    @Enumerated(EnumType.STRING)
    private MotivoCancelamento motivoCancelamento;

    public void cancelar(MotivoCancelamento motivo) {
        this.motivoCancelamento = motivo;
    }

}
package med.voll.api.domain.medico;

import med.voll.api.domain.consultas.Consulta;
import med.voll.api.domain.endereco.DadosEndereco;
import med.voll.api.domain.pacientes.DadosCadastroPaciente;
import med.voll.api.domain.pacientes.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 java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjusters;
import static org.assertj.core.api.Assertions.assertThat;

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

    @Autowired
    private MedicoRepository medicoRepository;
    @Autowired
    private TestEntityManager em;

    @Test
    @DisplayName("Deveria devolver null quando unico medico cadastrado nao esta disponivel da data ")
    void escolherMedicoAleatorioLivreNaDataCenario1() {

        //given ou arrange
        var proximaSegundaAs10 =  LocalDateTime.now().with(TemporalAdjusters.next(DayOfWeek.MONDAY)).withHour(10).withMinute(0);

        var medico = cadastrarMedico("Carlos da silva", "carlos@gmail.com", "858296", Especialidade.CARDIOLOGIA);
        var paciente = cadastrarPaciente("Marcos da costa", "marcos@email.com", "00000000000");
        cadastrarConsulta(medico, paciente, proximaSegundaAs10);

        //when ou act
        var medicoLivre =  medicoRepository.escolherMedicoAleatorioLivreNaData(Especialidade.CARDIOLOGIA,proximaSegundaAs10);

        //then ou assert
        System.out.println("Medico: " +medicoLivre.getNome() + " - " +medicoLivre.getCrm());
        assertThat(medicoLivre).isNull();

    }

    @Test
    @DisplayName("Deveria devolver null quando unico medico cadastrado nao esta disponivel da data ")
    void escolherMedicoAleatorioLivreNaDataCenario2() {

        //given ou arrange
        var proximaSegundaAs10 =  LocalDateTime.now().with(TemporalAdjusters.next(DayOfWeek.MONDAY)).withHour(10).withMinute(0);

        var medico = cadastrarMedico("Carlos da silva", "carlos@gmail.com", "858296", Especialidade.CARDIOLOGIA);
        var paciente = cadastrarPaciente("Marcos da costa", "marcos@email.com", "00000000000");
        cadastrarConsulta(medico, paciente, proximaSegundaAs10);

        //when ou act
        var medicoLivre =  medicoRepository.escolherMedicoAleatorioLivreNaData(Especialidade.CARDIOLOGIA,proximaSegundaAs10);

        //then ou assert
        assertThat(medicoLivre).isEqualTo(medico);

    }

    private void cadastrarConsulta(Medico medico, Paciente paciente, LocalDateTime data) {
        em.persist(new Consulta(null, medico, paciente, data,null));
    }
    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 DadosCadastrosMedico dadosMedico(String nome, String email, String crm, Especialidade especialidade) {
        return new DadosCadastrosMedico(
                nome,
                email,
                "61999999999",
                crm,
                especialidade,
                dadosEndereco()
        );
    }
    private DadosCadastroPaciente dadosPaciente(String nome, String email, String cpf) {
        return new DadosCadastroPaciente(
                nome,
                email,
                "61999999999",
                cpf,
                dadosEndereco()
        );
    }
    private DadosEndereco dadosEndereco() {
        return new DadosEndereco(
                "rua xpto",
                "bairro",
                "00000000",
                "Brasilia",
                "DF",
                null,
                null
        );
    }

}
solução!

Está faltando a anotação @ActiveProfiles("test") na classe. Verifica também se você criou o arquivo application-teste.properties no src/main/resources.

Outra coisa, no seu segundo cenário de teste essa linha deve ser removida:

cadastrarConsulta(medico, paciente, proximaSegundaAs10);

Pois um cenário vai cadastrar uma consulta prévia e o outro não.

Funcionou, muito obrigado Rodrigo.