public async Task SaveAsync(CompetitorWithOptionsViewModel competitor) { if (competitor.Fleets == null) { competitor.Fleets = new List <Fleet>(); } if (competitor.FleetIds == null) { competitor.FleetIds = new List <Guid>(); } var fleets = (await _coreClubService.GetMinimalForSelectedBoatsFleets( competitor.ClubId)) .Where(f => f.FleetType == Api.Enumerations.FleetType.SelectedBoats); foreach (var fleetId in competitor.FleetIds) { var fleet = fleets.SingleOrDefault(f => f.Id == fleetId); if (fleet != null && !competitor.Fleets.Any(f => f.Id == fleet.Id)) { competitor.Fleets.Add(fleet); } } await _coreCompetitorService.SaveAsync(competitor); }
// GET: Competitor/Create public async Task <ActionResult> Create( string clubInitials, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; var comp = new CompetitorWithOptionsViewModel(); var clubId = await _clubService.GetClubId(clubInitials); comp.BoatClassOptions = (await _clubService.GetAllBoatClasses(clubId)) .OrderBy(c => c.Name); var fleets = (await _clubService.GetAllFleets(clubId)) .Where(f => f.FleetType == Api.Enumerations.FleetType.SelectedBoats) .OrderBy(f => f.Name); comp.FleetOptions = _mapper.Map <List <FleetSummary> >(fleets); var errors = _adminTipService.GetCompetitorCreateErrors(comp); if (errors != null && errors.Count > 0) { return(View("CreateErrors", errors)); } return(View(comp)); }
public IList <AdminToDoViewModel> GetCompetitorCreateErrors( CompetitorWithOptionsViewModel competitor) { var returnList = new List <AdminToDoViewModel>(); if (competitor == null) { return(returnList); } if (competitor.BoatClassOptions == null || !competitor.BoatClassOptions.Any()) { returnList.Add(new AdminToDoViewModel { Title = "Add a class", Details = "Before creating a competitor, add the types of boats that are sailed by your club.", Link = new ToDoLinkViewModel { Action = "Create", Controller = "BoatClass" }, Completed = false }); } return(returnList); }
public async Task Create_PostUnauthorized_ReturnForbidden() { var vm = new CompetitorWithOptionsViewModel(); var result = await _controller.Create(_clubInitials, vm); _competitorServiceMock.Verify(s => s.SaveAsync(vm), Times.Never); Assert.IsType <UnauthorizedResult>(result); }
public async Task <ActionResult> Create( string clubInitials, CompetitorWithOptionsViewModel competitor, #pragma warning disable CA1054 // Uri parameters should not be strings string returnUrl = null) #pragma warning restore CA1054 // Uri parameters should not be strings { ViewData["ReturnUrl"] = returnUrl; var clubId = await _clubService.GetClubId(clubInitials); if (!await _authService.CanUserEdit(User, clubId)) { return(Unauthorized()); } competitor.ClubId = clubId; try { var fleets = (await _clubService.GetAllFleets(clubId)) .Where(f => f.FleetType == Api.Enumerations.FleetType.SelectedBoats) .OrderBy(f => f.Name); if (!ModelState.IsValid) { competitor.FleetOptions = _mapper.Map <List <FleetSummary> >(fleets); return(View(competitor)); } competitor.Fleets = new List <Fleet>(); foreach (var fleetId in (competitor.FleetIds ?? new List <Guid>())) { var fleet = fleets.SingleOrDefault(f => f.Id == fleetId); if (fleet != null) { competitor.Fleets.Add(fleet); } } await _competitorService.SaveAsync(competitor); if (!string.IsNullOrWhiteSpace(returnUrl)) { return(Redirect(returnUrl)); } return(RedirectToAction("Index", "Admin")); } catch { competitor.BoatClassOptions = (await _clubService.GetAllBoatClasses(clubId)) .OrderBy(c => c.Name); var fleets = (await _clubService.GetAllFleets(clubId)) .Where(f => f.FleetType == Api.Enumerations.FleetType.SelectedBoats) .OrderBy(f => f.Name); competitor.FleetOptions = _mapper.Map <List <FleetSummary> >(fleets); ModelState.AddModelError(String.Empty, "A problem occurred while saving."); return(View(competitor)); } }
public async Task Create_Post_CallsServiceSaveNew() { SetupAsAuthorized(); var vm = new CompetitorWithOptionsViewModel(); await _controller.Create(_clubInitials, vm); _competitorServiceMock.Verify(s => s.SaveAsync(vm), Times.Once); }
public async Task Create_Post_Redirects() { SetupAsAuthorized(); var vm = new CompetitorWithOptionsViewModel(); var result = await _controller.Create(_clubInitials, vm); //Assert var redirect = Assert.IsType <RedirectToActionResult>(result); Assert.Equal("Admin", redirect.ControllerName); }
public async Task Create_PostInvalidModel_ReturnsModel() { SetupAsAuthorized(); var vm = new CompetitorWithOptionsViewModel(); _controller.ModelState.AddModelError("Name", "The Name field is required."); // Act var result = await _controller.Create(_clubInitials, vm); // Assert _competitorServiceMock.Verify(s => s.SaveAsync(vm), Times.Never); var viewresult = Assert.IsType <ViewResult>(result); Assert.NotNull(viewresult.Model); Assert.Equal(vm, viewresult.Model); }
public async Task CreatePost_ServiceThrows_ReturnsModel() { // Arrange SetupAsAuthorized(); var vm = new CompetitorWithOptionsViewModel(); _competitorServiceMock.Setup(s => s.SaveAsync( It.IsAny <CompetitorWithOptionsViewModel>())).Throws(new InvalidOperationException()); // Act var result = await _controller.Create(_clubInitials, vm); // Assert var viewresult = Assert.IsType <ViewResult>(result); Assert.NotNull(viewresult.Model); Assert.Equal(vm, viewresult.Model); }
public async Task <ActionResult> Edit( Guid id, CompetitorWithOptionsViewModel competitor) { try { if (!await _authService.CanUserEdit(User, competitor.ClubId)) { return(Unauthorized()); } IEnumerable <KeyValuePair <string, string> > errors = await _competitorService.GetSaveErrors(competitor); if (errors != null) { foreach (var error in errors) { ModelState.AddModelError(error.Key, error.Value); } } if (!ModelState.IsValid) { competitor.BoatClassOptions = (await _clubService.GetAllBoatClasses(competitor.ClubId)) .OrderBy(c => c.Name); var fleets = (await _clubService.GetAllFleets(competitor.ClubId)) .Where(f => f.FleetType == Api.Enumerations.FleetType.SelectedBoats) .OrderBy(f => f.Name); competitor.FleetOptions = _mapper.Map <List <FleetSummary> >(fleets); return(View(competitor)); } await _competitorService.SaveAsync(competitor); return(RedirectToAction("Index", "Competitor")); } catch { return(View()); } }