public ActionResult Update(AddSportEventViewModel viewModel)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    _sportEventManager.EditSportEvent(viewModel.SportEvent);
                    TempData["notification"] = viewModel.SportEvent.Name.UpdateMessage("Sportevent");
                    return(RedirectToAction("Index"));
                }
                catch (DbUpdateException db)
                {
                    TempData["notification"] = viewModel.SportEvent.Name.InUseRemoveMessage("Sportevent");
                }
                catch (Exception e)
                {
                    TempData["notification"] = viewModel.SportEvent.Name.ErrorUpdateMessage("Sportevent");
                }
            }
            else
            {
                TempData["notification"] = viewModel.SportEvent.Name.ErrorUpdateMessage("Sportevent");
            }
            var sports = _sportManager.SportsList();

            viewModel.Sports = sports;

            return(View("Update", viewModel));
        }
        public Task BindModelAsync(ModelBindingContext modelBindingContext)
        {
            if (!DateTime.TryParse(
                    modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.EventStartTime.Date"],
                    out var dateTime) ||
                !TimeSpan.TryParse(
                    modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.EventEndTime.Time"],
                    out var timeFinishTime) ||
                !TimeSpan.TryParse(
                    modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.EventStartTime.Time"],
                    out var timeStartTime) ||
                !int.TryParse(modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.SportId"],
                              out var sportId) ||
                !int.TryParse(modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.MinAttendees"],
                              out var minAttendees) ||
                !int.TryParse(modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.MaxAttendees"],
                              out var maxAttendees) ||
                !int.TryParse(modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.SportEventId"],
                              out var sportEventId)
                )
            {
                var modelfail = new AddSportEventViewModel()
                {
                    SportEvent = new SportEvent
                    {
                        Description    = modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.Description"],
                        EventEndTime   = dateTime.Add(timeFinishTime),
                        EventStartTime = dateTime.Add(timeStartTime),
                        Name           = modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.Name"],
                        MinAttendees   = 0,
                        MaxAttendees   = 0,
                    },
                    AddReservation = true
                };

                modelBindingContext.Result = ModelBindingResult.Success(modelfail);


                return(Task.CompletedTask);
            }

            var model = new AddSportEventViewModel()
            {
                SportEvent = new SportEvent
                {
                    Description    = modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.Description"],
                    EventEndTime   = dateTime.Add(timeFinishTime),
                    EventStartTime = dateTime.Add(timeStartTime),
                    Name           = modelBindingContext.ActionContext.HttpContext.Request.Form["SportEvent.Name"],
                    MinAttendees   = minAttendees,
                    MaxAttendees   = maxAttendees,
                    SportId        = sportId,
                    SportEventId   = sportEventId
                },
                AddReservation = false
            };

            modelBindingContext.Result = ModelBindingResult.Success(model);
            return(Task.CompletedTask);
        }
        public ViewResult Add()
        {
            var sports = _sportManager.SportsList();
            var addSportEventViewModel = new AddSportEventViewModel
            {
                Sports = sports
            };

            return(View(addSportEventViewModel));
        }
        public ActionResult Update(int sportEventId)
        {
            var        sports                 = _sportManager.SportsList();
            SportEvent sportEventToUpdate     = _sportEventManager.ViewSportEvent(sportEventId);
            var        addSportEventViewModel = new AddSportEventViewModel
            {
                SportEvent = sportEventToUpdate,
                Sports     = sports
            };

            return(View(addSportEventViewModel));
        }
        public void TestUpdateSportEventGetRequestsReturnsViewWithSportEventModel()
        {
            //Arrange
            var dummySportEvent = new SportEvent
            {
                Name           = "Voetbaltoernooi",
                Description    = "Potje voetballen voor de starters",
                MaxAttendees   = 5,
                MinAttendees   = 20,
                SportId        = 2,
                EventStartTime = DateTime.Today.AddHours(11),
                EventEndTime   = DateTime.Today.AddHours(13)
            };
            var sports = new[]
            {
                new Sport {
                    Name = "Voetbal"
                },
                new Sport {
                    Name = "Basketbal"
                },
                new Sport {
                    Name = "Hockey"
                },
                new Sport {
                    Name = "Volleybal"
                },
            };

            var addSportEventViewModel = new AddSportEventViewModel
            {
                SportEvent = dummySportEvent,
                Sports     = sports
            };


            var mockSportManager      = new Mock <ISportManager>();
            var mockSportEventManager = new Mock <ISportEventManager>();
            var controller            = new SportEventController(mockSportEventManager.Object, mockSportManager.Object);

            mockSportManager.Setup(sm => sm.SportsList()).Returns(sports);
            mockSportEventManager.Setup(sm => sm.ViewSportEvent(It.IsAny <int>())).Returns(dummySportEvent);

            //Act
            var result    = controller.Update(1) as ViewResult;
            var viewModel = (AddSportEventViewModel)result.Model;

            //Assert
            Assert.IsType(typeof(ViewResult), result);
            Assert.Equal(4, viewModel.Sports.Count());
        }
        public void TestAddSportEventGetViewThatContainsListOfSports()
        {
            //Arrange
            var sports = new[]
            {
                new Sport {
                    Name = "Voetbal"
                },
                new Sport {
                    Name = "Basketbal"
                },
                new Sport {
                    Name = "Hockey"
                },
                new Sport {
                    Name = "Volleybal"
                }
            };

            var addSportEventViewModel = new AddSportEventViewModel
            {
                Sports         = sports,
                AddReservation = false
            };

            var mockSportManager      = new Mock <ISportManager>();
            var mockSportEventManager = new Mock <ISportEventManager>();

            var controller = new SportEventController(mockSportEventManager.Object, mockSportManager.Object);

            mockSportManager.Setup(sm => sm.SportsList()).Returns(sports);

            //Act
            var result    = controller.Add();
            var viewModel = (AddSportEventViewModel)result.Model;

            //Assert
            Assert.IsType(typeof(ViewResult), result);
            Assert.Equal(4, viewModel.Sports.Count());
        }
        public void TestUpdateSportEventPostRequestModelStateInvalidReturnsToIndex()
        {
            //Arrange
            var dummySportEvent = new SportEvent
            {
                Name           = "Voetbaltoernooi",
                Description    = "Potje voetballen voor de starters",
                MaxAttendees   = 5,
                MinAttendees   = 20,
                SportId        = 2,
                EventStartTime = DateTime.Today.AddHours(11),
                EventEndTime   = DateTime.Today.AddHours(13)
            };

            var addSportEventViewModel = new AddSportEventViewModel
            {
                SportEvent = dummySportEvent
            };

            var mockSportManager      = new Mock <ISportManager>();
            var mockSportEventManager = new Mock <ISportEventManager>();
            var mockTempData          = new Mock <ITempDataDictionary>();
            var controller            = new SportEventController(mockSportEventManager.Object, mockSportManager.Object)
            {
                TempData = mockTempData.Object
            };

            controller.ModelState.AddModelError("key", "error message");

            mockSportEventManager.Setup(sm => sm.EditSportEvent(It.IsAny <SportEvent>())).Returns(true);

            //Act
            var result = controller.Update(addSportEventViewModel) as ViewResult;


            //Assert
            Assert.IsType(typeof(ViewResult), result);
            Assert.Same("Update", result.ViewName);
        }
        public void TestAddModelInvalidSportEventReturnsAddViewWithErrorMessage()
        {
            //Arrange
            var dummySportEvent = new SportEvent
            {
                Name           = "Voetbaltoernooi",
                Description    = "Potje voetballen voor de starters",
                MaxAttendees   = 5,
                MinAttendees   = 20,
                SportId        = 2,
                EventStartTime = DateTime.Today.AddHours(11),
                EventEndTime   = DateTime.Today.AddHours(13)
            };

            var addSportEventViewModel = new AddSportEventViewModel
            {
                SportEvent     = dummySportEvent,
                AddReservation = false
            };

            var mockSportManager      = new Mock <ISportManager>();
            var mockSportEventManager = new Mock <ISportEventManager>();
            var mockTempData          = new Mock <ITempDataDictionary>();
            var controller            = new SportEventController(mockSportEventManager.Object, mockSportManager.Object)
            {
                TempData = mockTempData.Object
            };

            controller.ModelState.AddModelError("key", "error message");


            //Act
            var result = controller.Add(addSportEventViewModel) as ViewResult;

            //Assert
            Assert.IsType(typeof(ViewResult), result);
        }
        public void TestAddSportEventReturnsToAddMethodInReservationControllerAction()
        {
            //Arrange
            var dummySportEvent = new SportEvent
            {
                Name           = "Voetbaltoernooi",
                Description    = "Potje voetballen voor de starters",
                MaxAttendees   = 30,
                MinAttendees   = 22,
                SportId        = 2,
                EventStartTime = DateTime.Today.AddHours(11),
                EventEndTime   = DateTime.Today.AddHours(13)
            };

            var addSportEventViewModel = new AddSportEventViewModel
            {
                SportEvent     = dummySportEvent,
                AddReservation = true
            };

            var mockSportManager      = new Mock <ISportManager>();
            var mockSportEventManager = new Mock <ISportEventManager>();
            var mockTempData          = new Mock <ITempDataDictionary>();
            var controller            = new SportEventController(mockSportEventManager.Object, mockSportManager.Object)
            {
                TempData = mockTempData.Object
            };

            mockSportEventManager.Setup(x => x.AddSportEvent(It.IsAny <SportEvent>())).Returns(true);

            //Act
            var result = controller.Add(addSportEventViewModel) as RedirectToActionResult;

            //Assert
            Assert.IsType(typeof(RedirectToActionResult), result);
            Assert.Same("Index", result.ActionName);
        }