Skip to content
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
51 changes: 50 additions & 1 deletion NGitLab.Mock.Tests/RepositoryMockTests.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
using NGitLab.Models;
using System.Linq;
using System.Threading.Tasks;
using NGitLab.Models;
using NUnit.Framework;

namespace NGitLab.Mock.Tests;
Expand Down Expand Up @@ -219,4 +221,51 @@ public void Test_create_a_new_commit_on_existing_branch()
});
Assert.That(newCommit.Message.Trim(), Is.EqualTo(commitMessage));
}

[Test]
public async Task Test_commit_diff_returns_diff_information()
{
// Arrange
using var server = new GitLabServer();
var user = server.Users.AddNew();
var project = user.Namespace.Projects.AddNew(project => project.Visibility = VisibilityLevel.Internal);
var initCommit = project.Repository.Commit(user, "Initial commit");

var mainCommit = project.Repository.Commit(user, "Main commit");

project.Repository.CreateAndCheckoutBranch("to-be-merged");
project.Repository.Commit(user, "branch commit");
var mr = project.CreateMergeRequest(user, "Merge request commit", "mr description", project.DefaultBranch, "to-be-merged");
mr.Accept(user);

// Act
var client = server.CreateClient(user);
var diff = await client.GetRepository(project.Id).CompareAsync(new(initCommit.Sha, mr.MergeCommitSha!.ToString()));

using (Assert.EnterMultipleScope())
{
// Assert
Assert.That(diff.Diff, Is.Not.Empty);
Assert.That(diff.Commits.Select(c => c.Id), Is.EqualTo([new Sha1(mainCommit.Sha), mr.MergeCommitSha]));
Assert.That(diff.Commit?.Id, Is.EqualTo(mr.MergeCommitSha));
}
}

[Test]
public async Task Test_commit_diff_same_commit_returns_empty_diff()
{
// Arrange
using var server = new GitLabServer();
var user = server.Users.AddNew();
var project = user.Namespace.Projects.AddNew(project => project.Visibility = VisibilityLevel.Internal);
var initCommit = project.Repository.Commit(user, "Initial commit");

// Act & assert
var client = server.CreateClient(user);
var diff = await client.GetRepository(project.Id).CompareAsync(new(initCommit.Sha, initCommit.Sha));

Assert.That(diff.Diff, Is.Empty);
Assert.That(diff.Commits, Is.Empty);
Assert.That(diff.Commit, Is.Null);
}
}
7 changes: 7 additions & 0 deletions NGitLab.Mock/Clients/RepositoryClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,11 @@ private CompareResults CompareLockless(CompareQuery query)
{
var project = GetProject(_projectId, ProjectPermission.View);
var treeChanges = project.Repository.Compare(query.From, query.To);
var commits = project.Repository.GetCommits($"{query.From}..{query.To}")
.Select(c => c.ToCommitClient(project))
.Reverse()
.ToArray();

return new CompareResults()
{
Diff = treeChanges.Select(change
Expand All @@ -161,6 +166,8 @@ private CompareResults CompareLockless(CompareQuery query)
IsDeletedFile = change.Status is ChangeKind.Deleted,
IsRenamedFile = change.Status is ChangeKind.Renamed,
}).ToArray(),
Commit = commits.LastOrDefault(),
Commits = commits,
};
}

Expand Down
Loading