Skip to content
Snippets Groups Projects
Commit 2da5ddbb authored by Robert Goldmann's avatar Robert Goldmann
Browse files

#663 - migrator: added config for integration tests

parent 4be20a4b
Branches
Tags
No related merge requests found
...@@ -5,6 +5,7 @@ certs/ ...@@ -5,6 +5,7 @@ certs/
*.p12 *.p12
*.db *.db
!BudgetMasterDatabaseMigrator/src/test/resources/*.mv.db
*.iml *.iml
*/build/[0-9]*.[0-9]*.[0-9]* */build/[0-9]*.[0-9]*.[0-9]*
......
...@@ -25,6 +25,12 @@ ...@@ -25,6 +25,12 @@
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.batch</groupId>
<artifactId>spring-batch-test</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>com.h2database</groupId> <groupId>com.h2database</groupId>
<artifactId>h2</artifactId> <artifactId>h2</artifactId>
......
package de.deadlocker8.budgetmaster.databasemigrator;
import org.junit.jupiter.api.Test;
import org.springframework.batch.core.ExitStatus;
import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.StepExecution;
import java.util.ArrayList;
import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
class MigrateDefaultDatabaseTest extends MigratorTestBase
{
@Test
void test_jobMigrate() throws Exception
{
final JobExecution jobExecution = jobLauncherTestUtils.launchJob(DEFAULT_JOB_PARAMETERS);
assertThat(jobExecution.getExitStatus()).isEqualTo(ExitStatus.COMPLETED);
}
@Test
void test_stepMigrateImages_noImages()
{
final JobExecution jobExecution = jobLauncherTestUtils.launchStep("Migrate images", DEFAULT_JOB_PARAMETERS);
final List<StepExecution> stepExecutions = new ArrayList<>(jobExecution.getStepExecutions());
assertThat(jobExecution.getExitStatus()).isEqualTo(ExitStatus.COMPLETED);
assertThat(stepExecutions).hasSize(1);
final StepExecution stepExecution = stepExecutions.get(0);
assertThat(stepExecution.getReadCount()).isZero();
assertThat(stepExecution.getCommitCount()).isOne();
}
}
\ No newline at end of file
package de.deadlocker8.budgetmaster.databasemigrator;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.test.JobLauncherTestUtils;
import org.springframework.batch.test.JobRepositoryTestUtils;
import org.springframework.batch.test.context.SpringBatchTest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.testcontainers.containers.PostgreSQLContainer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import javax.sql.DataSource;
import java.io.IOException;
@SpringBatchTest
@SpringBootTest
@ExtendWith(SpringExtension.class)
@Testcontainers
@Import(MigratorTestBase.TestDatabaseConfiguration.class)
@ActiveProfiles("test")
@EnableAutoConfiguration
@ContextConfiguration(classes = {BatchConfiguration.class})
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS)
public abstract class MigratorTestBase
{
protected static final JobParameters DEFAULT_JOB_PARAMETERS = new JobParametersBuilder().toJobParameters();
@Autowired
protected JobLauncherTestUtils jobLauncherTestUtils;
@Autowired
protected JobRepositoryTestUtils jobRepositoryTestUtils;
@AfterEach
public void afterEach()
{
jobRepositoryTestUtils.removeJobExecutions();
}
@Container
static PostgreSQLContainer<?> postgresDB = new PostgreSQLContainer<>("postgres:14.2")
.withDatabaseName("budgetmaster-tests-db")
.withUsername("budgetmaster")
.withPassword("BudgetMaster");
@TestConfiguration
static class TestDatabaseConfiguration
{
@Value("classpath:default_database_after_first_start.mv.db")
private Resource databaseResource;
@Bean
@Primary
public DataSource dataSource() throws IOException
{
final String folderName = databaseResource.getFile().getAbsolutePath().replace(".mv.db", "");
String jdbcString = "jdbc:h2:/" + folderName + ";DB_CLOSE_ON_EXIT=TRUE";
return DataSourceBuilder.create().username("sa").password("").url(jdbcString).driverClassName("org.h2.Driver").build();
}
}
@DynamicPropertySource
static void properties(DynamicPropertyRegistry registry)
{
registry.add("spring.seconddatasource.url", postgresDB::getJdbcUrl);
registry.add("spring.seconddatasource.username", postgresDB::getUsername);
registry.add("spring.seconddatasource.password", postgresDB::getPassword);
}
}
File added
...@@ -34,14 +34,12 @@ ...@@ -34,14 +34,12 @@
<mousetrap.version>1.6.5</mousetrap.version> <mousetrap.version>1.6.5</mousetrap.version>
<codemirror.version>5.62.2</codemirror.version> <codemirror.version>5.62.2</codemirror.version>
<selenium.version>4.1.2</selenium.version> <selenium.version>4.1.2</selenium.version>
<assertj-core.version>3.22.0</assertj-core.version>
<jgit.version>6.0.0.202111291000-r</jgit.version> <jgit.version>6.0.0.202111291000-r</jgit.version>
<natorder.version>1.1.2</natorder.version> <natorder.version>1.1.2</natorder.version>
<itextpdf.version>5.5.13.2</itextpdf.version> <itextpdf.version>5.5.13.2</itextpdf.version>
<vanilla-picker.version>2.12.1</vanilla-picker.version> <vanilla-picker.version>2.12.1</vanilla-picker.version>
<jacoco-maven-plugin.version>0.8.7</jacoco-maven-plugin.version> <jacoco-maven-plugin.version>0.8.7</jacoco-maven-plugin.version>
<dependency-check-maven.version>6.5.3</dependency-check-maven.version> <dependency-check-maven.version>6.5.3</dependency-check-maven.version>
<testcontainer.version>1.16.3</testcontainer.version>
<project.outputDirectory>build/${project.version}</project.outputDirectory> <project.outputDirectory>build/${project.version}</project.outputDirectory>
<project.artifactName>${project.artifactId}-v${project.version}</project.artifactName> <project.artifactName>${project.artifactId}-v${project.version}</project.artifactName>
...@@ -63,12 +61,6 @@ ...@@ -63,12 +61,6 @@
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId> <artifactId>spring-boot-starter-data-jpa</artifactId>
...@@ -197,31 +189,11 @@ ...@@ -197,31 +189,11 @@
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj-core.version}</version>
<scope>test</scope>
</dependency>
<dependency> <dependency>
<groupId>org.mockito</groupId> <groupId>org.mockito</groupId>
<artifactId>mockito-inline</artifactId> <artifactId>mockito-inline</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${testcontainer.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>${testcontainer.version}</version>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
...@@ -54,8 +54,40 @@ ...@@ -54,8 +54,40 @@
<maven.build.timestamp.format>dd.MM.yy</maven.build.timestamp.format> <maven.build.timestamp.format>dd.MM.yy</maven.build.timestamp.format>
<app.versionCode>38</app.versionCode> <app.versionCode>38</app.versionCode>
<app.author>Robert Goldmann</app.author> <app.author>Robert Goldmann</app.author>
<testcontainer.version>1.16.3</testcontainer.version>
<assertj-core.version>3.22.0</assertj-core.version>
</properties> </properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>${assertj-core.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<version>${testcontainer.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>${testcontainer.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<distributionManagement> <distributionManagement>
<repository> <repository>
<id>release</id> <id>release</id>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment