From 5eea6e430e3876e46e919f4cfb4af479deb47457 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 30 Oct 2020 13:30:19 +0100 Subject: [PATCH] Remove code redundancies --- .../repository/spi/GitModifyCommandTest.java | 61 +----------- .../spi/GitModifyCommandTestBase.java | 97 +++++++++++++++++++ .../spi/GitModifyCommand_LFSTest.java | 32 +----- ...ModifyCommand_withEmptyRepositoryTest.java | 63 +----------- ...RepositoryConfigStoreProviderTestUtil.java | 2 +- 5 files changed, 103 insertions(+), 152 deletions(-) create mode 100644 scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTestBase.java diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java index 97abda18a8..e4e09c5bd5 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTest.java @@ -24,55 +24,26 @@ package sonia.scm.repository.spi; -import com.github.sdorra.shiro.ShiroRule; -import com.github.sdorra.shiro.SubjectAware; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.errors.CorruptObjectException; -import org.eclipse.jgit.lib.GpgSigner; import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; -import org.eclipse.jgit.treewalk.CanonicalTreeParser; -import org.junit.BeforeClass; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; import sonia.scm.AlreadyExistsException; import sonia.scm.BadRequestException; import sonia.scm.ConcurrentModificationException; import sonia.scm.NotFoundException; import sonia.scm.repository.GitTestHelper; import sonia.scm.repository.Person; -import sonia.scm.repository.work.NoneCachingWorkingCopyPool; -import sonia.scm.repository.work.WorkdirProvider; -import sonia.scm.web.lfs.LfsBlobStoreFactory; import java.io.File; import java.io.IOException; import java.nio.file.Files; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static sonia.scm.repository.spi.GitRepositoryConfigStoreProviderTestUtil.createGitRepositoryConfigStoreProvider; -@SubjectAware(configuration = "classpath:sonia/scm/configuration/shiro.ini", username = "admin", password = "secret") -public class GitModifyCommandTest extends AbstractGitCommandTestBase { - - @Rule - public TemporaryFolder temporaryFolder = new TemporaryFolder(); - @Rule - public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); - @Rule - public ShiroRule shiro = new ShiroRule(); - - private final LfsBlobStoreFactory lfsBlobStoreFactory = mock(LfsBlobStoreFactory.class); - - @BeforeClass - public static void setSigner() { - GpgSigner.setDefault(new GitTestHelper.SimpleGpgSigner()); - } +public class GitModifyCommandTest extends GitModifyCommandTestBase { @Test public void shouldCreateCommit() throws IOException, GitAPIException { @@ -356,34 +327,4 @@ public class GitModifyCommandTest extends AbstractGitCommandTestBase { assertThat(lastCommit.getRawGpgSignature()).isNullOrEmpty(); } } - - private void assertInTree(TreeAssertions assertions) throws IOException, GitAPIException { - try (Git git = new Git(createContext().open())) { - RevCommit lastCommit = getLastCommit(git); - try (RevWalk walk = new RevWalk(git.getRepository())) { - RevCommit commit = walk.parseCommit(lastCommit); - ObjectId treeId = commit.getTree().getId(); - try (ObjectReader reader = git.getRepository().newObjectReader()) { - assertions.checkAssertions(new CanonicalTreeParser(null, reader, treeId)); - } - } - } - } - - private RevCommit getLastCommit(Git git) throws GitAPIException { - return git.log().setMaxCount(1).call().iterator().next(); - } - - private GitModifyCommand createCommand() { - return new GitModifyCommand( - createContext(), - new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())), - lfsBlobStoreFactory, - createGitRepositoryConfigStoreProvider()); - } - - @FunctionalInterface - private interface TreeAssertions { - void checkAssertions(CanonicalTreeParser treeParser) throws CorruptObjectException; - } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTestBase.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTestBase.java new file mode 100644 index 0000000000..a890a83255 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommandTestBase.java @@ -0,0 +1,97 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.spi; + +import com.github.sdorra.shiro.ShiroRule; +import com.github.sdorra.shiro.SubjectAware; +import org.eclipse.jgit.api.Git; +import org.eclipse.jgit.api.errors.GitAPIException; +import org.eclipse.jgit.errors.CorruptObjectException; +import org.eclipse.jgit.lib.GpgSigner; +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.ObjectReader; +import org.eclipse.jgit.revwalk.RevCommit; +import org.eclipse.jgit.revwalk.RevWalk; +import org.eclipse.jgit.treewalk.CanonicalTreeParser; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.rules.TemporaryFolder; +import sonia.scm.repository.GitTestHelper; +import sonia.scm.repository.work.NoneCachingWorkingCopyPool; +import sonia.scm.repository.work.WorkdirProvider; +import sonia.scm.web.lfs.LfsBlobStoreFactory; + +import java.io.IOException; + +import static org.mockito.Mockito.mock; +import static sonia.scm.repository.spi.GitRepositoryConfigStoreProviderTestUtil.createGitRepositoryConfigStoreProvider; + +@SubjectAware(configuration = "classpath:sonia/scm/configuration/shiro.ini", username = "admin", password = "secret") +class GitModifyCommandTestBase extends AbstractGitCommandTestBase { + + @Rule + public TemporaryFolder temporaryFolder = new TemporaryFolder(); + @Rule + public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); + @Rule + public ShiroRule shiro = new ShiroRule(); + + final LfsBlobStoreFactory lfsBlobStoreFactory = mock(LfsBlobStoreFactory.class); + + @BeforeClass + public static void setSigner() { + GpgSigner.setDefault(new GitTestHelper.SimpleGpgSigner()); + } + + RevCommit getLastCommit(Git git) throws GitAPIException, IOException { + return git.log().setMaxCount(1).call().iterator().next(); + } + + GitModifyCommand createCommand() { + return new GitModifyCommand( + createContext(), + new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())), + lfsBlobStoreFactory, + createGitRepositoryConfigStoreProvider()); + } + + void assertInTree(TreeAssertions assertions) throws IOException, GitAPIException { + try (Git git = new Git(createContext().open())) { + RevCommit lastCommit = getLastCommit(git); + try (RevWalk walk = new RevWalk(git.getRepository())) { + RevCommit commit = walk.parseCommit(lastCommit); + ObjectId treeId = commit.getTree().getId(); + try (ObjectReader reader = git.getRepository().newObjectReader()) { + assertions.checkAssertions(new CanonicalTreeParser(null, reader, treeId)); + } + } + } + } + + @FunctionalInterface + interface TreeAssertions { + void checkAssertions(CanonicalTreeParser treeParser) throws CorruptObjectException; + } +} diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java index ccb0e200c0..955d16965b 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_LFSTest.java @@ -24,22 +24,15 @@ package sonia.scm.repository.spi; -import com.github.sdorra.shiro.ShiroRule; -import com.github.sdorra.shiro.SubjectAware; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.revwalk.RevCommit; import org.junit.AfterClass; import org.junit.BeforeClass; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; import sonia.scm.repository.Person; -import sonia.scm.repository.work.NoneCachingWorkingCopyPool; -import sonia.scm.repository.work.WorkdirProvider; import sonia.scm.store.Blob; import sonia.scm.store.BlobStore; -import sonia.scm.web.lfs.LfsBlobStoreFactory; import java.io.ByteArrayOutputStream; import java.io.File; @@ -50,19 +43,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import static sonia.scm.repository.spi.GitRepositoryConfigStoreProviderTestUtil.createGitRepositoryConfigStoreProvider; -@SubjectAware(configuration = "classpath:sonia/scm/configuration/shiro.ini", username = "admin", password = "secret") -public class GitModifyCommand_LFSTest extends AbstractGitCommandTestBase { - - @Rule - public TemporaryFolder temporaryFolder = new TemporaryFolder(); - @Rule - public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); - @Rule - public ShiroRule shiro = new ShiroRule(); - - private final LfsBlobStoreFactory lfsBlobStoreFactory = mock(LfsBlobStoreFactory.class); +public class GitModifyCommand_LFSTest extends GitModifyCommandTestBase { @BeforeClass public static void registerFilter() { @@ -127,18 +109,6 @@ public class GitModifyCommand_LFSTest extends AbstractGitCommandTestBase { return command.execute(request); } - private RevCommit getLastCommit(Git git) throws GitAPIException { - return git.log().setMaxCount(1).call().iterator().next(); - } - - private GitModifyCommand createCommand() { - return new GitModifyCommand( - createContext(), - new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())), - lfsBlobStoreFactory, - createGitRepositoryConfigStoreProvider()); - } - @Override protected String getZippedRepositoryResource() { return "sonia/scm/repository/spi/scm-git-spi-lfs-test.zip"; diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_withEmptyRepositoryTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_withEmptyRepositoryTest.java index c9307b9578..7877f1a686 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_withEmptyRepositoryTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModifyCommand_withEmptyRepositoryTest.java @@ -24,27 +24,12 @@ package sonia.scm.repository.spi; -import com.github.sdorra.shiro.ShiroRule; -import com.github.sdorra.shiro.SubjectAware; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.errors.CorruptObjectException; -import org.eclipse.jgit.lib.GpgSigner; -import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.ObjectReader; import org.eclipse.jgit.lib.Ref; import org.eclipse.jgit.revwalk.RevCommit; -import org.eclipse.jgit.revwalk.RevWalk; -import org.eclipse.jgit.treewalk.CanonicalTreeParser; -import org.junit.BeforeClass; -import org.junit.Rule; import org.junit.Test; -import org.junit.rules.TemporaryFolder; -import sonia.scm.repository.GitTestHelper; import sonia.scm.repository.Person; -import sonia.scm.repository.work.NoneCachingWorkingCopyPool; -import sonia.scm.repository.work.WorkdirProvider; -import sonia.scm.web.lfs.LfsBlobStoreFactory; import java.io.File; import java.io.IOException; @@ -52,25 +37,8 @@ import java.nio.file.Files; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.mock; -import static sonia.scm.repository.spi.GitRepositoryConfigStoreProviderTestUtil.createGitRepositoryConfigStoreProvider; -@SubjectAware(configuration = "classpath:sonia/scm/configuration/shiro.ini", username = "admin", password = "secret") -public class GitModifyCommand_withEmptyRepositoryTest extends AbstractGitCommandTestBase { - - @Rule - public TemporaryFolder temporaryFolder = new TemporaryFolder(); - @Rule - public BindTransportProtocolRule transportProtocolRule = new BindTransportProtocolRule(); - @Rule - public ShiroRule shiro = new ShiroRule(); - - private final LfsBlobStoreFactory lfsBlobStoreFactory = mock(LfsBlobStoreFactory.class); - - @BeforeClass - public static void setSigner() { - GpgSigner.setDefault(new GitTestHelper.SimpleGpgSigner()); - } +public class GitModifyCommand_withEmptyRepositoryTest extends GitModifyCommandTestBase { @Test public void shouldCreateNewFileInEmptyRepository() throws IOException, GitAPIException { @@ -133,20 +101,8 @@ public class GitModifyCommand_withEmptyRepositoryTest extends AbstractGitCommand return "sonia/scm/repository/spi/scm-git-empty-repo.zip"; } - private void assertInTree(TreeAssertions assertions) throws IOException, GitAPIException { - try (Git git = new Git(createContext().open())) { - RevCommit lastCommit = getLastCommit(git); - try (RevWalk walk = new RevWalk(git.getRepository())) { - RevCommit commit = walk.parseCommit(lastCommit); - ObjectId treeId = commit.getTree().getId(); - try (ObjectReader reader = git.getRepository().newObjectReader()) { - assertions.checkAssertions(new CanonicalTreeParser(null, reader, treeId)); - } - } - } - } - - private RevCommit getLastCommit(Git git) throws GitAPIException, IOException { + @Override + RevCommit getLastCommit(Git git) throws GitAPIException, IOException { return git.log().setMaxCount(1).all().call().iterator().next(); } @@ -163,17 +119,4 @@ public class GitModifyCommand_withEmptyRepositoryTest extends AbstractGitCommand request.setAuthor(new Person("Dirk Gently", "dirk@holistic.det")); return request; } - - private GitModifyCommand createCommand() { - return new GitModifyCommand( - createContext(), - new SimpleGitWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())), - lfsBlobStoreFactory, - createGitRepositoryConfigStoreProvider()); - } - - @FunctionalInterface - private interface TreeAssertions { - void checkAssertions(CanonicalTreeParser treeParser) throws CorruptObjectException; - } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitRepositoryConfigStoreProviderTestUtil.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitRepositoryConfigStoreProviderTestUtil.java index 1229c5f3cc..196b5258de 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitRepositoryConfigStoreProviderTestUtil.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitRepositoryConfigStoreProviderTestUtil.java @@ -36,7 +36,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class GitRepositoryConfigStoreProviderTestUtil { +class GitRepositoryConfigStoreProviderTestUtil { static GitRepositoryConfigStoreProvider createGitRepositoryConfigStoreProvider() { GitRepositoryConfigStoreProvider gitRepositoryConfigStoreProvider = mock(GitRepositoryConfigStoreProvider.class);