public void RegisterReviewer_ExistingReviewerId_ExpectReviewerAlreadyRegisteredException() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); //Act //Assert Assert.Throws <ReviewerAlreadyRegisteredException>(() => reviewService.RegisterReviewer("user-id")); }
public void RemoveReview_Null_ExpectArgumentNullException() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("reviewer"); //Act //Assert Assert.Throws <ArgumentNullException>(() => reviewService.RemoveReview(null)); }
public void MakeReviewerAvailable_ReviewerAvailable_ExpectReviewerAlreadyAvailableException() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); //Act //Assert Assert.Throws <ReviewerAlreadyAvailableException>(() => reviewService.MakeReviewerAvailable("user-id")); }
public void ResumeReviewer_ReviewerAvailable_ExpectReviewerNotSuspendedCannotBeResumedException() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); //Act //Assert Assert.Throws <ReviewerNotSuspendedCannotBeResumedException>(() => reviewService.ResumeReviewer("user-id")); }
public void RemoveReview_EmptyReviewerList_ExpectArgumentException() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("reviewer"); //Act //Assert Assert.Throws <ArgumentException>(() => reviewService.RemoveReview(new string[0])); }
public ActionResult ShowDetails(int id) { AnnouncementWithDetails announcement = AnnouncementsContext.GetAnnouncementById(id); List <Review> reviews = ReviewContext.GetReviews(id); ViewBag.Comments = reviews; ViewBag.IdAnnouncement = id; Review rev = new Review(); ViewBag.announcement = announcement; rev.AnnouncementId = id; return(View("ShowDetails", rev)); }
public void MakeReviewerBusy_ReviewerSuspended_ExpectReviewerSuspendedCannotBeBusyException() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); reviewService.SuspendReviewer("user-id"); //Act //Assert Assert.Throws <ReviewerSuspendedCannotBeBusyException>(() => reviewService.MakeReviewerBusy("user-id")); }
public IActionResult Add([FromBody] Review review) { if (ReviewContext.CheckPassport(review.Passport) != 0) { return(StatusCode(400)); } if (ReviewContext.Add(review)) { return(StatusCode(200)); } return(StatusCode(404)); }
public void MakeReviewerBusy_ReviewerAvailable_ExpectReviewerStatusChangedToBusy() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); //Act reviewService.MakeReviewerBusy("user-id"); //Assert Assert.That(reviewService.GetReviewer("user-id").Status, Is.EqualTo(ReviewerStatus.Busy)); }
public void GetReviewer_RegisteredReviewerId_ExpectReviewerReturned() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); //Act var reviewer = reviewService.GetReviewer("user-id"); //Assert Assert.That(reviewer.Id, Is.EqualTo("user-id")); }
public void SuspendReviewer_ReviewerAvailable_ExpectReviewersStatusUpdatedToSuspended() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); //Act reviewService.SuspendReviewer("user-id"); //Assert Assert.That(reviewService.GetReviewer("user-id").Status, Is.EqualTo(ReviewerStatus.Suspended)); }
public void ResumeReviewer_ReviewerSuspended_ExpectReviewerStatusChangedToAvailable() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); reviewService.SuspendReviewer("user-id"); //Act reviewService.ResumeReviewer("user-id"); //Assert Assert.That(reviewService.GetReviewer("user-id").Status, Is.EqualTo(ReviewerStatus.Available)); }
public void AddReviewToHighestDebtor_OneReviewer_ExpectTheOnlyReviewerReturnedAndHisStatsUpdated() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("user-id"); //Act var assignedReviewer = reviewService.AddReviewToHighestDebtor(new string[0]); //Assert Assert.That(assignedReviewer.Id, Is.EqualTo("user-id")); Assert.That(assignedReviewer.ReviewCount, Is.EqualTo(1)); Assert.That(assignedReviewer.ReviewDebt, Is.EqualTo(0)); }
// GET: Comments public ActionResult Index(int?id) { if (id != null) { ReviewContext dbReview = new ReviewContext(); Review review = dbReview.Reviews.Find(id); ViewData["id"] = id; ViewData["name"] = review.Title; return(View(db.Comments.ToList())); } else { ViewData["id"] = null; return(RedirectToAction("../Home/Index")); } }
RegisterReviewer_NonExistingReviewerId_ExpectNewReviewerAddedWithAvailableStatusAndZeroReviewsAndDebt() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); //Act reviewService.RegisterReviewer("user-id"); //Assert Assert.That(reviewContext.Reviewers, Has.Count.EqualTo(1)); Assert.That(reviewContext.Reviewers[0].Id, Is.EqualTo("user-id")); Assert.That(reviewContext.Reviewers[0].Status, Is.EqualTo(ReviewerStatus.Available)); Assert.That(reviewContext.Reviewers[0].ReviewCount, Is.EqualTo(0)); Assert.That(reviewContext.Reviewers[0].ReviewDebt, Is.EqualTo(0)); }
public ActionResult Index(string search = null, string city = null) { using (var db = new ReviewContext()) { var cities = db.Restuarants.Select(p => p.City).Distinct(); //var cities2 = db.Restuarants.Where(p => p.City != null).GroupBy(p=> new {City = p.Id, Count = p.Count() }).ToList(); var model = new List <RestuarantListViewModel>(); var path = ConfigurationManager.AppSettings["RestuarantImageUploadBase"]; List <Restuarant> restuarants = new List <Restuarant>(); if (city != null) { restuarants = db.Restuarants.Include(p => p.Reviews).Where(p => p.City.Contains(city)).ToList(); } if (search != null) { restuarants = db.Restuarants.Include(p => p.Reviews).Where(p => p.Name.Contains(search)).ToList(); } else { restuarants = db.Restuarants.Include(p => p.Reviews).ToList(); } foreach (var r in restuarants) { var vm = new RestuarantListViewModel() { Id = r.Id, ImageUrl = GetImageUrl(r.ImageUrl, r.Id), Phone = r.Phone, Address = r.Address, Name = r.Name, Website = FormatedUrl(r.Website), CountOfReviews = r.Reviews.Count(), AverageScore = r.Reviews.Any() ? Math.Round(r.Reviews.Average(rv => rv.Rating), 1) : 0 }; model.Add(vm); } if (Request.IsAjaxRequest()) { return(PartialView("_Restaurants", model)); } return(View(model)); } }
public static void Main(string[] args) { IHost host = CreateHostBuilder(args).Build(); using (IServiceScope scope = host.Services.CreateScope()) { IServiceProvider services = scope.ServiceProvider; ReviewContext context = services.GetRequiredService <ReviewContext>(); IWebHostEnvironment env = services.GetRequiredService <IWebHostEnvironment>(); if (env.IsProduction()) { context.Database.Migrate(); } } host.Run(); }
public void Approve_Review() { var dbsource = Environment.CurrentDirectory + "/RateMyClasses.db"; var connectionsReview = new SqliteConnection("Data Source=" + dbsource); var optionsReview = new DbContextOptionsBuilder <ReviewContext>().UseSqlite(connectionsReview).Options; var connectionReport = new SqliteConnection("Data Source=" + dbsource); var optionsReport = new DbContextOptionsBuilder <ReportContext>().UseSqlite(connectionReport).Options; ReviewContext a = new ReviewContext(optionsReview); ReportContext b = new ReportContext(optionsReport); var result = new ModeratorController(b, a).Approve(30133) as ViewResult; var viewData = result.ViewData; Assert.True(viewData["Result"].Equals("Approved")); }
AddReviewToHighestDebtor_FourAvailableReviewersAndEveryOneAsksForReview3times_ExpectEveryReviewerHas3ReviewsAndZeroDebt() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); var reviewers = new[] { "reviewer1", "reviewer2", "reviewer3", "reviewer4" }; foreach (var reviewer in reviewers) { reviewService.RegisterReviewer(reviewer); } //Act for (var i = 0; i < 3; i++) { foreach (var reviewer in reviewers) { reviewService.AddReviewToHighestDebtor(new[] { reviewer }); } } //Assert var reviewer1 = reviewService.GetReviewer("reviewer1"); Assert.That(reviewer1.ReviewCount, Is.EqualTo(3)); Assert.That(reviewer1.ReviewDebt, Is.EqualTo(0)); var reviewer2 = reviewService.GetReviewer("reviewer2"); Assert.That(reviewer2.ReviewCount, Is.EqualTo(3)); Assert.That(reviewer2.ReviewDebt, Is.EqualTo(0)); var reviewer3 = reviewService.GetReviewer("reviewer3"); Assert.That(reviewer3.ReviewCount, Is.EqualTo(3)); Assert.That(reviewer3.ReviewDebt, Is.EqualTo(0)); var reviewer4 = reviewService.GetReviewer("reviewer4"); Assert.That(reviewer4.ReviewCount, Is.EqualTo(3)); Assert.That(reviewer4.ReviewDebt, Is.EqualTo(0)); }
AddReviewToHighestDebtor_FourReviewersTwoAvailableOneBusyAndOneSuspendedAndTwoAvailableAskForReview2Times_ExpectSuspendedWithZeroDebtBusyWithDebtOfTwoAndAvailableOnesWithZeroDebtAndTwoReviews() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("available-reviewer1"); reviewService.RegisterReviewer("available-reviewer2"); reviewService.RegisterReviewer("busy-reviewer"); reviewService.MakeReviewerBusy("busy-reviewer"); reviewService.RegisterReviewer("suspended-reviewer"); reviewService.SuspendReviewer("suspended-reviewer"); //Act reviewService.AddReviewToHighestDebtor(new[] { "available-reviewer1" }); reviewService.AddReviewToHighestDebtor(new[] { "available-reviewer2" }); reviewService.AddReviewToHighestDebtor(new[] { "available-reviewer1" }); reviewService.AddReviewToHighestDebtor(new[] { "available-reviewer2" }); //Assert var available1 = reviewService.GetReviewer("available-reviewer1"); Assert.That(available1.ReviewCount, Is.EqualTo(2)); Assert.That(available1.ReviewDebt, Is.EqualTo(0)); var available2 = reviewService.GetReviewer("available-reviewer1"); Assert.That(available2.ReviewCount, Is.EqualTo(2)); Assert.That(available2.ReviewDebt, Is.EqualTo(0)); var busyReviewer = reviewService.GetReviewer("busy-reviewer"); Assert.That(busyReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(busyReviewer.ReviewDebt, Is.EqualTo(2)); var suspendedReviewer = reviewService.GetReviewer("suspended-reviewer"); Assert.That(suspendedReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(suspendedReviewer.ReviewDebt, Is.EqualTo(0)); }
RemoveReview_TwoReviewersPassedAndOneDoesntExist_ExpectReviewerNotRegisteredExceptionAndStatsNotUpdated() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("assigned-reviewer"); reviewService.RegisterReviewer("other-available-reviewer"); reviewService.RegisterReviewer("busy-reviewer"); reviewService.MakeReviewerBusy("busy-reviewer"); reviewService.RegisterReviewer("suspended-reviewer"); reviewService.SuspendReviewer("suspended-reviewer"); //Act //Assert Assert.Throws <ReviewerNotRegisteredException>(() => reviewService.RemoveReview(new[] { "assigned-reviewer", "doesntExist" })); var assignedReviewer = reviewService.GetReviewer("assigned-reviewer"); Assert.That(assignedReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(assignedReviewer.ReviewDebt, Is.EqualTo(0)); var availableReviewer = reviewService.GetReviewer("other-available-reviewer"); Assert.That(availableReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(availableReviewer.ReviewDebt, Is.EqualTo(0)); var busyReviewer = reviewService.GetReviewer("busy-reviewer"); Assert.That(busyReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(busyReviewer.ReviewDebt, Is.EqualTo(0)); var suspendedReviewer = reviewService.GetReviewer("suspended-reviewer"); Assert.That(suspendedReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(suspendedReviewer.ReviewDebt, Is.EqualTo(0)); }
RemoveReview_FourReviewersTwoAvailableOneBusyAndOneSuspendedAndTheSuspendedOneHasTwoReviewsRemoved_ExpectSuspendedReviewCountOfMinusTwoAndDebtOfTwoAndTheOthersHaveZeroEverything() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("available-reviewer"); reviewService.RegisterReviewer("other-available-reviewer"); reviewService.RegisterReviewer("busy-reviewer"); reviewService.MakeReviewerBusy("busy-reviewer"); reviewService.RegisterReviewer("suspended-reviewer"); reviewService.SuspendReviewer("suspended-reviewer"); //Act reviewService.RemoveReview(new[] { "suspended-reviewer" }); reviewService.RemoveReview(new[] { "suspended-reviewer" }); //Assert var assignedReviewer = reviewService.GetReviewer("available-reviewer"); Assert.That(assignedReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(assignedReviewer.ReviewDebt, Is.EqualTo(0)); var availableReviewer = reviewService.GetReviewer("other-available-reviewer"); Assert.That(availableReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(availableReviewer.ReviewDebt, Is.EqualTo(0)); var busyReviewer = reviewService.GetReviewer("busy-reviewer"); Assert.That(busyReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(busyReviewer.ReviewDebt, Is.EqualTo(0)); var suspendedReviewer = reviewService.GetReviewer("suspended-reviewer"); Assert.That(suspendedReviewer.ReviewCount, Is.EqualTo(-2)); Assert.That(suspendedReviewer.ReviewDebt, Is.EqualTo(2)); }
AddReview_FourReviewersTwoAvailableOneBusyAndOneSuspendedAndTheBusyOneIsAssignedTwice_ExpectSuspendedNotChangedTheAssignedOneHasReviewCountOfTwoAndZeroDebtAndTheOtherHaveZeroReviewsAndDebtOfTwo() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("available-reviewer"); reviewService.RegisterReviewer("other-available-reviewer"); reviewService.RegisterReviewer("busy-reviewer"); reviewService.MakeReviewerBusy("busy-reviewer"); reviewService.RegisterReviewer("suspended-reviewer"); reviewService.SuspendReviewer("suspended-reviewer"); //Act reviewService.AddReview(new[] { "busy-reviewer" }); reviewService.AddReview(new[] { "busy-reviewer" }); //Assert var assignedReviewer = reviewService.GetReviewer("available-reviewer"); Assert.That(assignedReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(assignedReviewer.ReviewDebt, Is.EqualTo(2)); var availableReviewer = reviewService.GetReviewer("other-available-reviewer"); Assert.That(availableReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(availableReviewer.ReviewDebt, Is.EqualTo(2)); var busyReviewer = reviewService.GetReviewer("busy-reviewer"); Assert.That(busyReviewer.ReviewCount, Is.EqualTo(2)); Assert.That(busyReviewer.ReviewDebt, Is.EqualTo(0)); var suspendedReviewer = reviewService.GetReviewer("suspended-reviewer"); Assert.That(suspendedReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(suspendedReviewer.ReviewDebt, Is.EqualTo(0)); }
RemoveReview_SameReviewerPassedTwice_ExpectUpdatedOnlyOnce() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("assigned-reviewer"); reviewService.RegisterReviewer("other-available-reviewer"); reviewService.RegisterReviewer("busy-reviewer"); reviewService.MakeReviewerBusy("busy-reviewer"); reviewService.RegisterReviewer("suspended-reviewer"); reviewService.SuspendReviewer("suspended-reviewer"); //Act reviewService.RemoveReview(new[] { "assigned-reviewer", "assigned-reviewer" }); //Assert var assignedReviewer = reviewService.GetReviewer("assigned-reviewer"); Assert.That(assignedReviewer.ReviewCount, Is.EqualTo(-1)); Assert.That(assignedReviewer.ReviewDebt, Is.EqualTo(1)); var availableReviewer = reviewService.GetReviewer("other-available-reviewer"); Assert.That(availableReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(availableReviewer.ReviewDebt, Is.EqualTo(0)); var busyReviewer = reviewService.GetReviewer("busy-reviewer"); Assert.That(busyReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(busyReviewer.ReviewDebt, Is.EqualTo(0)); var suspendedReviewer = reviewService.GetReviewer("suspended-reviewer"); Assert.That(suspendedReviewer.ReviewCount, Is.EqualTo(0)); Assert.That(suspendedReviewer.ReviewDebt, Is.EqualTo(0)); }
AddReviewToHighestDebtor_FourReviewersOneAvailableOneBusyOneSuspendedAndOneAvailableButExcluded_ExpectReviewAssignedToAvailableReviewer() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("busy-reviewer"); reviewService.RegisterReviewer("suspended-reviewer"); reviewService.RegisterReviewer("available-reviewer"); reviewService.RegisterReviewer("excluded-reviewer"); reviewService.MakeReviewerBusy("busy-reviewer"); reviewService.SuspendReviewer("suspended-reviewer"); //Act var assignedReviewer = reviewService.AddReviewToHighestDebtor(new[] { "excluded-reviewer" }); //Assert Assert.That(assignedReviewer.Id, Is.EqualTo("available-reviewer")); Assert.That(assignedReviewer.ReviewCount, Is.EqualTo(1)); Assert.That(assignedReviewer.ReviewDebt, Is.EqualTo(0)); }
AddReviewToHighestDebtor_FourAvailableReviewersAndOneAsksForReviewSixTimes_ExpectTheOtherThreeToHaveEachTwoReviewsAndTheOneAskingForReviewsToBeInDebtByTwo() { //Arrange var reviewContext = new ReviewContext(); var reviewService = new ReviewService(reviewContext); reviewService.RegisterReviewer("code-spitting-individual"); reviewService.RegisterReviewer("reviewer1"); reviewService.RegisterReviewer("reviewer2"); reviewService.RegisterReviewer("reviewer3"); //Act for (var i = 0; i < 6; i++) { reviewService.AddReviewToHighestDebtor(new[] { "code-spitting-individual" }); } //Assert var onlyCodeWriter = reviewService.GetReviewer("code-spitting-individual"); Assert.That(onlyCodeWriter.ReviewDebt, Is.EqualTo(2)); Assert.That(onlyCodeWriter.ReviewCount, Is.EqualTo(0)); var reviewer1 = reviewService.GetReviewer("reviewer1"); Assert.That(reviewer1.ReviewDebt, Is.EqualTo(0)); Assert.That(reviewer1.ReviewCount, Is.EqualTo(2)); var reviewer2 = reviewService.GetReviewer("reviewer2"); Assert.That(reviewer2.ReviewDebt, Is.EqualTo(0)); Assert.That(reviewer2.ReviewCount, Is.EqualTo(2)); var reviewer3 = reviewService.GetReviewer("reviewer3"); Assert.That(reviewer3.ReviewDebt, Is.EqualTo(0)); Assert.That(reviewer3.ReviewCount, Is.EqualTo(2)); }
public void ConfigureServices(IServiceCollection services) { services.AddMvc(o => { o.Filters.Add(new ApiKeyRequiredAttribute()); o.Filters.Add(new ValidateModelAttribute()); o.EnableEndpointRouting = false; }).SetCompatibilityVersion(CompatibilityVersion.Version_2_2); services.AddTransient <ReviewContext, ReviewContext>((s) => { var db = new ReviewContext(); if (AppSettings.Instance.SeedContext) { db.Seed(); } return(db); }); services.AddTransient <IServices, TcrServices>(); services.ConfigureApiVersioning(); services.ConfigureSwagger(); }
public HomeController(ReviewContext context) { _context = context; }
public AnnualReviewCompetencyToolsResponsesController(ReviewContext context) { _context = context; }
public KudosEmailsController(ReviewContext context) { _context = context; }
public ReviewService(ReviewContext reviewContext) { this.reviewContext = reviewContext; }
public async Task<object> Get(string id) { using (var ctx = new ReviewContext()) { var review = await ctx.Reviews.FindAsync(id); if (review == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } List<Revision> revisions; var commits = new HashSet<Commit>(); using (var repo = new Repository(GitReviewApplication.RepositoryPath)) { revisions = repo.GetRevisions(review.RefPrefix).ToList(); var mergeBases = new Dictionary<Revision, HashSet<Commit>>(revisions.Count); var ignored = new Dictionary<Revision, HashSet<Commit>>(revisions.Count); foreach (var rev in revisions) { var revReachable = new HashSet<Commit>(); var revMergeBases = new HashSet<Commit>(); var revIgnored = new HashSet<Commit>(); var sourceCommit = (Commit)rev.Source.Target; var destinationCommit = (Commit)rev.Destination.Target; GetMergeDetails(repo, sourceCommit, destinationCommit, out revReachable, out revMergeBases, out revIgnored); ignored[rev] = revIgnored; mergeBases[rev] = revMergeBases; commits.UnionWith(revReachable); } return new { Review = new { Id = review.Id, Revisions = revisions.Select(r => review.Id + ":" + r.Id) }, Revisions = revisions.Select(r => new { Id = review.Id + ":" + r.Id, Source = r.Source.TargetIdentifier, Destination = r.Destination.TargetIdentifier, MergeBases = mergeBases[r].Select(b => b.Sha).ToList(), Ignored = ignored[r].Select(i => i.Sha).ToList(), }).ToList(), Commits = commits.Select(c => new { Id = c.Sha, Author = c.Author.Email, AuthoredAt = c.Author.When, Committer = c.Committer.Email, CommittedAt = c.Committer.When, Message = c.Message, Parents = c.Parents.Select(p => p.Sha).ToList(), }).ToList(), }; } } }
private void ReceivePack(ControllerContext context, Stream input, HttpResponseBase response) { var capabilities = new HashSet<string>(Capabilities.Split(' ')); var requests = ProtocolUtils.ParseUpdateRequests(input, capabilities).ToList(); if (requests.Count == 0) { response.BinaryWrite(ProtocolUtils.EndMarker); return; } var reportStatus = capabilities.Contains("report-status"); var useSideBand = capabilities.Contains("side-band-64k"); var reportBand = useSideBand ? ProtocolUtils.PrimaryBand : (int?)null; var failureBand = reportStatus ? reportBand : ProtocolUtils.ErrorBand; try { ProtocolUtils.UpdateRequest source; ProtocolUtils.UpdateRequest destination; var errors = ReadRequests(requests, out source, out destination); if (errors.Any(e => e.Value != null) || source == null || destination == null) { if (reportStatus || useSideBand) { ReportFailure(response, failureBand, errors, "expected source and destination branches to be pushed"); } return; } var refPrefix = Guid.NewGuid().ToString(); source = new ProtocolUtils.UpdateRequest( source.SourceIdentifier, source.TargetIdentifier, RepoFormat.FormatSourceRef(refPrefix, 1)); destination = new ProtocolUtils.UpdateRequest( destination.SourceIdentifier, destination.TargetIdentifier, RepoFormat.FormatDestinationRef(refPrefix, 1)); var output = this.ReadPack(new[] { source, destination }, capabilities, input); var line = ProtocolUtils.ReadPacketLine(output).TrimEnd('\n'); if (line != "unpack ok") { line = line.Substring("unpack ".Length); if (reportStatus || useSideBand) { ReportFailure(response, failureBand, errors, line); } return; } string id; try { using (var ctx = new ReviewContext()) { using (new NoSyncScope()) { id = ctx.GetNextReviewId().Result; } ctx.Reviews.Add(new Review { Id = id, RefPrefix = refPrefix, }); ctx.SaveChanges(); } } catch (DbUpdateException ex) { ReportFailure(response, failureBand, errors, ex.GetBaseException().Message); throw; } if (useSideBand) { var url = new UrlHelper(context.RequestContext).Action("Index", "Home", null, context.HttpContext.Request.Url.Scheme) + "#/" + id; var message = string.Format("code review created:\n\n\t{0}\n\n", url); response.BinaryWrite(ProtocolUtils.Band(ProtocolUtils.MessageBand, Encoding.UTF8.GetBytes(message))); } if (reportStatus) { ReportSuccess(response, reportBand); } } finally { if (useSideBand) { response.BinaryWrite(ProtocolUtils.EndMarker); } } }