From 363424aac6a1ab14e0d1abd672237a75f117686e Mon Sep 17 00:00:00 2001 From: Thibstars Date: Sun, 13 Aug 2023 13:52:57 +0200 Subject: [PATCH] Add BaseJavaCsvMigrationTest --- pom.xml | 10 +++ sit-csvloader-core/pom.xml | 1 - sit-csvloader-flyway/pom.xml | 12 +++ .../csv/flyway/BaseJavaCsvMigrationTest.java | 73 +++++++++++++++++++ 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 sit-csvloader-flyway/src/test/java/io/sitoolkit/csv/flyway/BaseJavaCsvMigrationTest.java diff --git a/pom.xml b/pom.xml index 42888be..525bb67 100644 --- a/pom.xml +++ b/pom.xml @@ -155,5 +155,15 @@ + + + + org.junit.jupiter + junit-jupiter-engine + 5.7.0 + test + + + diff --git a/sit-csvloader-core/pom.xml b/sit-csvloader-core/pom.xml index 2a2b379..80784ca 100644 --- a/sit-csvloader-core/pom.xml +++ b/sit-csvloader-core/pom.xml @@ -22,7 +22,6 @@ org.junit.jupiter junit-jupiter-engine - 5.7.0 test diff --git a/sit-csvloader-flyway/pom.xml b/sit-csvloader-flyway/pom.xml index 989d021..c64c952 100644 --- a/sit-csvloader-flyway/pom.xml +++ b/sit-csvloader-flyway/pom.xml @@ -15,6 +15,7 @@ 7.3.2 + 5.4.0 @@ -28,5 +29,16 @@ sit-csvloader-core ${project.version} + + org.junit.jupiter + junit-jupiter-engine + test + + + org.mockito + mockito-core + ${mockito.version} + test + diff --git a/sit-csvloader-flyway/src/test/java/io/sitoolkit/csv/flyway/BaseJavaCsvMigrationTest.java b/sit-csvloader-flyway/src/test/java/io/sitoolkit/csv/flyway/BaseJavaCsvMigrationTest.java new file mode 100644 index 0000000..bbf2b5b --- /dev/null +++ b/sit-csvloader-flyway/src/test/java/io/sitoolkit/csv/flyway/BaseJavaCsvMigrationTest.java @@ -0,0 +1,73 @@ +package io.sitoolkit.csv.flyway; + +import io.sitoolkit.csv.core.CsvLoader; +import io.sitoolkit.csv.core.LogCallback; +import io.sitoolkit.csv.core.ResourceFinder; +import io.sitoolkit.csv.core.TableDataResource; +import java.sql.Connection; +import java.util.List; +import org.flywaydb.core.api.Location; +import org.flywaydb.core.api.migration.Context; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.ArgumentMatchers; +import org.mockito.Mockito; + +class BaseJavaCsvMigrationTest { + + private static final List RES_DIR_PATHS = List.of("/classes", "/files"); + + private BaseJavaCsvMigration migration; + + @BeforeEach + void setUp() { + this.migration = new V0__1_MigrationTest(); + } + + @Test + void migrateTest() throws Exception { + try (var resourceFinderMockedStatic = Mockito.mockStatic(ResourceFinder.class)) { + + try (var csvLoaderMockedStatic = Mockito.mockStatic(CsvLoader.class)) { + Context context = Mockito.mock(Context.class, Mockito.RETURNS_DEEP_STUBS); + Connection connection = Mockito.mock(Connection.class, Mockito.RETURNS_DEEP_STUBS); + Mockito.when(context.getConnection()).thenReturn(connection); + + mockLocations(context); + + List tableDataResources = List.of(new TableDataResource()); + + resourceFinderMockedStatic.when(() -> ResourceFinder.findTableDataResources( + ArgumentMatchers.eq(V0__1_MigrationTest.class), + ArgumentMatchers.eq(RES_DIR_PATHS), + ArgumentMatchers.any(LogCallback.class)) + ).thenReturn(tableDataResources); + + migration.migrate(context); + + csvLoaderMockedStatic.verify(() -> CsvLoader.load( + ArgumentMatchers.eq(connection), + ArgumentMatchers.eq(tableDataResources), + ArgumentMatchers.any(LogCallback.class) + )); + } + } + } + + private static void mockLocations(Context context) { + Location[] locations = new Location[2]; + Location classPathLocation = Mockito.mock(Location.class); + Mockito.when(classPathLocation.isClassPath()).thenReturn(true); + Mockito.when(classPathLocation.getPath()).thenReturn(RES_DIR_PATHS.get(0).substring(1)); + locations[0] = classPathLocation; + Location fileSystemLocation = Mockito.mock(Location.class); + Mockito.when(fileSystemLocation.isClassPath()).thenReturn(false); + Mockito.when(fileSystemLocation.getPath()).thenReturn(RES_DIR_PATHS.get(1)); + locations[1] = fileSystemLocation; + Mockito.when(context.getConfiguration().getLocations()).thenReturn(locations); + } + + static class V0__1_MigrationTest extends BaseJavaCsvMigration { + + } +} \ No newline at end of file