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));
    }
Example #3
0
    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);
    }
Example #4
0
        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));
        }
    }
Example #6
0
        public async Task Create_Post_CallsServiceSaveNew()
        {
            SetupAsAuthorized();


            var vm = new CompetitorWithOptionsViewModel();
            await _controller.Create(_clubInitials, vm);

            _competitorServiceMock.Verify(s => s.SaveAsync(vm), Times.Once);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
        }
Example #9
0
        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());
        }
    }