/// <summary>
 /// Constructor.
 /// </summary>
 public LatestBuildResult(
     Commit commit,
     BuildResult buildResult,
     TimeSpan? estimatedBuildDuration)
 {
     Commit = commit;
     BuildResult = buildResult;
     EstimatedBuildDuration = estimatedBuildDuration;
 }
 /// <summary>
 /// Constructor.
 /// </summary>
 public BuildViewModel(
     BuildResult buildResult,
     IList<UnreadFeedbackResult> unreadFeedback,
     Func<Model.Projects.Build, string> commitUrlBuilder,
     Func<TestResult, string> testUrlBuilder,
     Func<string, string, int, string> feedbackUrlBuilder,
     ITimeZoneProvider timeZoneProvider)
 {
     User = buildResult.Build.Commit.User;
     Submissions = new CheckpointSubmissionsViewModel
     (
         buildResult.Submissions,
         timeZoneProvider
     );
     PushDate = buildResult.Build.Commit.PushDate;
     CommitMessage = buildResult.Build.Commit.Message;
     CommitSha = buildResult.Build.Commit.Sha;
     CommitUrl = commitUrlBuilder(buildResult.Build);
     BuildStatus = buildResult.Build.Status;
     BuildDuration = buildResult.Build.DateCompleted - buildResult.Build.DateStarted;
     BuildOutput = buildResult.Build.Output;
     TestClassResults = TestClassTableEntry.GetTestClassResults
     (
         null /*checkpoint*/,
         buildResult.Build,
         testUrlBuilder
     );
     IsLatestBuild = buildResult.LatestBuild;
     TestTrend = buildResult.Build.Status == BuildStatus.Completed
         ? new TestTrendViewModel
             (
                 buildResult.AllBuildTestCounts,
                 buildResult.Build.Commit.Project.Name,
                 buildResult.Build,
                 thumbnail: false
             )
         : null;
     UnreadFeedback = unreadFeedback.Select
     (
         uf => new UnreadFeedbackViewModel
         (
             uf,
             feedbackUrlBuilder,
             timeZoneProvider
         )
     ).ToList();
 }
		/// <summary>
		/// Returns the view model for the given build.
		/// </summary>
		private BuildViewModel GetBuildViewModelAsync(
			BuildResult buildResult,
			IList<UnreadFeedbackResult> unreadFeedback)
		{
			return new BuildViewModel
			(
				buildResult,
				unreadFeedback,
				b => b.Commit.GetCommitUrl(Url),
				testResult => Url.Action
				(
					"TestResult",
					new
					{
						buildId = testResult.BuildId,
						testResultId = testResult.Id
					}
				),
				(projectName, checkpointName, submissionId) => Url.Action
				(
					"ViewFeedback",
					"Submission",
					new
					{
						projectName,
						checkpointName,
						submissionId
					}
				),
				TimeZoneProvider
			);
		}