Configurei o teste conforme a aula, chequei a query no repository, mas mesmo assim meu teste falha, cheguei a ver uma dúvida no forum que deu algo semelhante, vi que o instrutor pediu para colocar a data até os nano segundos e funcionou no caso do outro aluno, mas ainda sim o meu falha:
Atualização: Acabei de fazer o teste funcionar, quando eu tentei cadastrar um médico no teste com crm 123456 estava dando um erro, pois já existia um médico cadastrado no banco de dados com esse crm, observando isso tentei mudar a especialidade do médico, e mudando para ORTOPEDIA o teste funcionou. Ainda não entendi muito bem o que ta errado, mas já tenho um norte. (obs: criei o database vollmed_api_test)
Código:
package voll.med.api.domain.medico;
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 voll.med.api.domain.consulta.Consulta; import voll.med.api.domain.endereco.DadosEndereco; import voll.med.api.domain.paciente.DadosCadastroPaciente; import voll.med.api.domain.paciente.Paciente;
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 unico medico cadastrado nao esta disponivel na data")
void escolherMedicoAleatorioLivreNaDataCenario1() {
var proximaSegundaAs10 = LocalDate.now()
.with(TemporalAdjusters.next(DayOfWeek.MONDAY))
.atTime(10, 0, 0, 0);
var medico = cadastrarMedico("Medico", "medico@voll.med", "123666", Especialidade.CARDIOLOGIA);
var paciente = cadastrarPaciente("Paciente", "paciente@email.com", "00000000000");
cadastrarConsulta(medico, paciente, proximaSegundaAs10);
var medicoLivre = medicoRepository.escolherMedicoAleatorioLivreNaData(Especialidade.CARDIOLOGIA, proximaSegundaAs10);
assertThat(medicoLivre).isNull();
}
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 DadosCadastroMedico dadosMedico(String nome, String email, String crm, Especialidade especialidade) {
return new DadosCadastroMedico(
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
);
}
}