From 97ad3897eda38043200d7dabb3a5496ba7235fb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 22 May 2019 15:31:35 +0200 Subject: [PATCH] Correct instance mocks --- .../update/XmlRepositoryV1UpdateStep.java | 2 +- .../update/MigrationStrategyMock.java | 5 +- .../update/XmlRepositoryV1UpdateStepTest.java | 74 ++++++++++++++++++- 3 files changed, 75 insertions(+), 6 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStep.java b/scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStep.java index 7ce7fe463c..d21eb079fa 100644 --- a/scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStep.java +++ b/scm-webapp/src/main/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStep.java @@ -76,7 +76,7 @@ public class XmlRepositoryV1UpdateStep implements UpdateStep { v1Repository.contact, v1Repository.description, createPermissions(v1Repository)); - repositoryDao.add(repository); + repositoryDao.add(repository, destination); } private Path handleDataDirectory(V1Repository v1Repository) { diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyMock.java b/scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyMock.java index 79b79abb41..e0ee39880f 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyMock.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/update/MigrationStrategyMock.java @@ -1,6 +1,7 @@ package sonia.scm.repository.update; import com.google.inject.Injector; +import sonia.scm.repository.update.MigrationStrategy.Instance; import java.util.HashMap; import java.util.Map; @@ -12,12 +13,12 @@ import static org.mockito.Mockito.when; class MigrationStrategyMock { static Injector init() { - Map mocks = new HashMap<>(); + Map mocks = new HashMap<>(); Injector mock = mock(Injector.class); when( mock.getInstance(any(Class.class))) .thenAnswer( - invocationOnMock -> mocks.getOrDefault(invocationOnMock.getArgument(0), mock(invocationOnMock.getArgument(0))) + invocationOnMock -> mocks.computeIfAbsent(invocationOnMock.getArgument(0), key -> mock((Class) key)) ); return mock; } diff --git a/scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStepTest.java b/scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStepTest.java index 095155f5e8..c9a64a10e4 100644 --- a/scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStepTest.java +++ b/scm-webapp/src/test/java/sonia/scm/repository/update/XmlRepositoryV1UpdateStepTest.java @@ -49,6 +49,8 @@ class XmlRepositoryV1UpdateStepTest { @Captor ArgumentCaptor storeCaptor; + @Captor + ArgumentCaptor locationCaptor; @InjectMocks XmlRepositoryV1UpdateStep updateStep; @@ -61,6 +63,61 @@ class XmlRepositoryV1UpdateStepTest { @Nested class WithExistingDatabase { + /** + * Creates the following v1 repositories in the temp dir: + *
+     * 
+     *     
+     *     arthur@dent.uk
+     *     1558423492071
+     *     A repository with two folders.
+     *     3b91caa5-59c3-448f-920b-769aaa56b761
+     *     one/directory
+     *     false
+     *     false
+     *     git
+     * 
+     * 
+     *     
+     *     arthur@dent.uk
+     *     1558423543716
+     *     A repository in deeply nested folders.
+     *     c1597b4f-a9f0-49f7-ad1f-37d3aae1c55f
+     *     some/more/directories/than/one
+     *     false
+     *     false
+     *     git
+     * 
+     * 
+     *     
+     *     arthur@dent.uk
+     *     1558423440258
+     *     A simple repository without directories.
+     *     454972da-faf9-4437-b682-dc4a4e0aa8eb
+     *     1558425918578
+     *     simple
+     *     
+     *         true
+     *         mice
+     *         WRITE
+     *     
+     *     
+     *         false
+     *         dent
+     *         OWNER
+     *     
+     *     
+     *         false
+     *         trillian
+     *         READ
+     *     
+     *     false
+     *     false
+     *     git
+     *     http://localhost:8081/scm/git/simple
+     * 
+     * 
+ */ @BeforeEach void createV1Home(@TempDirectory.TempDir Path tempDir) throws IOException { ZippedRepositoryTestBase.extract(tempDir.toFile(), "sonia/scm/repository/update/scm-home.v1.zip"); @@ -68,11 +125,11 @@ class XmlRepositoryV1UpdateStepTest { @BeforeEach void captureStoredRepositories() { - doNothing().when(repositoryDAO).add(storeCaptor.capture()); + doNothing().when(repositoryDAO).add(storeCaptor.capture(), locationCaptor.capture()); } @BeforeEach - void createMigrationPlan(@TempDirectory.TempDir Path tempDir) { + void createMigrationPlan() { lenient().when(migrationStrategyDao.get("3b91caa5-59c3-448f-920b-769aaa56b761")).thenReturn(of(MOVE)); lenient().when(migrationStrategyDao.get("c1597b4f-a9f0-49f7-ad1f-37d3aae1c55f")).thenReturn(of(COPY)); lenient().when(migrationStrategyDao.get("454972da-faf9-4437-b682-dc4a4e0aa8eb")).thenReturn(of(INLINE)); @@ -81,7 +138,7 @@ class XmlRepositoryV1UpdateStepTest { @Test void shouldCreateNewRepositories() throws JAXBException { updateStep.doUpdate(); - verify(repositoryDAO, times(3)).add(any()); + verify(repositoryDAO, times(3)).add(any(), any()); } @Test @@ -147,6 +204,17 @@ class XmlRepositoryV1UpdateStepTest { new RepositoryPermission("trillian", "READ", false) ); } + + @Test + void shouldUseDirectoryFromStrategy(@TempDirectory.TempDir Path tempDir) throws JAXBException { + Path targetDir = tempDir.resolve("someDir"); + MigrationStrategy.Instance strategyMock = injectorMock.getInstance(InlineMigrationStrategy.class); + when(strategyMock.migrate("454972da-faf9-4437-b682-dc4a4e0aa8eb", "simple", "git")).thenReturn(targetDir); + + updateStep.doUpdate(); + + assertThat(locationCaptor.getAllValues()).contains(targetDir); + } } @Test