Skip to content

Commit 42f93ea

Browse files
chore: Add Commits to Repository Mock's compare result (#1049)
chore: Add Commits to Repository Mock's "Compare" results
1 parent fd7c029 commit 42f93ea

File tree

2 files changed

+57
-1
lines changed

2 files changed

+57
-1
lines changed

NGitLab.Mock.Tests/RepositoryMockTests.cs

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using NGitLab.Models;
1+
using System.Linq;
2+
using System.Threading.Tasks;
3+
using NGitLab.Models;
24
using NUnit.Framework;
35

46
namespace NGitLab.Mock.Tests;
@@ -219,4 +221,51 @@ public void Test_create_a_new_commit_on_existing_branch()
219221
});
220222
Assert.That(newCommit.Message.Trim(), Is.EqualTo(commitMessage));
221223
}
224+
225+
[Test]
226+
public async Task Test_commit_diff_returns_diff_information()
227+
{
228+
// Arrange
229+
using var server = new GitLabServer();
230+
var user = server.Users.AddNew();
231+
var project = user.Namespace.Projects.AddNew(project => project.Visibility = VisibilityLevel.Internal);
232+
var initCommit = project.Repository.Commit(user, "Initial commit");
233+
234+
var mainCommit = project.Repository.Commit(user, "Main commit");
235+
236+
project.Repository.CreateAndCheckoutBranch("to-be-merged");
237+
project.Repository.Commit(user, "branch commit");
238+
var mr = project.CreateMergeRequest(user, "Merge request commit", "mr description", project.DefaultBranch, "to-be-merged");
239+
mr.Accept(user);
240+
241+
// Act
242+
var client = server.CreateClient(user);
243+
var diff = await client.GetRepository(project.Id).CompareAsync(new(initCommit.Sha, mr.MergeCommitSha!.ToString()));
244+
245+
using (Assert.EnterMultipleScope())
246+
{
247+
// Assert
248+
Assert.That(diff.Diff, Is.Not.Empty);
249+
Assert.That(diff.Commits.Select(c => c.Id), Is.EqualTo([new Sha1(mainCommit.Sha), mr.MergeCommitSha]));
250+
Assert.That(diff.Commit?.Id, Is.EqualTo(mr.MergeCommitSha));
251+
}
252+
}
253+
254+
[Test]
255+
public async Task Test_commit_diff_same_commit_returns_empty_diff()
256+
{
257+
// Arrange
258+
using var server = new GitLabServer();
259+
var user = server.Users.AddNew();
260+
var project = user.Namespace.Projects.AddNew(project => project.Visibility = VisibilityLevel.Internal);
261+
var initCommit = project.Repository.Commit(user, "Initial commit");
262+
263+
// Act & assert
264+
var client = server.CreateClient(user);
265+
var diff = await client.GetRepository(project.Id).CompareAsync(new(initCommit.Sha, initCommit.Sha));
266+
267+
Assert.That(diff.Diff, Is.Empty);
268+
Assert.That(diff.Commits, Is.Empty);
269+
Assert.That(diff.Commit, Is.Null);
270+
}
222271
}

NGitLab.Mock/Clients/RepositoryClient.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,11 @@ private CompareResults CompareLockless(CompareQuery query)
150150
{
151151
var project = GetProject(_projectId, ProjectPermission.View);
152152
var treeChanges = project.Repository.Compare(query.From, query.To);
153+
var commits = project.Repository.GetCommits($"{query.From}..{query.To}")
154+
.Select(c => c.ToCommitClient(project))
155+
.Reverse()
156+
.ToArray();
157+
153158
return new CompareResults()
154159
{
155160
Diff = treeChanges.Select(change
@@ -161,6 +166,8 @@ private CompareResults CompareLockless(CompareQuery query)
161166
IsDeletedFile = change.Status is ChangeKind.Deleted,
162167
IsRenamedFile = change.Status is ChangeKind.Renamed,
163168
}).ToArray(),
169+
Commit = commits.LastOrDefault(),
170+
Commits = commits,
164171
};
165172
}
166173

0 commit comments

Comments
 (0)