Class IntegracaoComPostgres

java.lang.Object
br.com.xadm.comum.teste.IntegracaoComPostgres
All Implemented Interfaces:
PostgresTestPropertyProvider, io.micronaut.test.support.TestPropertyProvider, Supplier<Map<String,String>>

@IntegracaoDocker @TestInstance(PER_CLASS) public abstract class IntegracaoComPostgres extends Object implements PostgresTestPropertyProvider
Base dos testes @MicronautTest com o Postgres de teste da casa: o singleton do PostgresTestResource, injetado pelo PostgresTestPropertyProvider, com as tabelas do app zeradas antes de cada teste.

O banco sobrevive entre classes de teste, então o teste não conta com o que outra classe, ou um teste anterior, gravou. O @BeforeEach da subclasse roda depois desta limpeza e semeia sobre banco vazio. O histórico do Flyway fica fora da limpeza (PostgresTestResource.limparTabelas()).

Tabela semeada por migration (configuração, domínio fixo) também é zerada, e o Flyway não regrava o seed: app com seed não usa esta base e escreve a própria limpeza, só das tabelas que os testes gravam.

@MicronautTest
class PedidoRepositoryTest extends IntegracaoComPostgres {

    @Inject
    PedidoRepository repositorio;
}

O @TestInstance(Lifecycle.PER_CLASS) que o PostgresTestPropertyProvider exige vem herdado desta base.

A base traz a IntegracaoDocker: a subclasse herda a tag docker e a DockerDisponivelCondition sem repetir anotação nenhuma, então, sem Docker, ela pula com o motivo em ERROR no lugar de falhar. A rodada que pula não prova a integração; o gate da CI roda com Docker.

  • Constructor Details

    • IntegracaoComPostgres

      protected IntegracaoComPostgres()
      Construtor das subclasses de teste.
  • Method Details

    • limparTabelas

      @BeforeEach protected void limparTabelas() throws SQLException
      Zera as tabelas do app antes de cada teste.
      Throws:
      SQLException - se a limpeza falha no banco