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

Commit 9c60db1

Browse files
Functionality to display Checks on PullRequestDetailView
1 parent ae00f33 commit 9c60db1

19 files changed

+258
-33
lines changed

src/GitHub.App/GitHub.App.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,7 @@
268268
<Compile Include="ViewModels\GitHubPane\NotAGitRepositoryViewModel.cs" />
269269
<Compile Include="ViewModels\GitHubPane\PullRequestReviewAuthoringViewModel.cs" />
270270
<Compile Include="ViewModels\GitHubPane\PullRequestReviewCommentViewModel.cs" />
271+
<Compile Include="ViewModels\GitHubPane\PullRequestCheckViewModel.cs" />
271272
<Compile Include="ViewModels\GitHubPane\PullRequestReviewSummaryViewModel.cs" />
272273
<Compile Include="ViewModels\GitHubPane\PullRequestReviewViewModel.cs" />
273274
<Compile Include="ViewModels\GitHubPane\PullRequestUserReviewsViewModel.cs" />

src/GitHub.App/SampleData/PullRequestDetailViewModelDesigner.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,36 @@ public PullRequestDetailViewModelDesigner()
9595
};
9696

9797
Files = new PullRequestFilesViewModelDesigner();
98+
99+
var defaultAvatar = "pack://application:,,,/GitHub.App;component/Images/default_user_avatar.png";
100+
101+
Checks = new[]
102+
{
103+
new PullRequestCheckViewModel
104+
{
105+
Title = "continuous-integration/appveyor/branch",
106+
Description = "AppVeyor build succeeded",
107+
Status = PullRequestCheckStatusEnum.Success,
108+
AvatarUrl = defaultAvatar,
109+
Avatar = AvatarProvider.CreateBitmapImage(defaultAvatar),
110+
},
111+
new PullRequestCheckViewModel
112+
{
113+
Title = "continuous-integration/appveyor/pr",
114+
Description = "AppVeyor building",
115+
Status = PullRequestCheckStatusEnum.Pending,
116+
AvatarUrl = defaultAvatar,
117+
Avatar = AvatarProvider.CreateBitmapImage(defaultAvatar),
118+
},
119+
new PullRequestCheckViewModel
120+
{
121+
Title = "continuous-integration/appveyor/other",
122+
Description = "AppVeyor build failed",
123+
Status = PullRequestCheckStatusEnum.Failure,
124+
AvatarUrl = defaultAvatar,
125+
Avatar = AvatarProvider.CreateBitmapImage(defaultAvatar),
126+
},
127+
};
98128
}
99129

100130
public PullRequestDetailModel Model { get; }
@@ -123,6 +153,8 @@ public PullRequestDetailViewModelDesigner()
123153
public ReactiveCommand<object> OpenOnGitHub { get; }
124154
public ReactiveCommand<object> ShowReview { get; }
125155

156+
public IReadOnlyList<IPullRequestCheckViewModel> Checks { get; }
157+
126158
public Task InitializeAsync(ILocalRepositoryModel localRepository, IConnection connection, string owner, string repo, int number) => Task.CompletedTask;
127159

128160
public string GetLocalFilePath(IPullRequestFileNode file)

