1
resposta

vollmed_api_test.pacientes' doesn't exist

OLa professor, poderia me ajudar?

Criei o properties de teste junto com a databse vollmed_api_test, porem ao executar o primeiro teste tomo o erro abaixo:

org.hibernate.exception.SQLGrammarException: could not execute statement [Table 'vollmed_api_test.pacientes' doesn't exist] [insert into pacientes (cpf,email,bairro,cep,cidade,complemento,logradouro,numero,uf,nome,status,telefone) values (?,?,?,?,?,?,?,?,?,?,?,?)]

Segue a minha classe MedicoRepositoryTest


@DataJpaTest // esta anotação é utilizada para testar uma interface repository
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE) //não substitua as configurações do meu banco de dados para a usar do banco em memória
@ActiveProfiles("test") //o spring entende que é para ler o application-test.properties
class MedicoRepositoryTest {

    @Autowired
    private MedicoRepository medicoRepository;
    @Autowired
    private TestEntityManager testEntityManager;

    @Test
    @DisplayName("Deve devolver null quando unico medico cadastrado não está disponível na data")
    void escolherMedicoDisponivelNaData1() {
        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@email.com", "00000000000");
        cadastrarConsulta(medico, paciente, proximaSegundaAs10);
        var medicoLivre = medicoRepository.escolherMedicoDisponivelNaData(Especialidade.CARDIOLOGIA, proximaSegundaAs10);
        Assertions.assertThat(medicoLivre).isNull();
    }

    @Test
    @DisplayName("Deveria devolver medico quando ele estiver disponivel na data")
    void escolherMedicoAleatorioLivreNaDataCenario2() {
        var proximaSegundaAs10 = LocalDate.now()
                .with(TemporalAdjusters.next(DayOfWeek.MONDAY))
                .atTime(10, 0);
        var medico = cadastrarMedico("Medico", "medico@voll.med", "123456", Especialidade.CARDIOLOGIA);

        var medicoLivre = medicoRepository.escolherMedicoDisponivelNaData(Especialidade.CARDIOLOGIA, proximaSegundaAs10);
        Assertions.assertThat(medicoLivre).isEqualTo(medico);
    }

    private void cadastrarConsulta(Medico medico, Paciente paciente, LocalDateTime data) {
        testEntityManager.persist(new AgendamentoConsulta(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));
        testEntityManager.persist(medico);
        return medico;
    }

    private Paciente cadastrarPaciente(String nome, String email, String cpf) {
        var paciente = new Paciente(dadosPaciente(nome, email, cpf));
        testEntityManager.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
        );
    }
}

e abaixo o properties

spring.datasource.url=jdbc:mysql://localhost/vollmed_api_test
1 resposta

Olá Israel, tudo certo?

O erro que você está recebendo indica que a tabela pacientes não existe no banco de dados de teste vollmed_api_test. Aqui estão algumas sugestões para resolver esse problema:

  1. Verifique as Migrations: Certifique-se de que todas as migrations necessárias para criar as tabelas estão sendo executadas no banco de dados de teste. Se você estiver usando o Flyway ou o Liquibase, verifique se as migrations estão configuradas corretamente no application-test.properties.

  2. Configuração do Banco de Dados de Teste: Confirme se o banco de dados vollmed_api_test está criado e acessível. Você pode fazer isso conectando-se ao banco de dados diretamente usando um cliente MySQL e verificando se a tabela pacientes existe.

  3. Scripts de Inicialização: Caso as migrations não estejam sendo executadas automaticamente, você pode precisar rodá-las manualmente ou configurar scripts de inicialização que criem as tabelas necessárias para os testes.

  4. Verifique o application-test.properties: Certifique-se de que o arquivo application-test.properties está corretamente configurado para apontar para o banco de dados de teste e que as configurações

Espero que essas dicas ajudem a resolver o problema!

Bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!