From 88fb31c47b2893359487009c4939f6bf91438de5 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Tue, 7 Jan 2020 15:49:35 +0100 Subject: [PATCH] Add unit test for diff command This new tests ensures, that changes on a feature branch will be shown in a diff even though the integration branch has been merged into the feature branch. --- .../repository/spi/GitDiffCommandTest.java | 25 ++++++++++++++++++ .../scm/repository/spi/scm-git-spi-test.zip | Bin 36171 -> 37734 bytes 2 files changed, 25 insertions(+) diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java index 52932e83ae..26d6fc7c13 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitDiffCommandTest.java @@ -37,6 +37,20 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { "+++ b/f.txt\n" + "@@ -0,0 +1 @@\n" + "+f\n"; + public static final String DIFF_FILE_PARTIAL_MERGE = "diff --git a/a.txt b/a.txt\n" + + "index 7898192..8cd63ec 100644\n" + + "--- a/a.txt\n" + + "+++ b/a.txt\n" + + "@@ -1 +1,2 @@\n" + + " a\n" + + "+change\n" + + "diff --git a/b.txt b/b.txt\n" + + "index 6178079..09ccdf0 100644\n" + + "--- a/b.txt\n" + + "+++ b/b.txt\n" + + "@@ -1 +1,2 @@\n" + + " b\n" + + "+change\n"; @Test public void diffForOneRevisionShouldCreateDiff() throws IOException { @@ -91,4 +105,15 @@ public class GitDiffCommandTest extends AbstractGitCommandTestBase { gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); assertEquals(DIFF_FILE_A_MULTIPLE_REVISIONS, output.toString()); } + + @Test + public void diffBetweenTwoBranchesWithMergedIntegrationBranchShouldCreateDiffOfAllIncomingChanges() throws IOException { + GitDiffCommand gitDiffCommand = new GitDiffCommand(createContext(), repository); + DiffCommandRequest diffCommandRequest = new DiffCommandRequest(); + diffCommandRequest.setRevision("partially_merged"); + diffCommandRequest.setAncestorChangeset("master"); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + gitDiffCommand.getDiffResult(diffCommandRequest).accept(output); + assertEquals(DIFF_FILE_PARTIAL_MERGE, output.toString()); + } } diff --git a/scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-test.zip b/scm-plugins/scm-git-plugin/src/test/resources/sonia/scm/repository/spi/scm-git-spi-test.zip index 8e43da1d828d94bc3f0bbe423d6488c88c52e5bf..da166155a780700c719e046b5070e591b4434371 100644 GIT binary patch delta 17224 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 UJd=m`)v{W)5U%Tv!K;k@7n<2Jwg3PC