src/GitHub.App/Services/ChecksService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,15 +71,15 @@ public async Task<List<CheckSuiteModel>> ReadCheckSuites(
7171
commit => commit.Commit.CheckSuites(null,null, null,null, null).AllPages()
7272
.Select(suite => new CheckSuiteModel
7373
{
74-
Conclusion = (CheckConclusionStateEnum?) suite.Conclusion,
75-
Status = (CheckStatusStateEnum) suite.Status,
74+
Conclusion = (CheckSuiteConclusionStateEnum?) suite.Conclusion,
75+
Status = (CheckSuiteStatusStateEnum) suite.Status,
7676
CreatedAt = suite.CreatedAt,
7777
UpdatedAt = suite.UpdatedAt,
7878
CheckRuns = suite.CheckRuns(null, null, null, null, null).AllPages()
7979
.Select(run => new CheckRunModel
8080
{
81-
Conclusion = (CheckConclusionStateEnum?) run.Conclusion,
82-
Status = (CheckStatusStateEnum) run.Status,
81+
Conclusion = (CheckSuiteConclusionStateEnum?) run.Conclusion,
82+
Status = (CheckSuiteStatusStateEnum) run.Status,
8383
StartedAt = run.StartedAt,
8484
CompletedAt = run.CompletedAt,
8585
Annotations = run.Annotations(null, null, null, null).AllPages()

src/GitHub.App/Services/PullRequestService.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -164,17 +164,17 @@ public async Task<Page<PullRequestListItemModel>> ReadPullRequests(
164164
{
165165
checksHasFailure = item.LastCommit
166166
.CheckSuites.Any(model => model.Conclusion.HasValue
167-
&& (model.Conclusion.Value == CheckConclusionStateEnum.Failure
167+
&& (model.Conclusion.Value == CheckSuiteConclusionStateEnum.Failure
168168
|| model.Conclusion.Value ==
169-
CheckConclusionStateEnum.ActionRequired));
169+
CheckSuiteConclusionStateEnum.ActionRequired));
170170

171171
if (!checksHasFailure)
172172
{
173173
checksHasCompleteSuccess = item.LastCommit
174174
.CheckSuites.All(model => model.Conclusion.HasValue
175-
&& (model.Conclusion.Value == CheckConclusionStateEnum.Success
175+
&& (model.Conclusion.Value == CheckSuiteConclusionStateEnum.Success
176176
|| model.Conclusion.Value ==
177-
CheckConclusionStateEnum.Neutral));
177+
CheckSuiteConclusionStateEnum.Neutral));
178178
}
179179
}
180180

@@ -942,9 +942,9 @@ class LastCommitSummaryModel
942942

943943
class CheckSuiteSummaryModel
944944
{
945-
public CheckConclusionStateEnum? Conclusion { get; set; }
945+
public CheckSuiteConclusionStateEnum? Conclusion { get; set; }
946946

947-
public CheckStatusStateEnum Status { get; set; }
947+
public CheckSuiteStatusStateEnum Status { get; set; }
948948
}
949949
}
950950

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.ComponentModel.Composition;
4+
using System.Linq;
5+
using System.Windows.Media.Imaging;
6+
using GitHub.Models;
7+
using GitHub.Services;
8+
9+
namespace GitHub.ViewModels.GitHubPane
10+
{
11+
[Export(typeof(IPullRequestCheckViewModel))]
12+
[PartCreationPolicy(CreationPolicy.NonShared)]
13+
public class PullRequestCheckViewModel: IPullRequestCheckViewModel
14+
{
15+
const string DefaultAvatar = "pack://application:,,,/GitHub.App;component/Images/default_user_avatar.png";
16+
17+
public static IEnumerable<PullRequestCheckViewModel> Build(PullRequestDetailModel pullRequest)
18+
{
19+
return pullRequest.Statuses?.Select(model =>
20+
{
21+
var statusStateEnum = model.State;
22+
23+
PullRequestCheckStatusEnum checkStatus;
24+
switch (statusStateEnum)
25+
{
26+
case StatusStateEnum.Expected:
27+
case StatusStateEnum.Error:
28+
case StatusStateEnum.Failure:
29+
checkStatus = PullRequestCheckStatusEnum.Failure;
30+
break;
31+
case StatusStateEnum.Pending:
32+
checkStatus = PullRequestCheckStatusEnum.Pending;
33+
break;
34+
case StatusStateEnum.Success:
35+
checkStatus = PullRequestCheckStatusEnum.Success;
36+
break;
37+
default:
38+
throw new InvalidOperationException("Unkown PullRequestCheckStatusEnum");
39+
}
40+
41+
return new PullRequestCheckViewModel
42+
{
43+
Title = model.Context,
44+
Description = model.Description,
45+
Status = checkStatus,
46+
DetailsUrl = model.TargetUrl,
47+
AvatarUrl = model.AvatarUrl ?? DefaultAvatar,
48+
Avatar = model.AvatarUrl != null
49+
? new BitmapImage(new Uri(model.AvatarUrl))
50+
: AvatarProvider.CreateBitmapImage(DefaultAvatar)
51+
};
52+
53+
}) ?? new PullRequestCheckViewModel[0];
54+
}
55+
56+
public string Title { get; set; }
57+
58+
public string Description { get; set; }
59+
60+
public PullRequestCheckStatusEnum Status { get; set; }
61+
62+
public string DetailsUrl { get; set; }
63+
64+
public string AvatarUrl { get; set; }
65+
66+
public BitmapImage Avatar { get; set; }
67+
}
68+
}

src/GitHub.App/ViewModels/GitHubPane/PullRequestDetailViewModel.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ public sealed class PullRequestDetailViewModel : PanePageViewModelBase, IPullReq
5656
bool refreshOnActivate;
5757
Uri webUrl;
5858
IDisposable sessionSubscription;
59+
IReadOnlyList<IPullRequestCheckViewModel> checks;
5960

6061
/// <summary>
6162
/// Initializes a new instance of the <see cref="PullRequestDetailViewModel"/> class.
@@ -305,6 +306,12 @@ public Uri WebUrl
305306
/// </summary>
306307
public ReactiveCommand<object> ShowReview { get; }
307308

309+
public IReadOnlyList<IPullRequestCheckViewModel> Checks
310+
{
311+
get { return checks; }
312+
private set { this.RaiseAndSetIfChanged(ref checks, value); }
313+
}
314+
308315
/// <summary>
309316
/// Initializes the view model.
310317
/// </summary>
@@ -380,6 +387,8 @@ public async Task Load(PullRequestDetailModel pullRequest)
380387
Body = !string.IsNullOrWhiteSpace(pullRequest.Body) ? pullRequest.Body : Resources.NoDescriptionProvidedMarkdown;
381388
Reviews = PullRequestReviewSummaryViewModel.BuildByUser(Session.User, pullRequest).ToList();
382389

390+
Checks = PullRequestCheckViewModel.Build(pullRequest)?.ToList();
391+
383392
await Files.InitializeAsync(Session);
384393

385394
var localBranches = await pullRequestsService.GetLocalBranches(LocalRepository, pullRequest).ToList();

src/GitHub.Exports.Reactive/GitHub.Exports.Reactive.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@
205205
<Compile Include="ViewModels\GitHubPane\ILoggedOutViewModel.cs" />
206206
<Compile Include="ViewModels\GitHubPane\INavigationViewModel.cs" />
207207
<Compile Include="ViewModels\GitHubPane\IPanePageViewModel.cs" />
208+
<Compile Include="ViewModels\GitHubPane\IPullRequestCheckViewModel.cs" />
208209
<Compile Include="ViewModels\GitHubPane\IPullRequestFilesViewModel.cs" />
209210
<Compile Include="ViewModels\GitHubPane\IPullRequestListItemViewModel.cs" />
210211
<Compile Include="ViewModels\GitHubPane\IPullRequestListViewModel.cs" />
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Windows.Media.Imaging;
2+
using GitHub.Models;
3+
4+
namespace GitHub.ViewModels.GitHubPane
5+
{
6+
public interface IPullRequestCheckViewModel
7+
{
8+
string Title { get; set; }
9+
string Description { get; set; }
10+
PullRequestCheckStatusEnum Status { get; set; }
11+
string DetailsUrl { get; set; }
12+
string AvatarUrl { get; set; }
13+
BitmapImage Avatar { get; set; }
14+
}
15+
16+
public enum PullRequestCheckStatusEnum
17+
{
18+
Pending,
19+
Success,
20+
Failure
21+
}
22+
}

src/GitHub.Exports.Reactive/ViewModels/GitHubPane/IPullRequestDetailViewModel.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,8 @@ public interface IPullRequestDetailViewModel : IPanePageViewModel, IOpenInBrowse
175175
/// </summary>
176176
ReactiveCommand<object> ShowReview { get; }
177177

178+
IReadOnlyList<IPullRequestCheckViewModel> Checks { get; }
179+
178180
/// <summary>
179181
/// Initializes the view model.
180182
/// </summary>

src/GitHub.Exports/Models/CheckConclusionStateEnum.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace GitHub.Models
22
{
3-
public enum CheckConclusionStateEnum
3+
public enum CheckSuiteConclusionStateEnum
44
{
55
ActionRequired,
66
TimedOut,

0 commit comments

Comments
 (0)