diff --git a/src/main/java/io/github/gitbucket/solidbase/manager/JDBCVersionManager.java b/src/main/java/io/github/gitbucket/solidbase/manager/JDBCVersionManager.java index f8737ba..da4c20d 100644 --- a/src/main/java/io/github/gitbucket/solidbase/manager/JDBCVersionManager.java +++ b/src/main/java/io/github/gitbucket/solidbase/manager/JDBCVersionManager.java @@ -5,6 +5,7 @@ import java.sql.Connection; import java.sql.ResultSet; +import java.util.Optional; /** * Created by takezoe on 15/11/23. @@ -37,6 +38,15 @@ public String getCurrentVersion(String moduleId) throws Exception { return selectStringFromDatabase(conn, "SELECT VERSION FROM VERSIONS WHERE MODULE_ID = ?", moduleId); } + @Override + public Optional findCurrentVersion(String moduleId) throws Exception { + if (!checkTableExist()) { + return Optional.empty(); + } else { + return Optional.ofNullable(getCurrentVersion(moduleId)); + } + } + protected boolean checkTableExist(){ try { ResultSet rs = conn.getMetaData().getTables(null, null, "%", new String[]{ "TABLE" }); diff --git a/src/main/java/io/github/gitbucket/solidbase/manager/VersionManager.java b/src/main/java/io/github/gitbucket/solidbase/manager/VersionManager.java index 5d26f39..97cf193 100644 --- a/src/main/java/io/github/gitbucket/solidbase/manager/VersionManager.java +++ b/src/main/java/io/github/gitbucket/solidbase/manager/VersionManager.java @@ -1,5 +1,7 @@ package io.github.gitbucket.solidbase.manager; +import java.util.Optional; + public interface VersionManager { void initialize() throws Exception; @@ -8,4 +10,6 @@ public interface VersionManager { String getCurrentVersion(String moduleId) throws Exception; + Optional findCurrentVersion(String moduleId) throws Exception; + } diff --git a/src/test/java/io/github/gitbucket/solidbase/manager/JDBCVersionManagerTest.java b/src/test/java/io/github/gitbucket/solidbase/manager/JDBCVersionManagerTest.java new file mode 100644 index 0000000..15991ab --- /dev/null +++ b/src/test/java/io/github/gitbucket/solidbase/manager/JDBCVersionManagerTest.java @@ -0,0 +1,40 @@ +package io.github.gitbucket.solidbase.manager; + +import org.junit.Test; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.util.Optional; + +import static org.junit.Assert.*; + +public class JDBCVersionManagerTest { + + @Test(expected = Exception.class) + public void testGetCurrentVersionThrowsWhenVersionsTableIsMissing() throws Exception { + try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:test-getCurrentVersion-missing-table", "sa", "sa")) { + JDBCVersionManager manager = new JDBCVersionManager(conn); + manager.getCurrentVersion("test"); + } + } + + @Test + public void testFindCurrentVersionIsEmptyWhenVersionsTableIsMissing() throws Exception { + try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:test-findCurrentVersion-missing-table", "sa", "sa")) { + JDBCVersionManager manager = new JDBCVersionManager(conn); + + assertEquals(Optional.empty(), manager.findCurrentVersion("test")); + } + } + + @Test + public void testFindCurrentVersionReturnsVersionWhenVersionsTableIsPresent() throws Exception { + try (Connection conn = DriverManager.getConnection("jdbc:h2:mem:test-findCurrentVersion-present-table", "sa", "sa")) { + JDBCVersionManager manager = new JDBCVersionManager(conn); + manager.initialize(); + manager.updateVersion("test", "1.0.0"); + + assertEquals(Optional.of("1.0.0"), manager.findCurrentVersion("test")); + } + } +}