Skip to content

Commit 3d9ea7c

Browse files
Laurent-BHLaurent Bédard-Hamel
andauthored
Added support for reviewers (#95)
* Added support for reviewers Co-authored-by: Laurent Bédard-Hamel <laurent.bedard-hamel@ubisoft.com>
1 parent 4fb258b commit 3d9ea7c

File tree

9 files changed

+80
-0
lines changed

9 files changed

+80
-0
lines changed

NGitLab.Mock/Clients/MergeRequestClient.cs

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,23 @@ public void Delete(int mergeRequestIid)
377377
mergeRequests = mergeRequests.Where(mr => mr.Assignee?.Id == assigneeId);
378378
}
379379

380+
if (query.ReviewerId != null)
381+
{
382+
if (query.ReviewerId == QueryAssigneeId.None)
383+
{
384+
mergeRequests = mergeRequests.Where(mr => mr.Reviewers == null || mr.Reviewers.Count == 0);
385+
}
386+
else if (query.ReviewerId == QueryAssigneeId.Any)
387+
{
388+
mergeRequests = mergeRequests.Where(mr => mr.Reviewers != null || mr.Reviewers.Any());
389+
}
390+
else
391+
{
392+
var reviewerId = int.Parse(query.ReviewerId.ToString());
393+
mergeRequests = mergeRequests.Where(mr => mr.Reviewers.Any(x => reviewerId.Equals(x.Id)));
394+
}
395+
}
396+
380397
if (query.AuthorId != null)
381398
{
382399
mergeRequests = mergeRequests.Where(mr => mr.Author.Id == query.AuthorId);
@@ -571,6 +588,18 @@ public Models.MergeRequest Update(int mergeRequestIid, MergeRequestUpdate mergeR
571588
}
572589
}
573590

591+
if (mergeRequestUpdate.ReviewerIds != null)
592+
{
593+
foreach (var userId in mergeRequestUpdate.ReviewerIds)
594+
{
595+
var reviewer = Server.Users.GetById(userId);
596+
if (reviewer == null)
597+
throw new GitLabBadRequestException("user not found");
598+
599+
mergeRequest.Reviewers.Add(reviewer);
600+
}
601+
}
602+
574603
if (mergeRequestUpdate.Description != null)
575604
{
576605
mergeRequest.Description = mergeRequestUpdate.Description;

NGitLab.Mock/MergeRequest.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ public MergeRequest()
2727

2828
public UserRef Assignee { get; set; }
2929

30+
public IList<UserRef> Reviewers { get; } = new List<UserRef>();
31+
3032
public string SourceBranch { get; set; }
3133

3234
public string TargetBranch { get; set; }
@@ -183,7 +185,20 @@ internal Models.MergeRequest ToMergeRequestClient()
183185
HeadPipeline = HeadPipeline?.ToPipelineClient(),
184186
Labels = Labels.ToArray(),
185187
RebaseInProgress = RebaseInProgress,
188+
Reviewers = GetUsers(Reviewers),
186189
};
187190
}
191+
192+
internal static Models.User[] GetUsers(IList<UserRef> userRefs)
193+
{
194+
var users = new List<Models.User>();
195+
foreach(var userRef in userRefs)
196+
{
197+
var user = userRef.ToUserClient();
198+
users.Add(user);
199+
}
200+
201+
return users.ToArray();
202+
}
188203
}
189204
}

NGitLab.Mock/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ NGitLab.Mock.MergeRequest.Project.get -> NGitLab.Mock.Project
512512
NGitLab.Mock.MergeRequest.Rebase(NGitLab.Mock.User user) -> NGitLab.Models.RebaseResult
513513
NGitLab.Mock.MergeRequest.RebaseInProgress.get -> bool
514514
NGitLab.Mock.MergeRequest.RebaseInProgress.set -> void
515+
NGitLab.Mock.MergeRequest.Reviewers.get -> System.Collections.Generic.IList<NGitLab.Mock.UserRef>
515516
NGitLab.Mock.MergeRequest.Sha.get -> NGitLab.Sha1
516517
NGitLab.Mock.MergeRequest.ShouldRemoveSourceBranch.get -> bool
517518
NGitLab.Mock.MergeRequest.ShouldRemoveSourceBranch.set -> void

NGitLab.Tests/MergeRequest/MergeRequestClientTests.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,25 @@ public async Task Test_get_assigned_merge_requests()
166166
Assert.AreEqual(1, mergeRequests.Count, "The query retrieved all open merged requests that are unassigned");
167167
}
168168

