Skip to content
This repository was archived by the owner on Jun 27, 2019. It is now read-only.

Backported some fixes from GitVersion #26

Merged
merged 1 commit into from
Jan 27, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
288 changes: 158 additions & 130 deletions src/GitTools.Core.Tests/GitRepositoryTests.cs
Original file line number Diff line number Diff line change
@@ -1,131 +1,159 @@
namespace GitTools.Tests
{
using Git;
using GitTools.Git;
using LibGit2Sharp;
using NUnit.Framework;
using Shouldly;
using Testing;

public class GitHelperTests
{
[Test]
public void NormalisationOfPullRequestsWithFetch()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();
var commit = fixture.Repository.CreatePullRequestRef("feature/foo", "master", prNumber: 3);
using (var localFixture = fixture.CloneRepository())
{
localFixture.Checkout(commit.Sha);
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: string.Empty);

var normalisedPullBranch = localFixture.Repository.Branches["pull/3/merge"];
normalisedPullBranch.ShouldNotBe(null);
}
}
}

[Test]
public void NormalisationOfPullRequestsWithoutFetch()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();
var commit = fixture.Repository.CreatePullRequestRef("feature/foo", "master", prNumber: 3, allowFastFowardMerge: true);
using (var localFixture = fixture.CloneRepository())
{
localFixture.Checkout(commit.Sha);
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: true, currentBranch: "refs/pull/3/merge");

var normalisedPullBranch = localFixture.Repository.Branches["pull/3/merge"];
normalisedPullBranch.ShouldNotBe(null);
}
}
}

[Test]
public void UpdatesLocalBranchesWhen()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();
using (var localFixture = fixture.CloneRepository())
{
localFixture.Checkout("feature/foo");
// Advance remote
var advancedCommit = fixture.Repository.MakeACommit();
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: null);

var normalisedBranch = localFixture.Repository.Branches["feature/foo"];
normalisedBranch.ShouldNotBe(null);
normalisedBranch.Tip.Sha.ShouldBe(advancedCommit.Sha);
}
}
}

[Test]
public void UpdatesCurrentBranch()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();
fixture.Repository.Checkout(fixture.Repository.CreateBranch("develop"));
fixture.Repository.MakeACommit();
fixture.Repository.Checkout("master");
using (var localFixture = fixture.CloneRepository())
{
// Advance remote
fixture.Repository.Checkout("develop");
var advancedCommit = fixture.Repository.MakeACommit();
localFixture.Repository.Network.Fetch(localFixture.Repository.Network.Remotes["origin"]);
localFixture.Repository.Checkout(advancedCommit.Sha);
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: "ref/heads/develop");

var normalisedBranch = localFixture.Repository.Branches["develop"];
normalisedBranch.ShouldNotBe(null);
normalisedBranch.Tip.Sha.ShouldBe(advancedCommit.Sha);
localFixture.Repository.Head.Tip.Sha.ShouldBe(advancedCommit.Sha);
}
}
}

[Test]
public void ShouldNotChangeBranchWhenNormalizingTheDirectory()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeATaggedCommit("v1.0.0");

fixture.Repository.Checkout(fixture.Repository.CreateBranch("develop"));
var lastCommitOnDevelop = fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();

using (var localFixture = fixture.CloneRepository())
{
localFixture.Repository.Checkout("origin/develop");

// Another commit on feature/foo will force an update
fixture.Checkout("feature/foo");
fixture.Repository.MakeACommit();

GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: null);

localFixture.Repository.Head.Tip.Sha.ShouldBe(lastCommitOnDevelop.Sha);
}
}
}
}
namespace GitTools.Tests
{
using GitTools.Git;
using LibGit2Sharp;
using NUnit.Framework;
using Shouldly;
using Testing;

public class GitHelperTests
{
[Test]
public void NormalisationOfPullRequestsWithFetch()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();
var commit = fixture.Repository.CreatePullRequestRef("feature/foo", "master", prNumber: 3);
using (var localFixture = fixture.CloneRepository())
{
localFixture.Checkout(commit.Sha);
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: string.Empty);

var normalisedPullBranch = localFixture.Repository.Branches["pull/3/merge"];
normalisedPullBranch.ShouldNotBe(null);
}
}
}

