Extract common code

This commit is contained in:
René Pfeuffer
2019-06-03 15:24:19 +02:00
parent 0be816dd28
commit 7c50ad07ec
32 changed files with 143 additions and 126 deletions

View File

@@ -1,4 +1,4 @@
package sonia.scm.group.update; package sonia.scm.update.group;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -11,6 +11,7 @@ import sonia.scm.plugin.Extension;
import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.ConfigurationEntryStoreFactory;
import sonia.scm.store.StoreConstants; import sonia.scm.store.StoreConstants;
import sonia.scm.update.properties.V1Properties;
import sonia.scm.version.Version; import sonia.scm.version.Version;
import javax.inject.Inject; import javax.inject.Inject;
@@ -25,7 +26,6 @@ import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
import static java.util.Optional.empty; 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<V1Property> properties;
}
private static class GroupList { private static class GroupList {
@XmlElement(name = "group") @XmlElement(name = "group")
private List<V1Group> groups; private List<V1Group> groups;

View File

@@ -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<V1Property> properties;
}

View File

@@ -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;
}

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import sonia.scm.SCMContextProvider; import sonia.scm.SCMContextProvider;
import sonia.scm.migration.UpdateException; import sonia.scm.migration.UpdateException;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import sonia.scm.SCMContextProvider; import sonia.scm.SCMContextProvider;
import sonia.scm.repository.RepositoryDirectoryHandler; import sonia.scm.repository.RepositoryDirectoryHandler;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import sonia.scm.SCMContextProvider; import sonia.scm.SCMContextProvider;
import sonia.scm.repository.RepositoryDirectoryHandler; import sonia.scm.repository.RepositoryDirectoryHandler;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import com.google.inject.Injector; import com.google.inject.Injector;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import sonia.scm.store.ConfigurationStore; import sonia.scm.store.ConfigurationStore;
import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.store.ConfigurationStoreFactory;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

View File

@@ -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.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAccessorType;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import com.google.inject.Injector; import com.google.inject.Injector;
import org.slf4j.Logger; import org.slf4j.Logger;
@@ -13,6 +13,7 @@ import sonia.scm.repository.xml.XmlRepositoryDAO;
import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.ConfigurationEntryStoreFactory;
import sonia.scm.store.StoreConstants; import sonia.scm.store.StoreConstants;
import sonia.scm.update.properties.V1Properties;
import sonia.scm.version.Version; import sonia.scm.version.Version;
import javax.inject.Inject; import javax.inject.Inject;
@@ -199,19 +200,6 @@ public class XmlRepositoryV1UpdateStep implements UpdateStep {
private String type; 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<V1Property> properties;
}
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "repositories") @XmlRootElement(name = "repositories")
private static class V1Repository { private static class V1Repository {

View File

@@ -1,4 +1,4 @@
package sonia.scm.security.update; package sonia.scm.update.security;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;

View File

@@ -1,4 +1,4 @@
package sonia.scm.user.update; package sonia.scm.update.user;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -10,6 +10,7 @@ import sonia.scm.security.AssignedPermission;
import sonia.scm.store.ConfigurationEntryStore; import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.ConfigurationEntryStoreFactory;
import sonia.scm.store.StoreConstants; import sonia.scm.store.StoreConstants;
import sonia.scm.update.properties.V1Properties;
import sonia.scm.user.User; import sonia.scm.user.User;
import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.user.xml.XmlUserDAO;
import sonia.scm.version.Version; import sonia.scm.version.Version;
@@ -125,19 +126,6 @@ public class XmlUserV1UpdateStep implements UpdateStep {
return new File(contextProvider.getBaseDirectory(), StoreConstants.CONFIG_DIRECTORY_NAME).toPath(); 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<V1Property> properties;
}
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "user") @XmlRootElement(name = "user")
private static class V1User { private static class V1User {

View File

@@ -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<AssignedPermission> 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()));
}
}

