Example #1
0
    public void ShouldNotAllowIncrementOfVersion()
    {
        // When a branch is merged in you want to start building stable packages of that version
        // So we shouldn't bump the version
        var mockCommit = GitToolsTestingExtensions.CreateMockCommit();

        mockCommit.Message.Returns("Merge branch 'release-0.1.5'");
        mockCommit.Parents.Returns(GetParents(true));

        var mockBranch = GitToolsTestingExtensions.CreateMockBranch(MainBranch, mockCommit);
        var branches   = Substitute.For <IBranchCollection>();

        branches.GetEnumerator().Returns(_ => ((IEnumerable <IBranch>) new[] { mockBranch }).GetEnumerator());

        var mockRepository = Substitute.For <IGitRepository>();

        mockRepository.Head.Returns(mockBranch);
        mockRepository.Branches.Returns(branches);
        mockRepository.Commits.Returns(mockBranch.Commits);

        var contextBuilder = new GitVersionContextBuilder().WithRepository(mockRepository);

        contextBuilder.Build();
        var strategy = contextBuilder.ServicesProvider.GetServiceForType <IVersionStrategy, MergeMessageVersionStrategy>();

        var baseVersion = strategy.GetVersions().Single();

        baseVersion.ShouldIncrement.ShouldBe(false);
    }
Example #2
0
    private static void AssertMergeMessage(string message, string expectedVersion, IEnumerable <ICommit> parents, Config config = null)
    {
        var commit = GitToolsTestingExtensions.CreateMockCommit();

        commit.Message.Returns(message);
        commit.Parents.Returns(parents);

        var mockBranch = GitToolsTestingExtensions.CreateMockBranch(MainBranch, commit, GitToolsTestingExtensions.CreateMockCommit());

        var mockRepository = Substitute.For <IGitRepository>();

        mockRepository.Head.Returns(mockBranch);
        mockRepository.Commits.Returns(mockBranch.Commits);

        var contextBuilder = new GitVersionContextBuilder()
                             .WithConfig(config ?? new Config())
                             .WithRepository(mockRepository);

        contextBuilder.Build();
        var strategy = contextBuilder.ServicesProvider.GetServiceForType <IVersionStrategy, MergeMessageVersionStrategy>();

        var baseVersion = strategy.GetVersions().SingleOrDefault();

        if (expectedVersion == null)
        {
            baseVersion.ShouldBe(null);
        }
        else
        {
            baseVersion.ShouldNotBeNull();
            baseVersion.SemanticVersion.ToString().ShouldBe(expectedVersion);
        }
    }
Example #3
0
    public void CanInheritVersioningMode(VersioningMode mode)
    {
        using var fixture = new EmptyRepositoryFixture();

        var config = new ConfigurationBuilder()
                     .Add(new Config {
            VersioningMode = mode
        })
                     .Build();

        const string branchName = MainBranch;

        var mockCommit = GitToolsTestingExtensions.CreateMockCommit();
        var mockBranch = GitToolsTestingExtensions.CreateMockBranch(branchName, mockCommit);

        var branches = Substitute.For <IBranchCollection>();

        branches.GetEnumerator().Returns(_ => ((IEnumerable <IBranch>) new[] { mockBranch }).GetEnumerator());

        var mockRepository = Substitute.For <IGitRepository>();

        mockRepository.Head.Returns(mockBranch);
        mockRepository.Branches.Returns(branches);
        mockRepository.Commits.Returns(mockBranch.Commits);

        var context = GetGitVersionContext(fixture.RepositoryPath, mockRepository, branchName, config);

        context.Configuration.VersioningMode.ShouldBe(mode);
    }
