diff --git a/src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs index 8481cd3295..8859bd03e0 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/HotfixBranchScenarios.cs @@ -3,6 +3,7 @@ using GitVersionCore.Tests; using LibGit2Sharp; using NUnit.Framework; +using GitVersion; [TestFixture] public class HotfixBranchScenarios : TestBase @@ -123,4 +124,116 @@ public void PatchOlderReleaseExample() fixture.AssertFullSemver("2.1.0-alpha.7"); } } + + /// + /// Create a feature branch from a hotfix branch, and merge back, then delete it + /// + [Test] + public void FeatureOnHotfix_FeatureBranchDeleted() + { + var config = new Config + { + AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, + VersioningMode = VersioningMode.ContinuousDeployment + }; + + using (var fixture = new EmptyRepositoryFixture()) + { + + var release450 = "release/4.5.0"; + var hotfix451 = "hotfix/4.5.1"; + var support45 = "support/4.5"; + var tag450 = "4.5.0"; + var featureBranch = "feature/some-bug-fix"; + + fixture.Repository.MakeACommit("initial"); + fixture.Repository.CreateBranch("develop"); + Commands.Checkout(fixture.Repository, "develop"); + + // create release branch + fixture.Repository.CreateBranch(release450); + Commands.Checkout(fixture.Repository, release450); + fixture.AssertFullSemver(config, "4.5.0-beta.0"); + fixture.Repository.MakeACommit("blabla"); + Commands.Checkout(fixture.Repository, "develop"); + fixture.Repository.MergeNoFF(release450, Generate.SignatureNow()); + Commands.Checkout(fixture.Repository, "master"); + fixture.Repository.MergeNoFF(release450, Generate.SignatureNow()); + + // create support branch + fixture.Repository.CreateBranch(support45); + Commands.Checkout(fixture.Repository, support45); + fixture.Repository.ApplyTag(tag450); + fixture.AssertFullSemver(config, "4.5.0"); + + // create hotfix branch + fixture.Repository.CreateBranch(hotfix451); + Commands.Checkout(fixture.Repository, hotfix451); + + // feature branch from hotfix + fixture.Repository.CreateBranch(featureBranch); + Commands.Checkout(fixture.Repository, featureBranch); + fixture.Repository.MakeACommit("blabla"); // commit 1 + Commands.Checkout(fixture.Repository, hotfix451); + fixture.Repository.MergeNoFF(featureBranch, Generate.SignatureNow()); // commit 2 + fixture.Repository.Branches.Remove(featureBranch); + fixture.AssertFullSemver(config, "4.5.1-beta.2"); + } + } + + /// + /// Create a feature branch from a hotfix branch, and merge back, but don't delete it + /// + [Test] + public void FeatureOnHotfix_FeatureBranchNotDeleted() + { + var config = new Config + { + AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, + VersioningMode = VersioningMode.ContinuousDeployment + }; + + using (var fixture = new EmptyRepositoryFixture()) + { + + var release450 = "release/4.5.0"; + var hotfix451 = "hotfix/4.5.1"; + var support45 = "support/4.5"; + var tag450 = "4.5.0"; + var featureBranch = "feature/some-bug-fix"; + + fixture.Repository.MakeACommit("initial"); + fixture.Repository.CreateBranch("develop"); + Commands.Checkout(fixture.Repository, "develop"); + + // create release branch + fixture.Repository.CreateBranch(release450); + Commands.Checkout(fixture.Repository, release450); + fixture.AssertFullSemver(config, "4.5.0-beta.0"); + fixture.Repository.MakeACommit("blabla"); + Commands.Checkout(fixture.Repository, "develop"); + fixture.Repository.MergeNoFF(release450, Generate.SignatureNow()); + Commands.Checkout(fixture.Repository, "master"); + fixture.Repository.MergeNoFF(release450, Generate.SignatureNow()); + + // create support branch + fixture.Repository.CreateBranch(support45); + Commands.Checkout(fixture.Repository, support45); + fixture.Repository.ApplyTag(tag450); + fixture.AssertFullSemver(config, "4.5.0"); + + // create hotfix branch + fixture.Repository.CreateBranch(hotfix451); + Commands.Checkout(fixture.Repository, hotfix451); + + // feature branch from hotfix + fixture.Repository.CreateBranch(featureBranch); + Commands.Checkout(fixture.Repository, featureBranch); + fixture.Repository.MakeACommit("blabla"); // commit 1 + Commands.Checkout(fixture.Repository, hotfix451); + fixture.Repository.MergeNoFF(featureBranch, Generate.SignatureNow()); // commit 2 + fixture.AssertFullSemver(config, "4.5.1-beta.2"); + } + } + } \ No newline at end of file diff --git a/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs b/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs index 59f0a13a84..f7a92bac01 100644 --- a/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs +++ b/src/GitVersionCore.Tests/IntegrationTests/ReleaseBranchScenarios.cs @@ -550,4 +550,77 @@ public void FeatureFromReleaseBranch_ShouldNotResetCount() fixture.AssertFullSemver(config, "2.0.0-beta.16"); } } + + /// + /// Create a feature branch from a release branch, and merge back, then delete it + /// + [Test] + public void FeatureOnRelease_FeatureBranchDeleted() + { + var config = new Config + { + AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, + VersioningMode = VersioningMode.ContinuousDeployment + }; + + using (var fixture = new EmptyRepositoryFixture()) + { + var release450 = "release/4.5.0"; + var featureBranch = "feature/some-bug-fix"; + + fixture.Repository.MakeACommit("initial"); + fixture.Repository.CreateBranch("develop"); + Commands.Checkout(fixture.Repository, "develop"); + + // begin the release branch + fixture.Repository.CreateBranch(release450); + Commands.Checkout(fixture.Repository, release450); + fixture.AssertFullSemver(config, "4.5.0-beta.0"); + + fixture.Repository.CreateBranch(featureBranch); + Commands.Checkout(fixture.Repository, featureBranch); + fixture.Repository.MakeACommit("blabla"); // commit 1 + Commands.Checkout(fixture.Repository, release450); + fixture.Repository.MergeNoFF(featureBranch, Generate.SignatureNow()); // commit 2 + fixture.Repository.Branches.Remove(featureBranch); + + fixture.AssertFullSemver(config, "4.5.0-beta.2"); + } + } + + /// + /// Create a feature branch from a release branch, and merge back, but don't delete it + /// + [Test] + public void FeatureOnRelease_FeatureBranchNotDeleted() + { + var config = new Config + { + AssemblyVersioningScheme = AssemblyVersioningScheme.MajorMinorPatchTag, + VersioningMode = VersioningMode.ContinuousDeployment + }; + + using (var fixture = new EmptyRepositoryFixture()) + { + var release450 = "release/4.5.0"; + var featureBranch = "feature/some-bug-fix"; + + fixture.Repository.MakeACommit("initial"); + fixture.Repository.CreateBranch("develop"); + Commands.Checkout(fixture.Repository, "develop"); + + // begin the release branch + fixture.Repository.CreateBranch(release450); + Commands.Checkout(fixture.Repository, release450); + fixture.AssertFullSemver(config, "4.5.0-beta.0"); + + fixture.Repository.CreateBranch(featureBranch); + Commands.Checkout(fixture.Repository, featureBranch); + fixture.Repository.MakeACommit("blabla"); // commit 1 + Commands.Checkout(fixture.Repository, release450); + fixture.Repository.MergeNoFF(featureBranch, Generate.SignatureNow()); // commit 2 + + fixture.AssertFullSemver(config, "4.5.0-beta.2"); + } + } } \ No newline at end of file