test: add TimescaleDB test base class and Flyway migration smoke test
This commit is contained in:
@@ -0,0 +1,29 @@
|
|||||||
|
package com.cameleer3.server.app;
|
||||||
|
|
||||||
|
import org.springframework.boot.test.context.SpringBootTest;
|
||||||
|
import org.springframework.test.context.DynamicPropertyRegistry;
|
||||||
|
import org.springframework.test.context.DynamicPropertySource;
|
||||||
|
import org.testcontainers.containers.PostgreSQLContainer;
|
||||||
|
import org.testcontainers.junit.jupiter.Container;
|
||||||
|
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||||
|
|
||||||
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||||||
|
@Testcontainers
|
||||||
|
public abstract class AbstractPostgresIT {
|
||||||
|
|
||||||
|
@Container
|
||||||
|
static final PostgreSQLContainer<?> postgres =
|
||||||
|
new PostgreSQLContainer<>("timescale/timescaledb:latest-pg16")
|
||||||
|
.withDatabaseName("cameleer3")
|
||||||
|
.withUsername("cameleer")
|
||||||
|
.withPassword("test");
|
||||||
|
|
||||||
|
@DynamicPropertySource
|
||||||
|
static void configureProperties(DynamicPropertyRegistry registry) {
|
||||||
|
registry.add("spring.datasource.url", postgres::getJdbcUrl);
|
||||||
|
registry.add("spring.datasource.username", postgres::getUsername);
|
||||||
|
registry.add("spring.datasource.password", postgres::getPassword);
|
||||||
|
registry.add("spring.datasource.driver-class-name", () -> "org.postgresql.Driver");
|
||||||
|
registry.add("spring.flyway.enabled", () -> "true");
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package com.cameleer3.server.app.storage;
|
||||||
|
|
||||||
|
import com.cameleer3.server.app.AbstractPostgresIT;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.jdbc.core.JdbcTemplate;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
class FlywayMigrationIT extends AbstractPostgresIT {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
JdbcTemplate jdbcTemplate;
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void allMigrationsApplySuccessfully() {
|
||||||
|
// Verify core tables exist
|
||||||
|
Integer execCount = jdbcTemplate.queryForObject(
|
||||||
|
"SELECT COUNT(*) FROM executions", Integer.class);
|
||||||
|
assertEquals(0, execCount);
|
||||||
|
|
||||||
|
Integer procCount = jdbcTemplate.queryForObject(
|
||||||
|
"SELECT COUNT(*) FROM processor_executions", Integer.class);
|
||||||
|
assertEquals(0, procCount);
|
||||||
|
|
||||||
|
Integer userCount = jdbcTemplate.queryForObject(
|
||||||
|
"SELECT COUNT(*) FROM users", Integer.class);
|
||||||
|
assertEquals(0, userCount);
|
||||||
|
|
||||||
|
// Verify continuous aggregates exist
|
||||||
|
Integer caggCount = jdbcTemplate.queryForObject(
|
||||||
|
"SELECT COUNT(*) FROM timescaledb_information.continuous_aggregates",
|
||||||
|
Integer.class);
|
||||||
|
assertEquals(4, caggCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user