Example #4
0
    public void UsesFirstBranchConfigWhenMultipleMatch()
    {
        using var fixture = new EmptyRepositoryFixture();

        var branchConfig = new BranchConfig
        {
            VersioningMode = VersioningMode.Mainline,
            Increment      = IncrementStrategy.None,
            PreventIncrementOfMergedBranchVersion = false,
            TrackMergeTarget      = false,
            TracksReleaseBranches = false,
            IsReleaseBranch       = false,
            SourceBranches        = new HashSet <string>()
        };
        var config = new ConfigurationBuilder()
                     .Add(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?[/-]"
                        } }
            }
        })
                     .Build();

        var releaseLatestBranch  = GitToolsTestingExtensions.CreateMockBranch("release/latest", GitToolsTestingExtensions.CreateMockCommit());
        var releaseVersionBranch = GitToolsTestingExtensions.CreateMockBranch("release/1.0.0", GitToolsTestingExtensions.CreateMockCommit());

        var branches = Substitute.For <IBranchCollection>();

        branches.GetEnumerator().Returns(_ => ((IEnumerable <IBranch>) new[] { releaseLatestBranch, releaseVersionBranch }).GetEnumerator());

        var mockRepository = Substitute.For <IGitRepository>();

        mockRepository.Branches.Returns(branches);
        mockRepository.Head.Returns(releaseLatestBranch);
        mockRepository.Commits.Returns(releaseLatestBranch.Commits);

        var latestContext = GetGitVersionContext(fixture.RepositoryPath, mockRepository, releaseLatestBranch.Name.Canonical, config);

        latestContext.Configuration.Increment.ShouldBe(IncrementStrategy.None);

        mockRepository.Head.Returns(releaseVersionBranch);
        var versionContext = GetGitVersionContext(fixture.RepositoryPath, mockRepository, releaseVersionBranch.Name.Canonical, config);

        versionContext.Configuration.Increment.ShouldBe(IncrementStrategy.Patch);
    }
Example #5
0
    private GitVersionContextBuilder AddBranch(string branchName)
    {
        var mockCommit = GitToolsTestingExtensions.CreateMockCommit();
        var mockBranch = GitToolsTestingExtensions.CreateMockBranch(branchName, mockCommit);

        var branches = this.repository.Branches.ToList();

        branches.Add(mockBranch);
        this.repository.Branches.GetEnumerator().Returns(_ => ((IEnumerable <IBranch>)branches).GetEnumerator());
        this.repository.Head.Returns(mockBranch);
        return(this);
    }
Example #6
0
    private static IGitRepository CreateRepository()
    {
        var mockCommit = GitToolsTestingExtensions.CreateMockCommit();
        var mockBranch = GitToolsTestingExtensions.CreateMockBranch(TestBase.MainBranch, mockCommit);
        var branches   = Substitute.For <IBranchCollection>();

        branches.GetEnumerator().Returns(_ => ((IEnumerable <IBranch>) new[] { mockBranch }).GetEnumerator());

        var mockRepository = Substitute.For <IGitRepository>();

        mockRepository.Branches.Returns(branches);
        mockRepository.Head.Returns(mockBranch);
        mockRepository.Commits.Returns(mockBranch.Commits);

        return(mockRepository);
    }
Example #7
0
    public void UsesBranchSpecificConfigOverTopLevelDefaults()
    {
        using var fixture = new EmptyRepositoryFixture();

        const string branchName = "develop";
        var          config     = new ConfigurationBuilder()
                                  .Add(new Config
        {
            VersioningMode = VersioningMode.ContinuousDelivery,
            Branches       =
            {
                {
                    branchName, new BranchConfig
                    {
                        VersioningMode = VersioningMode.ContinuousDeployment,
                        Tag            = "alpha"
                    }
                }
            }
        })
                                  .Build();

        var main    = GitToolsTestingExtensions.CreateMockBranch(MainBranch, GitToolsTestingExtensions.CreateMockCommit());
        var develop = GitToolsTestingExtensions.CreateMockBranch(branchName, GitToolsTestingExtensions.CreateMockCommit());

        var branches = Substitute.For <IBranchCollection>();

        branches.GetEnumerator().Returns(_ => ((IEnumerable <IBranch>) new[] { main, develop }).GetEnumerator());

        var mockRepository = Substitute.For <IGitRepository>();

        mockRepository.Head.Returns(develop);
        mockRepository.Branches.Returns(branches);
        mockRepository.Commits.Returns(develop.Commits);

        var context = GetGitVersionContext(fixture.RepositoryPath, mockRepository, branchName, config);

        context.Configuration.Tag.ShouldBe("alpha");
    }