169+
[Test]
170+
[NGitLabRetry]
171+
public async Task Test_set_reviewers_merge_requests()
172+
{
173+
using var context = await GitLabTestContext.CreateAsync();
174+
var (project, mergeRequest) = context.CreateMergeRequest();
175+
context.CreateMergeRequest(); // Second MR to verify filter returns only one
176+
var mergeRequestClient = context.Client.GetMergeRequest(project.Id);
177+
var userId = context.Client.Users.Current.Id;
178+
mergeRequestClient.Update(mergeRequest.Iid, new MergeRequestUpdate { ReviewerIds = new int[] { userId } });
179+
180+
var mergeRequests = mergeRequestClient.Get(new MergeRequestQuery { ReviewerId = userId }).ToList();
181+
Assert.AreEqual(1, mergeRequests.Count, "The query retrieved all open merged requests that are assigned for a reviewer");
182+
183+
var mergeRequestUpdated = mergeRequests.Single();
184+
var reviewers = mergeRequestUpdated.Reviewers;
185+
Assert.AreEqual(1, reviewers.Length);
186+
}
187+
169188
private static void ListMergeRequest(IMergeRequestClient mergeRequestClient, Models.MergeRequest mergeRequest)
170189
{
171190
Assert.IsTrue(mergeRequestClient.All.Any(x => x.Id == mergeRequest.Id), "Test 'All' accessor returns the merge request");

NGitLab/Impl/MergeRequestClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public IEnumerable<MergeRequest> Get(MergeRequestQuery query)
4646
url = Utils.AddParameter(url, "author_id", query.AuthorId);
4747
url = Utils.AddParameter(url, "per_page", query.PerPage);
4848
url = Utils.AddParameter(url, "assignee_id", query.AssigneeId);
49+
url = Utils.AddParameter(url, "reviewer_id", query.ReviewerId);
4950
url = Utils.AddParameter(url, "approver_ids[]", query.ApproverIds);
5051
url = Utils.AddParameter(url, "source_branch", query.SourceBranch);
5152
url = Utils.AddParameter(url, "target_branch", query.TargetBranch);

NGitLab/Models/MergeRequest.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,9 @@ public class MergeRequest
114114
[DataMember(Name = "assignees")]
115115
public User[] Assignees;
116116

117+
[DataMember(Name = "reviewers")]
118+
public User[] Reviewers;
119+
117120
[DataMember(Name = "allow_collaboration")]
118121
public bool? AllowCollaboration;
119122

NGitLab/Models/MergeRequestQuery.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ public class MergeRequestQuery
7474
/// </summary>
7575
public QueryAssigneeId AssigneeId { get; set; }
7676

77+
/// <summary>
78+
/// Returns the merge requests reviewer ids.
79+
/// </summary>
80+
public QueryAssigneeId ReviewerId { get; set; }
81+
7782
/// <summary>
7883
/// Returns merge requests which have specified all the users with the given ids as individual approvers.
7984
/// None returns merge requests without approvers. Any returns merge requests with an approver.

NGitLab/Models/MergeRequestUpdate.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ public class MergeRequestUpdate
1717
[DataMember(Name = "assignee_ids")]
1818
public int[] AssigneeIds;
1919

20+
[DataMember(Name = "reviewer_ids")]
21+
public int[] ReviewerIds;
22+
2023
[DataMember(Name = "title")]
2124
public string Title;
2225

NGitLab/PublicAPI.Unshipped.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1680,6 +1680,7 @@ NGitLab.Models.MergeRequest.MergeWhenPipelineSucceeds -> bool
16801680
NGitLab.Models.MergeRequest.Milestone -> NGitLab.Models.Milestone
16811681
NGitLab.Models.MergeRequest.ProjectId -> int
16821682
NGitLab.Models.MergeRequest.RebaseInProgress -> bool
1683+
NGitLab.Models.MergeRequest.Reviewers -> NGitLab.Models.User[]
16831684
NGitLab.Models.MergeRequest.Sha -> string
16841685
NGitLab.Models.MergeRequest.ShouldRemoveSourceBranch -> bool?
16851686
NGitLab.Models.MergeRequest.SourceBranch -> string
@@ -1828,6 +1829,8 @@ NGitLab.Models.MergeRequestQuery.OrderBy.get -> string
18281829
NGitLab.Models.MergeRequestQuery.OrderBy.set -> void
18291830
NGitLab.Models.MergeRequestQuery.PerPage.get -> int?
18301831
NGitLab.Models.MergeRequestQuery.PerPage.set -> void
1832+
NGitLab.Models.MergeRequestQuery.ReviewerId.get -> NGitLab.Models.QueryAssigneeId
1833+
NGitLab.Models.MergeRequestQuery.ReviewerId.set -> void
18311834
NGitLab.Models.MergeRequestQuery.Scope.get -> string
18321835
NGitLab.Models.MergeRequestQuery.Scope.set -> void
18331836
NGitLab.Models.MergeRequestQuery.Search.get -> string
@@ -1866,6 +1869,7 @@ NGitLab.Models.MergeRequestUpdate.Labels -> string
18661869
NGitLab.Models.MergeRequestUpdate.MergeRequestUpdate() -> void
18671870
NGitLab.Models.MergeRequestUpdate.MilestoneId -> int?
18681871
NGitLab.Models.MergeRequestUpdate.NewState -> string
1872+
NGitLab.Models.MergeRequestUpdate.ReviewerIds -> int[]
18691873
NGitLab.Models.MergeRequestUpdate.SourceBranch -> string
18701874
NGitLab.Models.MergeRequestUpdate.TargetBranch -> string
18711875
NGitLab.Models.MergeRequestUpdate.Title -> string

0 commit comments

Comments
 (0)