View File

@@ -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.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -10,17 +9,12 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Captor; import org.mockito.Captor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
import sonia.scm.group.Group; import sonia.scm.group.Group;
import sonia.scm.group.xml.XmlGroupDAO; import sonia.scm.group.xml.XmlGroupDAO;
import sonia.scm.security.DefaultKeyGenerator; import sonia.scm.update.UpdateStepTestUtil;
import sonia.scm.store.ConfigurationEntryStoreFactory;
import sonia.scm.store.JAXBConfigurationEntryStoreFactory;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
import java.io.IOException; import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Optional; 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.doNothing;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
@ExtendWith(TempDirectory.class) @ExtendWith(TempDirectory.class)
class XmlGroupV1UpdateStepTest { class XmlGroupV1UpdateStepTest {
@Mock
SCMContextProvider contextProvider;
@Mock @Mock
XmlGroupDAO groupDAO; XmlGroupDAO groupDAO;
@@ -47,13 +38,13 @@ class XmlGroupV1UpdateStepTest {
XmlGroupV1UpdateStep updateStep; XmlGroupV1UpdateStep updateStep;
ConfigurationEntryStoreFactory storeFactory; private UpdateStepTestUtil testUtil;
@BeforeEach @BeforeEach
void mockScmHome(@TempDirectory.TempDir Path tempDir) { void mockScmHome(@TempDirectory.TempDir Path tempDir) {
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); testUtil = new UpdateStepTestUtil(tempDir);
storeFactory = new JAXBConfigurationEntryStoreFactory(contextProvider, null, new DefaultKeyGenerator()); updateStep = new XmlGroupV1UpdateStep(testUtil.getContextProvider(), groupDAO, testUtil.getStoreFactory());
updateStep = new XmlGroupV1UpdateStep(contextProvider, groupDAO, storeFactory);
} }
@Nested @Nested
@@ -65,10 +56,8 @@ class XmlGroupV1UpdateStepTest {
} }
@BeforeEach @BeforeEach
void createGroupV1XML(@TempDirectory.TempDir Path tempDir) throws IOException { void createGroupV1XML() throws IOException {
Path configDir = tempDir.resolve("config"); testUtil.copyConfigFile("sonia/scm/update/group/groups.xml");
Files.createDirectories(configDir);
copyTestDatabaseFile(configDir, "groups.xml");
} }
@Test @Test
@@ -92,9 +81,9 @@ class XmlGroupV1UpdateStepTest {
} }
@Test @Test
void shouldExtractProperties(@TempDirectory.TempDir Path tempDir) throws JAXBException { void shouldExtractProperties() throws JAXBException {
updateStep.doUpdate(); updateStep.doUpdate();
Path propertiesFile = tempDir.resolve("config").resolve("group-properties-v1.xml"); Path propertiesFile = testUtil.getFile("group-properties-v1.xml");
assertThat(propertiesFile) assertThat(propertiesFile)
.exists(); .exists();
assertThat(linesOf(propertiesFile.toFile())) 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 @Test
void shouldNotFailForMissingConfigDir() throws JAXBException { void shouldNotFailForMissingConfigDir() throws JAXBException {
updateStep.doUpdate(); updateStep.doUpdate();

View File

@@ -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.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@@ -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.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import org.assertj.core.api.Assertions; import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@@ -11,13 +11,15 @@ import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider; import sonia.scm.SCMContextProvider;
import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.store.ConfigurationStoreFactory;
import sonia.scm.store.JAXBConfigurationStoreFactory; import sonia.scm.store.JAXBConfigurationStoreFactory;
import sonia.scm.update.repository.MigrationStrategy;
import sonia.scm.update.repository.MigrationStrategyDao;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Optional; import java.util.Optional;
import static org.mockito.Mockito.when; 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(MockitoExtension.class)
@ExtendWith(TempDirectory.class) @ExtendWith(TempDirectory.class)

View File

@@ -1,7 +1,7 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import com.google.inject.Injector; 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.HashMap;
import java.util.Map; import java.util.Map;

View File

@@ -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.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import sonia.scm.repository.spi.ZippedRepositoryTestBase; import sonia.scm.repository.spi.ZippedRepositoryTestBase;
@@ -62,6 +62,6 @@ class V1RepositoryFileSystem {
* </pre> * </pre>
*/ */
static void createV1Home(Path tempDir) throws IOException { 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");
} }
} }

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import com.google.common.io.Resources; import com.google.common.io.Resources;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@@ -31,7 +31,7 @@ class XmlRepositoryFileNameUpdateStepTest {
@Test @Test
void shouldCopyRepositoriesFileToRepositoryPathsFile(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException { void shouldCopyRepositoriesFileToRepositoryPathsFile(@TempDirectory.TempDir Path tempDir) throws JAXBException, IOException {
XmlRepositoryFileNameUpdateStep updateStep = new XmlRepositoryFileNameUpdateStep(contextProvider); 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"); Path configDir = tempDir.resolve("config");
Files.createDirectories(configDir); Files.createDirectories(configDir);
Files.copy(url.openStream(), configDir.resolve("repositories.xml")); Files.copy(url.openStream(), configDir.resolve("repositories.xml"));

View File

@@ -1,4 +1,4 @@
package sonia.scm.repository.update; package sonia.scm.update.repository;
import com.google.common.io.Resources; import com.google.common.io.Resources;
import com.google.inject.Injector; 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.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import static sonia.scm.repository.update.MigrationStrategy.COPY; import static sonia.scm.update.repository.MigrationStrategy.COPY;
import static sonia.scm.repository.update.MigrationStrategy.INLINE; import static sonia.scm.update.repository.MigrationStrategy.INLINE;
import static sonia.scm.repository.update.MigrationStrategy.MOVE; import static sonia.scm.update.repository.MigrationStrategy.MOVE;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
@ExtendWith(TempDirectory.class) @ExtendWith(TempDirectory.class)
@@ -226,7 +226,7 @@ class XmlRepositoryV1UpdateStepTest {
} }
private void createFormerV2RepositoriesFile(@TempDirectory.TempDir Path tempDir) throws IOException { 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"); Path configDir = tempDir.resolve("config");
Files.createDirectories(configDir); Files.createDirectories(configDir);
Files.copy(url.openStream(), configDir.resolve("repositories.xml")); Files.copy(url.openStream(), configDir.resolve("repositories.xml"));

View File

@@ -1,4 +1,4 @@
package sonia.scm.security.update; package sonia.scm.update.security;
import com.google.common.io.Resources; import com.google.common.io.Resources;
import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.BeforeEach;
@@ -14,6 +14,7 @@ import sonia.scm.store.ConfigurationEntryStore;
import sonia.scm.store.ConfigurationEntryStoreFactory; import sonia.scm.store.ConfigurationEntryStoreFactory;
import sonia.scm.store.InMemoryConfigurationEntryStore; import sonia.scm.store.InMemoryConfigurationEntryStore;
import sonia.scm.store.InMemoryConfigurationEntryStoreFactory; import sonia.scm.store.InMemoryConfigurationEntryStoreFactory;
import sonia.scm.update.security.XmlSecurityV1UpdateStep;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
import java.io.IOException; import java.io.IOException;
@@ -82,7 +83,7 @@ class XmlSecurityV1UpdateStepTest {
} }
private void copyTestDatabaseFile(Path configDir, String fileName) throws IOException { 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)); Files.copy(url.openStream(), configDir.resolve(fileName));
} }

View File

@@ -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.BeforeEach;
import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@@ -10,18 +9,13 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Captor; import org.mockito.Captor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension; import org.mockito.junit.jupiter.MockitoExtension;
import sonia.scm.SCMContextProvider;
import sonia.scm.security.AssignedPermission; import sonia.scm.security.AssignedPermission;
import sonia.scm.security.DefaultKeyGenerator; import sonia.scm.update.UpdateStepTestUtil;
import sonia.scm.store.ConfigurationEntryStoreFactory;
import sonia.scm.store.JAXBConfigurationEntryStoreFactory;
import sonia.scm.user.User; import sonia.scm.user.User;
import sonia.scm.user.xml.XmlUserDAO; import sonia.scm.user.xml.XmlUserDAO;
import javax.xml.bind.JAXBException; import javax.xml.bind.JAXBException;
import java.io.IOException; import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.Optional; 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.doNothing;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@ExtendWith(MockitoExtension.class) @ExtendWith(MockitoExtension.class)
@ExtendWith(TempDirectory.class) @ExtendWith(TempDirectory.class)
class XmlUserV1UpdateStepTest { class XmlUserV1UpdateStepTest {
@Mock
SCMContextProvider contextProvider;
@Mock @Mock
XmlUserDAO userDAO; XmlUserDAO userDAO;
@@ -47,13 +38,12 @@ class XmlUserV1UpdateStepTest {
XmlUserV1UpdateStep updateStep; XmlUserV1UpdateStep updateStep;
ConfigurationEntryStoreFactory storeFactory; private UpdateStepTestUtil testUtil;
@BeforeEach @BeforeEach
void mockScmHome(@TempDirectory.TempDir Path tempDir) { void mockScmHome(@TempDirectory.TempDir Path tempDir) {
when(contextProvider.getBaseDirectory()).thenReturn(tempDir.toFile()); testUtil = new UpdateStepTestUtil(tempDir);
storeFactory = new JAXBConfigurationEntryStoreFactory(contextProvider, null, new DefaultKeyGenerator()); updateStep = new XmlUserV1UpdateStep(testUtil.getContextProvider(), userDAO, testUtil.getStoreFactory());
updateStep = new XmlUserV1UpdateStep(contextProvider, userDAO, storeFactory);
} }
@Nested @Nested
@@ -65,20 +55,15 @@ class XmlUserV1UpdateStepTest {
} }
@BeforeEach @BeforeEach
void createUserV1XML(@TempDirectory.TempDir Path tempDir) throws IOException { void createUserV1XML() throws IOException {
Path configDir = tempDir.resolve("config"); testUtil.copyConfigFile("sonia/scm/update/user/users.xml");
Files.createDirectories(configDir);
copyTestDatabaseFile(configDir, "users.xml");
} }
@Test @Test
void shouldCreateNewPermissionsForV1AdminUser() throws JAXBException { void shouldCreateNewPermissionsForV1AdminUser() throws JAXBException {
updateStep.doUpdate(); updateStep.doUpdate();
Optional<AssignedPermission> assignedPermission = Optional<AssignedPermission> assignedPermission =
storeFactory testUtil.getStoreForConfigFile("security")
.withType(AssignedPermission.class)
.withName("security")
.build()
.getAll() .getAll()
.values() .values()
.stream() .stream()
@@ -111,9 +96,9 @@ class XmlUserV1UpdateStepTest {
} }
@Test @Test
void shouldExtractProperties(@TempDirectory.TempDir Path tempDir) throws JAXBException { void shouldExtractProperties() throws JAXBException {
updateStep.doUpdate(); updateStep.doUpdate();
Path propertiesFile = tempDir.resolve("config").resolve("user-properties-v1.xml"); Path propertiesFile = testUtil.getFile("user-properties-v1.xml");
assertThat(propertiesFile) assertThat(propertiesFile)
.exists(); .exists();
assertThat(linesOf(propertiesFile.toFile())) 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 @Test
void shouldNotFailForMissingConfigDir() throws JAXBException { void shouldNotFailForMissingConfigDir() throws JAXBException {
updateStep.doUpdate(); updateStep.doUpdate();