Segue cód
MedicoRepository
package med.vol.api.domain.medico;
import med.vol.api.domain.consultas.Consulta;
import med.vol.api.domain.endereco.DadosCadastroEndereco;
import med.vol.api.domain.paciente.DadosCadastroPaciente;
import med.vol.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.LocalDateTime;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
class MedicoRepositoryTest {
@Autowired
private MedicoRepository medicoRepository;
@Autowired
private TestEntityManager em;
@Test
@DisplayName("Devolver NULL quando unico médico cadastrado não está disponivel na data")
void getMedicoRandomFreeOnDateCenario1() {
//given ou arrange
var proximaSegundaAs10 = LocalDateTime.now()
.with(TemporalAdjusters.next(DayOfWeek.MONDAY))
.withHour(10).withMinute(0);
//when ou act
var medico = cadastrarMedico("Medico","medico@voll.med","111111",Especialidade.CARDIOLOGIA);
var paciente = cadastrarPaciente("Paciente","paciente@voll.med","11122233345");
cadastrarConsulta(medico,paciente, proximaSegundaAs10);
var medicoLivre =medicoRepository.getMedicoRandomFreeOnDate(Especialidade.CARDIOLOGIA, proximaSegundaAs10);
//then ou assert
assertThat(medicoLivre).isNull();
}
@Test
@DisplayName("Deveria devovler medico quando ele estiver disponivel na data")
void getMedicoRandomFreeOnDateCenario2() {
//given ou arrange
var proximaSegundaAs10 = LocalDateTime.now()
.with(TemporalAdjusters.next(DayOfWeek.MONDAY))
.withHour(10).withMinute(0);
var medico = cadastrarMedico("Medico","medico@voll.med","111111",Especialidade.CARDIOLOGIA);
//when ou act
var medicoLivre =medicoRepository.getMedicoRandomFreeOnDate(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 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 DadosCadastroEndereco dadosEndereco() {
return new DadosCadastroEndereco(
"rua xpto",
"bairro",
"00000000",
"Brasilia",
"test",
"1",
"2"
);
}
}