[Test]
public void NormalisationOfTag()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();

fixture.BranchTo("release/2.0.0");
fixture.MakeACommit();
fixture.MakeATaggedCommit("2.0.0-rc.1");
fixture.Checkout("master");
fixture.MergeNoFF("release/2.0.0");
fixture.Repository.Branches.Remove(fixture.Repository.Branches["release/2.0.0"]);
var remoteTagSha = fixture.Repository.Tags["2.0.0-rc.1"].Target.Sha;

using (var localFixture = fixture.CloneRepository())
{
localFixture.Checkout(remoteTagSha);
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: string.Empty);

localFixture.Repository.Head.FriendlyName.ShouldBe("(no branch)");
localFixture.Repository.Head.Tip.Sha.ShouldBe(remoteTagSha);
}
}
}

[Test]
public void NormalisationOfPullRequestsWithoutFetch()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();
var commit = fixture.Repository.CreatePullRequestRef("feature/foo", "master", prNumber: 3, allowFastFowardMerge: true);
using (var localFixture = fixture.CloneRepository())
{
localFixture.Checkout(commit.Sha);
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: true, currentBranch: "refs/pull/3/merge");

var normalisedPullBranch = localFixture.Repository.Branches["pull/3/merge"];
normalisedPullBranch.ShouldNotBe(null);
}
}
}

[Test]
public void UpdatesLocalBranchesWhen()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();
using (var localFixture = fixture.CloneRepository())
{
localFixture.Checkout("feature/foo");
// Advance remote
var advancedCommit = fixture.Repository.MakeACommit();
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: null);

var normalisedBranch = localFixture.Repository.Branches["feature/foo"];
normalisedBranch.ShouldNotBe(null);
normalisedBranch.Tip.Sha.ShouldBe(advancedCommit.Sha);
}
}
}

[Test]
public void UpdatesCurrentBranch()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeACommit();
fixture.Repository.Checkout(fixture.Repository.CreateBranch("develop"));
fixture.Repository.MakeACommit();
fixture.Repository.Checkout("master");
using (var localFixture = fixture.CloneRepository())
{
// Advance remote
fixture.Repository.Checkout("develop");
var advancedCommit = fixture.Repository.MakeACommit();
localFixture.Repository.Network.Fetch(localFixture.Repository.Network.Remotes["origin"]);
localFixture.Repository.Checkout(advancedCommit.Sha);
GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: "ref/heads/develop");

var normalisedBranch = localFixture.Repository.Branches["develop"];
normalisedBranch.ShouldNotBe(null);
normalisedBranch.Tip.Sha.ShouldBe(advancedCommit.Sha);
localFixture.Repository.Head.Tip.Sha.ShouldBe(advancedCommit.Sha);
}
}
}

[Test]
public void ShouldNotChangeBranchWhenNormalizingTheDirectory()
{
using (var fixture = new EmptyRepositoryFixture())
{
fixture.Repository.MakeATaggedCommit("v1.0.0");

fixture.Repository.Checkout(fixture.Repository.CreateBranch("develop"));
var lastCommitOnDevelop = fixture.Repository.MakeACommit();

fixture.Repository.Checkout(fixture.Repository.CreateBranch("feature/foo"));
fixture.Repository.MakeACommit();

using (var localFixture = fixture.CloneRepository())
{
localFixture.Repository.Checkout("origin/develop");

// Another commit on feature/foo will force an update
fixture.Checkout("feature/foo");
fixture.Repository.MakeACommit();

GitRepositoryHelper.NormalizeGitDirectory(localFixture.RepositoryPath, new AuthenticationInfo(), noFetch: false, currentBranch: null);

localFixture.Repository.Head.Tip.Sha.ShouldBe(lastCommitOnDevelop.Sha);
}
}
}
}
}
Loading