public void Override_using_tag_with_a_prerelease() { var commit = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch }, Tags = new MockTagCollection { new MockTag { NameEx = "0.1.0-beta1", TargetEx = commit } } }; var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); Assert.AreEqual(0, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidScrubber); }
public void Should_throw_if_head_isnt_a_merge_commit_and_no_override_tag_is_found() { var commit = new MockCommit { MessageEx = "Not a merge commit", CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch, } }; var exception = Assert.Throws <WarningException>(() => { finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); }); Assert.AreEqual("The head of master should always be a merge commit if you follow gitflow. Please create one or work around this by tagging the commit with SemVer compatible Id.", exception.Message); }
[Ignore] //TODO Delete? public void Commit_on_develop_and_previous_commit_on_master_is_a_hotfix() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder(); var mockBranch = new MockBranch("develop") { commitOnDevelop }; var repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockMergeCommit { MessageEx = "hotfix-0.1.1", CommitterEx = 2.Seconds().Ago().ToSignature() } }, mockBranch }, }; var version = finder.FindVersion(new GitVersionContext(repository, mockBranch, new Config())); Assert.AreEqual(2, version.Minor, "Minor should be master.Minor+1"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void CanInheritVersioningMode(VersioningMode mode) { var config = new Config { VersioningMode = mode }; config.Reset(); var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch } }; var context = new GitVersionContext(mockRepository, log, mockBranch, config); context.Configuration.VersioningMode.ShouldBe(mode); }
public void CanInheritVersioningMode(VersioningMode mode) { using var fixture = new EmptyRepositoryFixture(); var config = new ConfigurationBuilder() .Add(new Config { VersioningMode = mode }) .Build(); var branchName = "master"; var mockBranch = new MockBranch(branchName) { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Head = mockBranch, Branches = new MockBranchCollection { mockBranch } }; var context = GetGitVersionContext(fixture.RepositoryPath, mockRepository, branchName, config); context.Configuration.VersioningMode.ShouldBe(mode); }
public void CanInheritVersioningMode(VersioningMode mode) { var config = new Config { VersioningMode = mode }; ConfigurationProvider.ApplyDefaultsTo(config); var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch } }; var context = new GitVersionContext(mockRepository, new NullLog(), mockBranch, config); context.Configuration.VersioningMode.ShouldBe(mode); }
public void UsesBranchSpecificConfigOverTopLevelDefaults() { var config = new Config { VersioningMode = VersioningMode.ContinuousDelivery, Branches = { { "develop", new BranchConfig { VersioningMode = VersioningMode.ContinuousDeployment, Tag = "alpha" } } } }; ConfigurationProvider.ApplyDefaultsTo(config); var develop = new MockBranch("develop") { new MockCommit { CommitterEx = Constants.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockCommit { CommitterEx = Constants.SignatureNow() } }, develop } }; var context = new GitVersionContext(mockRepository, develop, config); context.Configuration.Tag.ShouldBe("alpha"); }
public void Commit_on_develop_and_previous_commit_on_master_is_a_hotfix() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder(); var mockBranch = new MockBranch("develop") { commitOnDevelop }; var version = finder.FindVersion(new GitVersionContext { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockMergeCommit { MessageEx = "hotfix-0.1.1", CommitterEx = 2.Seconds().Ago().ToSignature() } }, mockBranch }, }, CurrentBranch = mockBranch }); Assert.AreEqual(2, version.Minor, "Minor should be master.Minor+1"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void UsesFirstBranchConfigWhenMultipleMatch() { var branchConfig = new BranchConfig { VersioningMode = VersioningMode.Mainline, Increment = IncrementStrategy.None, PreventIncrementOfMergedBranchVersion = false, TrackMergeTarget = false, TracksReleaseBranches = false, IsReleaseBranch = false, SourceBranches = new List <string>() }; var config = new Config { VersioningMode = VersioningMode.ContinuousDelivery, Branches = { { "release/latest", new BranchConfig(branchConfig) { Increment = IncrementStrategy.None, Regex = "release/latest" } }, { "release", new BranchConfig(branchConfig) { Increment = IncrementStrategy.Patch, Regex = "releases?[/-]" } } } }; var releaseLatestBranch = new MockBranch("release/latest") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var releaseVersionBranch = new MockBranch("release/1.0.0") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { releaseLatestBranch, releaseVersionBranch }, Head = releaseLatestBranch }; var latestContext = GetGitVersionContext(mockRepository, releaseLatestBranch.CanonicalName, config); latestContext.Configuration.Increment.ShouldBe(IncrementStrategy.None); mockRepository.Head = releaseVersionBranch; var versionContext = GetGitVersionContext(mockRepository, releaseVersionBranch.CanonicalName, config); versionContext.Configuration.Increment.ShouldBe(IncrementStrategy.Patch); }
public void UsesBranchSpecificConfigOverTopLevelDefaults() { var config = new Config { VersioningMode = VersioningMode.ContinuousDelivery }; config.Branches["develop"].VersioningMode = VersioningMode.ContinuousDeployment; config.Branches["develop"].Tag = "alpha"; var develop = new MockBranch("develop") { new MockCommit { CommitterEx = SignatureBuilder.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockCommit { CommitterEx = SignatureBuilder.SignatureNow() } }, develop } }; var context = new GitVersionContext(mockRepository, develop, config); context.Configuration.Tag.ShouldBe("alpha"); }
public void Override_using_tag_with_a_stable_release() { var commit = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch, }, Tags = new MockTagCollection { new MockTag { NameEx = "0.2.0", TargetEx = commit } } }; var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); Assert.AreEqual(0, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public GitVersionContextBuilder AddBranch(string branchName) { var mockBranch = new MockBranch(branchName) { new MockCommit() }; ((MockBranchCollection)repository.Branches).Add(mockBranch); ((MockRepository)repository).Head = mockBranch; return this; }
public void Feature_branch_with_1_commit() { var branchingCommit = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var commitOneOnFeature = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var featureBranch = new MockBranch("featureWithNoCommits") { branchingCommit, commitOneOnFeature }; var finder = new FeatureVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockCommit { MessageEx = "Merge branch 'release-0.2.0'", CommitterEx = 3.Seconds().Ago().ToSignature() } }, featureBranch, new MockBranch("develop") { branchingCommit, new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() } } } }, Commit = commitOneOnFeature, FeatureBranch = featureBranch, FindFirstCommitOnBranchFunc = () => branchingCommit.Id }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(3, version.Version.Minor, "Minor should be master.Minor+1"); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Unstable, version.Version.Stability); Assert.AreEqual(BranchType.Feature, version.BranchType); Assert.AreEqual(branchingCommit.Prefix(), version.Version.Suffix, "Suffix should be the develop commit it was branched from"); Assert.AreEqual(0, version.Version.PreReleasePartOne, "Prerelease is always 0 for feature branches"); }
private GitVersionContextBuilder AddBranch(string branchName) { var mockBranch = new MockBranch(branchName) { new MockCommit() }; ((MockBranchCollection)repository.Branches).Add(mockBranch); ((MockRepository)repository).Head = mockBranch; return(this); }
IRepository CreateRepository() { var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = Constants.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch }, Tags = new MockTagCollection(), Head = mockBranch }; return mockRepository; }
public void First_commit() { var branchingCommit = new MockCommit { MessageEx = "branching commit", }; var firstCommit = new MockCommit { MessageEx = "first commit on hotfix", }; var hotfixBranch = new MockBranch("hotfix-0.1.3") { firstCommit, branchingCommit, }; var finder = new HotfixVersionFinder { HotfixBranch = hotfixBranch, Commit = firstCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { branchingCommit }, hotfixBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.1.3-beta4" } } }, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(1, version.Version.Minor); Assert.AreEqual(3, version.Version.Patch); Assert.AreEqual(Stability.Beta, version.Version.Stability); Assert.AreEqual(BranchType.Hotfix, version.BranchType); Assert.AreEqual(4, version.Version.PreReleasePartOne, "PreReleasePartOne should be set to 4 from the tag"); Assert.AreEqual(1, version.Version.PreReleasePartTwo, "PreReleasePartTwo should be set to 1 since there is a commit on the branch"); }
public void First_commit() { var branchingCommit = new MockCommit { MessageEx = "branching commit", }; var firstCommit = new MockCommit { MessageEx = "first commit on release", }; var releaseBranch = new MockBranch("release-0.5.0") { firstCommit, branchingCommit, }; var finder = new ReleaseVersionFinder { ReleaseBranch = releaseBranch, Commit = firstCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("develop") { branchingCommit }, releaseBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.5.0-alpha5" } } }, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(5, version.Version.Minor); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Alpha, version.Version.Stability); Assert.AreEqual(BranchType.Release, version.BranchType); Assert.AreEqual(5, version.Version.PreReleasePartOne, "PreReleasePartOne should be set to 5 from the tag"); Assert.AreEqual(1, version.Version.PreReleasePartTwo, "PreReleasePartTwo should be set to 1 since there is 1 commit"); }
public void UsesBranchSpecificConfigOverTopLevelDefaults() { using var fixture = new EmptyRepositoryFixture(); var branchName = "develop"; var config = new ConfigurationBuilder() .Add(new Config { VersioningMode = VersioningMode.ContinuousDelivery, Branches = { { branchName, new BranchConfig { VersioningMode = VersioningMode.ContinuousDeployment, Tag = "alpha" } } } }) .Build(); var develop = new MockBranch(branchName) { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Head = develop, Branches = new MockBranchCollection { new MockBranch("master") { new MockCommit { CommitterEx = Generate.SignatureNow() } }, develop } }; var context = GetGitVersionContext(fixture.RepositoryPath, mockRepository, branchName, config); context.Configuration.Tag.ShouldBe("alpha"); }
public void ShouldFindMergeCommit() { var currentBranch = new MockBranch("master") { new MockCommit(), new MockCommit(), new MockMergeCommit { MessageEx = "Merge branch 'release-2.0.0'" } }; var sut = new MergedBranchesWithVersionFinder(new GitVersionContext(null, currentBranch)); var version = sut.GetVersion(); version.ToString().ShouldBe("2.0.0"); }
private Core.Pipeline.Pipeline MockPipeline(params GroupDefinition[] groupDefinitions) { var treeBuilder = TreeBuilderTests.Construct(groupDefinitions); var masterBranch = new MockBranch("master"); var ciDefinition = new MockBuildDefinition("1", "ci"); var stageBranch = new MockBranch("stage"); var nightlyDefinition = new MockBuildDefinition("2", "nightly"); var branches = new[] { masterBranch, stageBranch }; var definitions = new[] { ciDefinition, nightlyDefinition }; var b1 = Substitute.For <IBuild>(); b1.Id.Returns("1"); b1.Definition.Returns(nightlyDefinition); b1.BranchName.Returns("stage"); var b2 = Substitute.For <IBuild>(); b2.Id.Returns("2"); b2.Definition.Returns(nightlyDefinition); b2.BranchName.Returns("master"); var buildProvider = Substitute.For <IBuildProvider>(); buildProvider.FetchAllBuilds().Returns(x => b1.AsyncYield()); buildProvider.FetchBuildsChangedSince(Arg.Any <DateTime>()).Returns(x => b2.AsyncYield()); buildProvider.FetchExistingBuildDefinitions().Returns(x => ToAsync(definitions)); var branchProvider = Substitute.For <IBranchProvider>(); branchProvider.FetchExistingBranches().Returns(x => ToAsync(branches)); var configuration = Substitute.For <IConfiguration>(); configuration.BuildsToShow.Returns(int.MaxValue); var userIdentityList = Substitute.For <IUserIdentityList>(); var pipeline = new Core.Pipeline.Pipeline(treeBuilder, configuration, userIdentityList); var project = new Project(buildProvider, branchProvider, Substitute.For <IProjectConfiguration>()); pipeline.AddProject(project); return(pipeline); }
public void ShouldFindMergeCommit() { var currentBranch = new MockBranch("master") { new MockCommit(), new MockCommit(), new MockMergeCommit() { MessageEx = "Merge branch 'release-2.0.0'" } }; var sut = new MergedBranchesWithVersionFinder(new GitVersionContext(null, currentBranch)); var version = sut.GetVersion(); version.ToString().ShouldBe("2.0.0"); }
public void UsesFirstBranchConfigWhenMultipleMatch() { var config = new Config { VersioningMode = VersioningMode.ContinuousDelivery, Branches = { { "release/latest", new BranchConfig { Increment = IncrementStrategy.None, Regex = "release/latest", SourceBranches = new List <string>() } }, { "release", new BranchConfig { Increment = IncrementStrategy.Patch, Regex = "releases?[/-]", SourceBranches = new List <string>() } } } }.ApplyDefaults(); var releaseLatestBranch = new MockBranch("release/latest") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var releaseVersionBranch = new MockBranch("release/1.0.0") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { releaseLatestBranch, releaseVersionBranch } }; var latestContext = new GitVersionContext(mockRepository, new NullLog(), releaseLatestBranch, config); latestContext.Configuration.Increment.ShouldBe(IncrementStrategy.None); var versionContext = new GitVersionContext(mockRepository, new NullLog(), releaseVersionBranch, config); versionContext.Configuration.Increment.ShouldBe(IncrementStrategy.Patch); }
public void No_commits() { var branchingCommit = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var hotfixBranch = new MockBranch("hotfix-0.1.4") { branchingCommit, }; var finder = new HotfixVersionFinder { HotfixBranch = hotfixBranch, Commit = branchingCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { branchingCommit }, hotfixBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.1.4-alpha5" } } }, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(1, version.Version.Minor); Assert.AreEqual(4, version.Version.Patch); Assert.AreEqual(Stability.Alpha, version.Version.Stability); Assert.AreEqual(BranchType.Hotfix, version.BranchType); Assert.AreEqual(5, version.Version.PreReleasePartOne, "PreReleasePartOne should be set to 5 from the tag"); Assert.IsNull(version.Version.PreReleasePartTwo, "PreReleasePartTwo null since there is no commits"); }
[Ignore] //TODO Delete? public void Commit_on_develop_and_previous_commit_on_master_has_a_tag() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var commitOnMaster = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder(); var develop = new MockBranch("develop") { commitOnDevelop }; var context = new GitVersionContext { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commitOnMaster }, develop }, Tags = new MockTagCollection { new MockTag { TargetEx = commitOnMaster, NameEx = "0.1.0" } } }, CurrentBranch = develop }; var version = finder.FindVersion(context); Assert.AreEqual(2, version.Minor, "Minor should be master.Minor+1"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void ShouldFindMergeCommit() { var currentBranch = new MockBranch("master") { new MockCommit(), new MockCommit(), new MockMergeCommit { MessageEx = "Merge branch 'release-2.0.0'" } }; var sut = new MergedBranchesWithVersionFinder(new GitVersionContext(null, currentBranch, new Config())); SemanticVersion version; sut.TryGetVersion(out version); version.ToString().ShouldBe("2.0.0"); }
public void Pull_branch_with_1_commit_TeamCity() { FakeTeamCityPullrequest(2); var branchingCommit = new MockCommit { MessageEx = "Merge branch 'release-0.2.0'", CommitterEx = 2.Seconds().Ago().ToSignature(), }; var commitOneOnFeature = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var pullBranch = new MockBranch("pull_no_2") { branchingCommit, commitOneOnFeature }; var finder = new PullVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { pullBranch, new MockBranch("master") { branchingCommit, } } }, Commit = commitOneOnFeature, PullBranch = pullBranch, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(3, version.Version.Minor, "Minor should be master.Minor+1"); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Unstable, version.Version.Stability); Assert.AreEqual(BranchType.PullRequest, version.BranchType); Assert.AreEqual("2", version.Version.Suffix); //in TC the branch name will be the pull request no eg 1154 Assert.AreEqual(0, version.Version.PreReleasePartOne, "Prerelease is always 0 for pull requests"); }
public void Commit_on_develop_and_previous_commit_on_master_has_a_tag() { var commitOnDevelop = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature() }; var commitOnMaster = new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new DevelopVersionFinder(); var develop = new MockBranch("develop") { commitOnDevelop }; var context = new GitVersionContext { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { commitOnMaster }, develop }, Tags = new MockTagCollection { new MockTag { TargetEx = commitOnMaster, NameEx = "0.1.0" } } }, CurrentBranch = develop }; var version = finder.FindVersion(context); Assert.AreEqual(2, version.Minor, "Minor should be master.Minor+1"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void CanInheritVersioningMode(VersioningMode mode) { var config = new Config { VersioningMode = mode }; var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = SignatureBuilder.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch } }; var context = new GitVersionContext(mockRepository, mockBranch, config); context.Configuration.VersioningMode.ShouldBe(mode); }
private static IRepository CreateRepository() { var mockBranch = new MockBranch("master") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch }, Tags = new MockTagCollection(), Head = mockBranch }; return(mockRepository); }
public void UsesBranchSpecificConfigOverTopLevelDefaults() { var config = new Config { VersioningMode = VersioningMode.ContinuousDelivery, Branches = { { "develop", new BranchConfig { VersioningMode = VersioningMode.ContinuousDeployment, Tag = "alpha" } } } }; ConfigurationProvider.ApplyDefaultsTo(config); var develop = new MockBranch("develop") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockCommit { CommitterEx = Generate.SignatureNow() } }, develop } }; var context = new GitVersionContext(mockRepository, new NullLog(), develop, config); context.Configuration.Tag.ShouldBe("alpha"); }
public void Hotfix_merge() { var hotfixMergeCommit = new MockMergeCommit { MessageEx = "Merge branch 'hotfix-0.1.5'", CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { hotfixMergeCommit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch, } }; var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); Assert.AreEqual(5, version.Patch, "Should set the patch version to the patch of the latest hotfix merge commit"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void Release_merge() { var commit = new MockMergeCommit { CommitterEx = 2.Seconds().Ago().ToSignature(), MessageEx = "Merge branch 'release-0.2.0'" }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch }, }; var version = finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); Assert.AreEqual(0, version.Patch, "Should set the patch version to 0"); ObjectApprover.VerifyWithJson(version, Scrubbers.GuidAndDateScrubber); }
public void Override_stage_using_tag() { var branchingCommit = new MockCommit { MessageEx = "branching commit", }; var firstCommit = new MockCommit { MessageEx = "first commit on release", }; var releaseBranch = new MockBranch("release-0.4.0") { firstCommit, branchingCommit, }; var finder = new ReleaseVersionFinder { ReleaseBranch = releaseBranch, Commit = firstCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("develop") { branchingCommit }, releaseBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.4.0-RC4" } } }, }; var version = finder.FindVersion(); //tag: 0.4.0-RC1 => Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(4, version.Version.Minor); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.ReleaseCandidate, version.Version.Stability); Assert.AreEqual(BranchType.Release, version.BranchType); Assert.AreEqual(4, version.Version.PreReleasePartOne); }
public void Should_throw_if_head_isnt_a_merge_commit_and_no_override_tag_is_found() { var commit = new MockCommit { MessageEx = "Not a merge commit", CommitterEx = 2.Seconds().Ago().ToSignature() }; var finder = new MasterVersionFinder(); var mockBranch = new MockBranch("master") { commit }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { mockBranch, } }; var exception = Assert.Throws<WarningException>(() => { finder.FindVersion(new GitVersionContext(mockRepository, mockBranch, new Config())); }); Assert.AreEqual("The head of master should always be a merge commit if you follow gitflow. Please create one or work around this by tagging the commit with SemVer compatible Id.", exception.Message); }
public void Feature_branch_with_no_commit() { //this scenario should redirect to the develop finder since there is no diff btw this branch and the develop branch var branchingCommit = new MockCommit { CommitterEx = 1.Seconds().Ago().ToSignature(), }; var featureBranch = new MockBranch("featureWithNoCommits") { branchingCommit }; var finder = new FeatureVersionFinder { Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { new MockCommit { MessageEx = "Merge branch 'release-0.2.0'", CommitterEx = 3.Seconds().Ago().ToSignature() } }, featureBranch, new MockBranch("develop") { branchingCommit, new MockCommit { CommitterEx = 2.Seconds().Ago().ToSignature() } } } }, Commit = branchingCommit, FeatureBranch = featureBranch, FindFirstCommitOnBranchFunc = () => branchingCommit.Id }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(3, version.Version.Minor, "Minor should be master.Minor+1"); Assert.AreEqual(0, version.Version.Patch); Assert.AreEqual(Stability.Unstable, version.Version.Stability); Assert.AreEqual(BranchType.Feature, version.BranchType); Assert.AreEqual(null, version.Version.Suffix); Assert.AreEqual(2, version.Version.PreReleasePartOne, "Should be the number of commits ahead of master"); }
public void Second_commit() { var branchingCommit = new MockCommit { MessageEx = "branchingCommit" }; var secondCommit = new MockCommit { MessageEx = "secondCommit" }; var hotfixBranch = new MockBranch("hotfix-0.1.3") { secondCommit, new MockCommit { MessageEx = "firstCommit" }, branchingCommit, }; var finder = new HotfixVersionFinder { HotfixBranch = hotfixBranch, Commit = secondCommit, Repository = new MockRepository { Branches = new MockBranchCollection { new MockBranch("master") { branchingCommit }, hotfixBranch }, Tags = new MockTagCollection { new MockTag { TargetEx = branchingCommit, NameEx = "0.1.3-alpha5" } } }, }; var version = finder.FindVersion(); Assert.AreEqual(0, version.Version.Major); Assert.AreEqual(1, version.Version.Minor); Assert.AreEqual(3, version.Version.Patch); Assert.AreEqual(Stability.Alpha, version.Version.Stability); Assert.AreEqual(BranchType.Hotfix, version.BranchType); Assert.AreEqual(5, version.Version.PreReleasePartOne, "PreReleasePartOne should be 5 from the tag"); Assert.AreEqual(2, version.Version.PreReleasePartTwo, "PreReleasePartTwo should be set to 2 since there is 2 commits on the branch"); }
public void UsesFirstBranchConfigWhenMultipleMatch() { var config = new Config { VersioningMode = VersioningMode.ContinuousDelivery, Branches = { { "release/latest", new BranchConfig { Increment = IncrementStrategy.None, Regex = "release/latest" } }, { "release", new BranchConfig { Increment = IncrementStrategy.Patch, Regex = "releases?[/-]" } } } }.ApplyDefaults(); var releaseLatestBranch = new MockBranch("release/latest") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var releaseVersionBranch = new MockBranch("release/1.0.0") { new MockCommit { CommitterEx = Generate.SignatureNow() } }; var mockRepository = new MockRepository { Branches = new MockBranchCollection { releaseLatestBranch, releaseVersionBranch } }; var latestContext = new GitVersionContext(mockRepository, releaseLatestBranch, config); latestContext.Configuration.Increment.ShouldBe(IncrementStrategy.None); var versionContext = new GitVersionContext(mockRepository, releaseVersionBranch, config); versionContext.Configuration.Increment.ShouldBe(IncrementStrategy.Patch); }