diff --git a/scm-webapp/src/main/java/sonia/scm/group/update/XmlGroupV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/group/XmlGroupV1UpdateStep.java similarity index 92% rename from scm-webapp/src/main/java/sonia/scm/group/update/XmlGroupV1UpdateStep.java rename to scm-webapp/src/main/java/sonia/scm/update/group/XmlGroupV1UpdateStep.java index 7589fe5db7..3f3b25352d 100644 --- a/scm-webapp/src/main/java/sonia/scm/group/update/XmlGroupV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/group/XmlGroupV1UpdateStep.java @@ -1,4 +1,4 @@ -package sonia.scm.group.update; +package sonia.scm.update.group; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -11,6 +11,7 @@ import sonia.scm.plugin.Extension; import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.StoreConstants; +import sonia.scm.update.properties.V1Properties; import sonia.scm.version.Version; import javax.inject.Inject; @@ -25,7 +26,6 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; -import java.util.Map; import java.util.Optional; import static java.util.Optional.empty; @@ -140,19 +140,6 @@ public class XmlGroupV1UpdateStep implements UpdateStep { } } - @XmlAccessorType(XmlAccessType.FIELD) - private static class V1Property { - private String key; - private String value; - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlRootElement(name = "properties") - private static class V1Properties { - @XmlElement(name = "item") - private List properties; - } - private static class GroupList { @XmlElement(name = "group") private List groups; diff --git a/scm-webapp/src/main/java/sonia/scm/update/properties/V1Properties.java b/scm-webapp/src/main/java/sonia/scm/update/properties/V1Properties.java new file mode 100644 index 0000000000..3c8555a76e --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/update/properties/V1Properties.java @@ -0,0 +1,14 @@ +package sonia.scm.update.properties; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@XmlAccessorType(XmlAccessType.FIELD) +@XmlRootElement(name = "properties") +public class V1Properties { + @XmlElement(name = "item") + private List properties; +} diff --git a/scm-webapp/src/main/java/sonia/scm/update/properties/V1Property.java b/scm-webapp/src/main/java/sonia/scm/update/properties/V1Property.java new file mode 100644 index 0000000000..c92c15188d --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/update/properties/V1Property.java @@ -0,0 +1,10 @@ +package sonia.scm.update.properties; + +import javax.xml.bind.annotation.XmlAccessType; +import javax.xml.bind.annotation.XmlAccessorType; + +@XmlAccessorType(XmlAccessType.FIELD) +public class V1Property { + private String key; + private String value; +} diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/BaseMigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/BaseMigrationStrategy.java similarity index 97% rename from scm-webapp/src/main/java/sonia/scm/repository/update/BaseMigrationStrategy.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/BaseMigrationStrategy.java index 3ac0a6fd68..adb903af51 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/BaseMigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/BaseMigrationStrategy.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import sonia.scm.SCMContextProvider; import sonia.scm.migration.UpdateException; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/CopyMigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/CopyMigrationStrategy.java similarity index 97% rename from scm-webapp/src/main/java/sonia/scm/repository/update/CopyMigrationStrategy.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/CopyMigrationStrategy.java index c5550b29af..060ed6704e 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/CopyMigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/CopyMigrationStrategy.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import sonia.scm.SCMContextProvider; import sonia.scm.repository.RepositoryDirectoryHandler; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/InlineMigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/InlineMigrationStrategy.java similarity index 97% rename from scm-webapp/src/main/java/sonia/scm/repository/update/InlineMigrationStrategy.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/InlineMigrationStrategy.java index ace6a63ab8..62dd67d86a 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/InlineMigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/InlineMigrationStrategy.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import sonia.scm.SCMContextProvider; import sonia.scm.repository.RepositoryDirectoryHandler; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/MigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/MigrationStrategy.java similarity index 93% rename from scm-webapp/src/main/java/sonia/scm/repository/update/MigrationStrategy.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/MigrationStrategy.java index 6ff631208c..c7bb2cba86 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/MigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/MigrationStrategy.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import com.google.inject.Injector; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/MigrationStrategyDao.java b/scm-webapp/src/main/java/sonia/scm/update/repository/MigrationStrategyDao.java similarity index 95% rename from scm-webapp/src/main/java/sonia/scm/repository/update/MigrationStrategyDao.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/MigrationStrategyDao.java index f98e697468..15c931bf31 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/MigrationStrategyDao.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/MigrationStrategyDao.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStoreFactory; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/MoveMigrationStrategy.java b/scm-webapp/src/main/java/sonia/scm/update/repository/MoveMigrationStrategy.java similarity index 98% rename from scm-webapp/src/main/java/sonia/scm/repository/update/MoveMigrationStrategy.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/MoveMigrationStrategy.java index e42d4138bb..08d71dd376 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/MoveMigrationStrategy.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/MoveMigrationStrategy.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/RepositoryMigrationPlan.java b/scm-webapp/src/main/java/sonia/scm/update/repository/RepositoryMigrationPlan.java similarity index 98% rename from scm-webapp/src/main/java/sonia/scm/repository/update/RepositoryMigrationPlan.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/RepositoryMigrationPlan.java index 126bca8a23..f2b2dc9788 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/RepositoryMigrationPlan.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/RepositoryMigrationPlan.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryFileNameUpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStep.java similarity index 98% rename from scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryFileNameUpdateStep.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStep.java index 765f3c6317..62902713f0 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryFileNameUpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStep.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStep.java similarity index 96% rename from scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStep.java rename to scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStep.java index 813d42818f..a3b511a06b 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStep.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import com.google.inject.Injector; import org.slf4j.Logger; @@ -13,6 +13,7 @@ import sonia.scm.repository.xml.XmlRepositoryDAO; import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.StoreConstants; +import sonia.scm.update.properties.V1Properties; import sonia.scm.version.Version; import javax.inject.Inject; @@ -199,19 +200,6 @@ public class XmlRepositoryV1UpdateStep implements UpdateStep { private String type; } - @XmlAccessorType(XmlAccessType.FIELD) - private static class V1Property { - private String key; - private String value; - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlRootElement(name = "properties") - private static class V1Properties { - @XmlElement(name = "item") - private List properties; - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "repositories") private static class V1Repository { diff --git a/scm-webapp/src/main/java/sonia/scm/security/update/XmlSecurityV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/security/XmlSecurityV1UpdateStep.java similarity index 99% rename from scm-webapp/src/main/java/sonia/scm/security/update/XmlSecurityV1UpdateStep.java rename to scm-webapp/src/main/java/sonia/scm/update/security/XmlSecurityV1UpdateStep.java index 52bf8124e3..f62b81b5df 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/update/XmlSecurityV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/security/XmlSecurityV1UpdateStep.java @@ -1,4 +1,4 @@ -package sonia.scm.security.update; +package sonia.scm.update.security; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/scm-webapp/src/main/java/sonia/scm/user/update/XmlUserV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/update/user/XmlUserV1UpdateStep.java similarity index 94% rename from scm-webapp/src/main/java/sonia/scm/user/update/XmlUserV1UpdateStep.java rename to scm-webapp/src/main/java/sonia/scm/update/user/XmlUserV1UpdateStep.java index d02de8067d..9878304585 100644 --- a/scm-webapp/src/main/java/sonia/scm/user/update/XmlUserV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/update/user/XmlUserV1UpdateStep.java @@ -1,4 +1,4 @@ -package sonia.scm.user.update; +package sonia.scm.update.user; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -10,6 +10,7 @@ import sonia.scm.security.AssignedPermission; import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.StoreConstants; +import sonia.scm.update.properties.V1Properties; import sonia.scm.user.User; import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.version.Version; @@ -125,19 +126,6 @@ public class XmlUserV1UpdateStep implements UpdateStep { return new File(contextProvider.getBaseDirectory(), StoreConstants.CONFIG_DIRECTORY_NAME).toPath(); } - @XmlAccessorType(XmlAccessType.FIELD) - private static class V1Property { - private String key; - private String value; - } - - @XmlAccessorType(XmlAccessType.FIELD) - @XmlRootElement(name = "properties") - private static class V1Properties { - @XmlElement(name = "item") - private List properties; - } - @XmlAccessorType(XmlAccessType.FIELD) @XmlRootElement(name = "user") private static class V1User { diff --git a/scm-webapp/src/test/java/sonia/scm/update/UpdateStepTestUtil.java b/scm-webapp/src/test/java/sonia/scm/update/UpdateStepTestUtil.java new file mode 100644 index 0000000000..f077d783b3 --- /dev/null +++ b/scm-webapp/src/test/java/sonia/scm/update/UpdateStepTestUtil.java @@ -0,0 +1,63 @@ +package sonia.scm.update; + +import com.google.common.io.Resources; +import org.mockito.Mockito; +import sonia.scm.SCMContextProvider; +import sonia.scm.security.AssignedPermission; +import sonia.scm.security.DefaultKeyGenerator; +import sonia.scm.store.ConfigurationEntryStore; +import sonia.scm.store.ConfigurationEntryStoreFactory; +import sonia.scm.store.JAXBConfigurationEntryStoreFactory; + +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +import static org.mockito.Mockito.when; + +public class UpdateStepTestUtil { + +private final SCMContextProvider contextProvider; + + private final Path tempDir; + private final ConfigurationEntryStoreFactory storeFactory; + + public UpdateStepTestUtil(Path tempDir) { + this.tempDir = tempDir; + contextProvider = Mockito.mock(SCMContextProvider.class); + storeFactory = new JAXBConfigurationEntryStoreFactory(contextProvider, null, new DefaultKeyGenerator()); + when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); + } + + public SCMContextProvider getContextProvider() { + return contextProvider; + } + + public ConfigurationEntryStoreFactory getStoreFactory() { + return storeFactory; + } + + public void copyConfigFile(String fileName) throws IOException { + Path configDir = tempDir.resolve("config"); + Files.createDirectories(configDir); + copyTestDatabaseFile(configDir, fileName); + } + + public ConfigurationEntryStore getStoreForConfigFile(String name) { + return storeFactory + .withType(AssignedPermission.class) + .withName(name) + .build(); + } + + public Path getFile(String name) { + return tempDir.resolve("config").resolve(name); + } + + private void copyTestDatabaseFile(Path configDir, String fileName) throws IOException { + URL url = Resources.getResource(fileName); + Files.copy(url.openStream(), configDir.resolve(Paths.get(fileName).getFileName())); + } +} diff --git a/scm-webapp/src/test/java/sonia/scm/group/update/XmlGroupV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java similarity index 66% rename from scm-webapp/src/test/java/sonia/scm/group/update/XmlGroupV1UpdateStepTest.java rename to scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java index ab82771304..394dc44109 100644 --- a/scm-webapp/src/test/java/sonia/scm/group/update/XmlGroupV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/group/XmlGroupV1UpdateStepTest.java @@ -1,6 +1,5 @@ -package sonia.scm.group.update; +package sonia.scm.update.group; -import com.google.common.io.Resources; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -10,17 +9,12 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import sonia.scm.SCMContextProvider; import sonia.scm.group.Group; import sonia.scm.group.xml.XmlGroupDAO; -import sonia.scm.security.DefaultKeyGenerator; -import sonia.scm.store.ConfigurationEntryStoreFactory; -import sonia.scm.store.JAXBConfigurationEntryStoreFactory; +import sonia.scm.update.UpdateStepTestUtil; import javax.xml.bind.JAXBException; import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; import java.nio.file.Path; import java.util.Optional; @@ -31,14 +25,11 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @ExtendWith(TempDirectory.class) class XmlGroupV1UpdateStepTest { - @Mock - SCMContextProvider contextProvider; @Mock XmlGroupDAO groupDAO; @@ -47,13 +38,13 @@ class XmlGroupV1UpdateStepTest { XmlGroupV1UpdateStep updateStep; - ConfigurationEntryStoreFactory storeFactory; + private UpdateStepTestUtil testUtil; + @BeforeEach void mockScmHome(@TempDirectory.TempDir Path tempDir) { - when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); - storeFactory = new JAXBConfigurationEntryStoreFactory(contextProvider, null, new DefaultKeyGenerator()); - updateStep = new XmlGroupV1UpdateStep(contextProvider, groupDAO, storeFactory); + testUtil = new UpdateStepTestUtil(tempDir); + updateStep = new XmlGroupV1UpdateStep(testUtil.getContextProvider(), groupDAO, testUtil.getStoreFactory()); } @Nested @@ -65,10 +56,8 @@ class XmlGroupV1UpdateStepTest { } @BeforeEach - void createGroupV1XML(@TempDirectory.TempDir Path tempDir) throws IOException { - Path configDir = tempDir.resolve("config"); - Files.createDirectories(configDir); - copyTestDatabaseFile(configDir, "groups.xml"); + void createGroupV1XML() throws IOException { + testUtil.copyConfigFile("sonia/scm/update/group/groups.xml"); } @Test @@ -92,9 +81,9 @@ class XmlGroupV1UpdateStepTest { } @Test - void shouldExtractProperties(@TempDirectory.TempDir Path tempDir) throws JAXBException { + void shouldExtractProperties() throws JAXBException { updateStep.doUpdate(); - Path propertiesFile = tempDir.resolve("config").resolve("group-properties-v1.xml"); + Path propertiesFile = testUtil.getFile("group-properties-v1.xml"); assertThat(propertiesFile) .exists(); assertThat(linesOf(propertiesFile.toFile())) @@ -110,11 +99,6 @@ class XmlGroupV1UpdateStepTest { } } - private void copyTestDatabaseFile(Path configDir, String groupsFileName) throws IOException { - URL url = Resources.getResource("sonia/scm/group/update/" + groupsFileName); - Files.copy(url.openStream(), configDir.resolve(groupsFileName)); - } - @Test void shouldNotFailForMissingConfigDir() throws JAXBException { updateStep.doUpdate(); diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/CopyMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java similarity index 98% rename from scm-webapp/src/test/java/sonia/scm/repository/update/CopyMigrationStrategyTest.java rename to scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java index d7217bec48..b40283ae79 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/CopyMigrationStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/CopyMigrationStrategyTest.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/InlineMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java similarity index 97% rename from scm-webapp/src/test/java/sonia/scm/repository/update/InlineMigrationStrategyTest.java rename to scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java index ed0d7eeb40..6abddae3fb 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/InlineMigrationStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/InlineMigrationStrategyTest.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyDaoTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/MigrationStrategyDaoTest.java similarity index 90% rename from scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyDaoTest.java rename to scm-webapp/src/test/java/sonia/scm/update/repository/MigrationStrategyDaoTest.java index a7365ce656..e3fd4457b6 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyDaoTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/MigrationStrategyDaoTest.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.BeforeEach; @@ -11,13 +11,15 @@ import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.SCMContextProvider; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.store.JAXBConfigurationStoreFactory; +import sonia.scm.update.repository.MigrationStrategy; +import sonia.scm.update.repository.MigrationStrategyDao; import javax.xml.bind.JAXBException; import java.nio.file.Path; import java.util.Optional; import static org.mockito.Mockito.when; -import static sonia.scm.repository.update.MigrationStrategy.INLINE; +import static sonia.scm.update.repository.MigrationStrategy.INLINE; @ExtendWith(MockitoExtension.class) @ExtendWith(TempDirectory.class) diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyMock.java b/scm-webapp/src/test/java/sonia/scm/update/repository/MigrationStrategyMock.java similarity index 85% rename from scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyMock.java rename to scm-webapp/src/test/java/sonia/scm/update/repository/MigrationStrategyMock.java index e0ee39880f..e0018f584f 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyMock.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/MigrationStrategyMock.java @@ -1,7 +1,7 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import com.google.inject.Injector; -import sonia.scm.repository.update.MigrationStrategy.Instance; +import sonia.scm.update.repository.MigrationStrategy.Instance; import java.util.HashMap; import java.util.Map; diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/MoveMigrationStrategyTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java similarity index 98% rename from scm-webapp/src/test/java/sonia/scm/repository/update/MoveMigrationStrategyTest.java rename to scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java index ce894516df..b55315d85f 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/MoveMigrationStrategyTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/MoveMigrationStrategyTest.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/V1RepositoryFileSystem.java b/scm-webapp/src/test/java/sonia/scm/update/repository/V1RepositoryFileSystem.java similarity index 96% rename from scm-webapp/src/test/java/sonia/scm/repository/update/V1RepositoryFileSystem.java rename to scm-webapp/src/test/java/sonia/scm/update/repository/V1RepositoryFileSystem.java index 146953d790..5baf5200fc 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/V1RepositoryFileSystem.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/V1RepositoryFileSystem.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import sonia.scm.repository.spi.ZippedRepositoryTestBase; @@ -62,6 +62,6 @@ class V1RepositoryFileSystem { * */ static void createV1Home(Path tempDir) throws IOException { - ZippedRepositoryTestBase.extract(tempDir.toFile(), "sonia/scm/repository/update/scm-home.v1.zip"); + ZippedRepositoryTestBase.extract(tempDir.toFile(), "sonia/scm/update/repository/scm-home.v1.zip"); } } diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryFileNameUpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java similarity index 93% rename from scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryFileNameUpdateStepTest.java rename to scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java index 6314e02783..51be47fc82 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryFileNameUpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryFileNameUpdateStepTest.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import com.google.common.io.Resources; import org.junit.jupiter.api.BeforeEach; @@ -31,7 +31,7 @@ class XmlRepositoryFileNameUpdateStepTest { @Test void shouldCopyRepositoriesFileToRepositoryPathsFile(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException { XmlRepositoryFileNameUpdateStep updateStep = new XmlRepositoryFileNameUpdateStep(contextProvider); - URL url = Resources.getResource("sonia/scm/repository/update/formerV2RepositoryFile.xml"); + URL url = Resources.getResource("sonia/scm/update/repository/formerV2RepositoryFile.xml"); Path configDir = tempDir.resolve("config"); Files.createDirectories(configDir); Files.copy(url.openStream(), configDir.resolve("repositories.xml")); diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java similarity index 96% rename from scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStepTest.java rename to scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java index 773d7bd447..438a54b70d 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/repository/XmlRepositoryV1UpdateStepTest.java @@ -1,4 +1,4 @@ -package sonia.scm.repository.update; +package sonia.scm.update.repository; import com.google.common.io.Resources; import com.google.inject.Injector; @@ -36,9 +36,9 @@ import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static sonia.scm.repository.update.MigrationStrategy.COPY; -import static sonia.scm.repository.update.MigrationStrategy.INLINE; -import static sonia.scm.repository.update.MigrationStrategy.MOVE; +import static sonia.scm.update.repository.MigrationStrategy.COPY; +import static sonia.scm.update.repository.MigrationStrategy.INLINE; +import static sonia.scm.update.repository.MigrationStrategy.MOVE; @ExtendWith(MockitoExtension.class) @ExtendWith(TempDirectory.class) @@ -226,7 +226,7 @@ class XmlRepositoryV1UpdateStepTest { } private void createFormerV2RepositoriesFile(@TempDirectory.TempDir Path tempDir) throws IOException { - URL url = Resources.getResource("sonia/scm/repository/update/formerV2RepositoryFile.xml"); + URL url = Resources.getResource("sonia/scm/update/repository/formerV2RepositoryFile.xml"); Path configDir = tempDir.resolve("config"); Files.createDirectories(configDir); Files.copy(url.openStream(), configDir.resolve("repositories.xml")); diff --git a/scm-webapp/src/test/java/sonia/scm/security/update/XmlSecurityV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java similarity index 95% rename from scm-webapp/src/test/java/sonia/scm/security/update/XmlSecurityV1UpdateStepTest.java rename to scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java index 62e82ce168..f8949d73a5 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/update/XmlSecurityV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/security/XmlSecurityV1UpdateStepTest.java @@ -1,4 +1,4 @@ -package sonia.scm.security.update; +package sonia.scm.update.security; import com.google.common.io.Resources; import org.junit.jupiter.api.BeforeEach; @@ -14,6 +14,7 @@ import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.InMemoryConfigurationEntryStore; import sonia.scm.store.InMemoryConfigurationEntryStoreFactory; +import sonia.scm.update.security.XmlSecurityV1UpdateStep; import javax.xml.bind.JAXBException; import java.io.IOException; @@ -82,7 +83,7 @@ class XmlSecurityV1UpdateStepTest { } private void copyTestDatabaseFile(Path configDir, String fileName) throws IOException { - URL url = Resources.getResource("sonia/scm/security/update/" + fileName); + URL url = Resources.getResource("sonia/scm/update/security/" + fileName); Files.copy(url.openStream(), configDir.resolve(fileName)); } diff --git a/scm-webapp/src/test/java/sonia/scm/user/update/XmlUserV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java similarity index 69% rename from scm-webapp/src/test/java/sonia/scm/user/update/XmlUserV1UpdateStepTest.java rename to scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java index 0d0920620c..19d37d542d 100644 --- a/scm-webapp/src/test/java/sonia/scm/user/update/XmlUserV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/update/user/XmlUserV1UpdateStepTest.java @@ -1,6 +1,5 @@ -package sonia.scm.user.update; +package sonia.scm.update.user; -import com.google.common.io.Resources; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -10,18 +9,13 @@ import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import sonia.scm.SCMContextProvider; import sonia.scm.security.AssignedPermission; -import sonia.scm.security.DefaultKeyGenerator; -import sonia.scm.store.ConfigurationEntryStoreFactory; -import sonia.scm.store.JAXBConfigurationEntryStoreFactory; +import sonia.scm.update.UpdateStepTestUtil; import sonia.scm.user.User; import sonia.scm.user.xml.XmlUserDAO; import javax.xml.bind.JAXBException; import java.io.IOException; -import java.net.URL; -import java.nio.file.Files; import java.nio.file.Path; import java.util.Optional; @@ -31,14 +25,11 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @ExtendWith(TempDirectory.class) class XmlUserV1UpdateStepTest { - @Mock - SCMContextProvider contextProvider; @Mock XmlUserDAO userDAO; @@ -47,13 +38,12 @@ class XmlUserV1UpdateStepTest { XmlUserV1UpdateStep updateStep; - ConfigurationEntryStoreFactory storeFactory; + private UpdateStepTestUtil testUtil; @BeforeEach void mockScmHome(@TempDirectory.TempDir Path tempDir) { - when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); - storeFactory = new JAXBConfigurationEntryStoreFactory(contextProvider, null, new DefaultKeyGenerator()); - updateStep = new XmlUserV1UpdateStep(contextProvider, userDAO, storeFactory); + testUtil = new UpdateStepTestUtil(tempDir); + updateStep = new XmlUserV1UpdateStep(testUtil.getContextProvider(), userDAO, testUtil.getStoreFactory()); } @Nested @@ -65,20 +55,15 @@ class XmlUserV1UpdateStepTest { } @BeforeEach - void createUserV1XML(@TempDirectory.TempDir Path tempDir) throws IOException { - Path configDir = tempDir.resolve("config"); - Files.createDirectories(configDir); - copyTestDatabaseFile(configDir, "users.xml"); + void createUserV1XML() throws IOException { + testUtil.copyConfigFile("sonia/scm/update/user/users.xml"); } @Test void shouldCreateNewPermissionsForV1AdminUser() throws JAXBException { updateStep.doUpdate(); Optional assignedPermission = - storeFactory - .withType(AssignedPermission.class) - .withName("security") - .build() + testUtil.getStoreForConfigFile("security") .getAll() .values() .stream() @@ -111,9 +96,9 @@ class XmlUserV1UpdateStepTest { } @Test - void shouldExtractProperties(@TempDirectory.TempDir Path tempDir) throws JAXBException { + void shouldExtractProperties() throws JAXBException { updateStep.doUpdate(); - Path propertiesFile = tempDir.resolve("config").resolve("user-properties-v1.xml"); + Path propertiesFile = testUtil.getFile("user-properties-v1.xml"); assertThat(propertiesFile) .exists(); assertThat(linesOf(propertiesFile.toFile())) @@ -133,11 +118,6 @@ class XmlUserV1UpdateStepTest { } } - private void copyTestDatabaseFile(Path configDir, String usersFileName) throws IOException { - URL url = Resources.getResource("sonia/scm/user/update/" + usersFileName); - Files.copy(url.openStream(), configDir.resolve(usersFileName)); - } - @Test void shouldNotFailForMissingConfigDir() throws JAXBException { updateStep.doUpdate(); diff --git a/scm-webapp/src/test/resources/sonia/scm/repository/update/scm-home.v1.zip b/scm-webapp/src/test/resources/sonia/scm/repository/update/scm-home.v1.zip deleted file mode 100644 index 0d43f2f4d6..0000000000 Binary files a/scm-webapp/src/test/resources/sonia/scm/repository/update/scm-home.v1.zip and /dev/null differ diff --git a/scm-webapp/src/test/resources/sonia/scm/group/update/groups.xml b/scm-webapp/src/test/resources/sonia/scm/update/group/groups.xml similarity index 100% rename from scm-webapp/src/test/resources/sonia/scm/group/update/groups.xml rename to scm-webapp/src/test/resources/sonia/scm/update/group/groups.xml diff --git a/scm-webapp/src/test/resources/sonia/scm/repository/update/formerV2RepositoryFile.xml b/scm-webapp/src/test/resources/sonia/scm/update/repository/formerV2RepositoryFile.xml similarity index 100% rename from scm-webapp/src/test/resources/sonia/scm/repository/update/formerV2RepositoryFile.xml rename to scm-webapp/src/test/resources/sonia/scm/update/repository/formerV2RepositoryFile.xml diff --git a/scm-webapp/src/test/resources/sonia/scm/update/repository/scm-home.v1.zip b/scm-webapp/src/test/resources/sonia/scm/update/repository/scm-home.v1.zip new file mode 100644 index 0000000000..5d936db5e2 Binary files /dev/null and b/scm-webapp/src/test/resources/sonia/scm/update/repository/scm-home.v1.zip differ diff --git a/scm-webapp/src/test/resources/sonia/scm/security/update/config.xml b/scm-webapp/src/test/resources/sonia/scm/update/security/config.xml similarity index 100% rename from scm-webapp/src/test/resources/sonia/scm/security/update/config.xml rename to scm-webapp/src/test/resources/sonia/scm/update/security/config.xml diff --git a/scm-webapp/src/test/resources/sonia/scm/user/update/users.xml b/scm-webapp/src/test/resources/sonia/scm/update/user/users.xml similarity index 100% rename from scm-webapp/src/test/resources/sonia/scm/user/update/users.xml rename to scm-webapp/src/test/resources/sonia/scm/update/user/users.xml