Example #1
0
        public async Task CreateReturnsHttpBadRequestResultWhenEditItineraryReturnsZero()
        {
            var model = new ItineraryEditViewModel
            {
                EventId = 1,
                Name    = "Test",
                Date    = new DateTime(2016, 06, 01)
            };

            var mediator = new Mock <IMediator>();

            mediator.Setup(x => x.SendAsync(It.IsAny <EventSummaryQuery>())).ReturnsAsync(new EventSummaryViewModel {
                Id = 1, Name = "Event", OrganizationId = 1, StartDateTime = new DateTimeOffset(new DateTime(2016, 01, 01)), EndDateTime = new DateTimeOffset(new DateTime(2016, 12, 31))
            });
            mediator.Setup(x => x.SendAsync(It.IsAny <EditItineraryCommand>())).ReturnsAsync(0);

            var mockValidator = new Mock <IItineraryEditModelValidator>();

            mockValidator.Setup(mock => mock.Validate(It.IsAny <ItineraryEditViewModel>(), It.IsAny <EventSummaryViewModel>())).Returns(new List <KeyValuePair <string, string> >()).Verifiable();

            var sut = new ItineraryController(mediator.Object, mockValidator.Object);

            sut.SetClaims(new List <Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.SiteAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, "1")
            });

            var result = await sut.Create(model);

            Assert.IsType <BadRequestResult>(result);
        }
Example #2
0
        public async Task CreateCallsValidatorWithCorrectItineraryEditModelAndEventSummaryModel()
        {
            var model = new ItineraryEditViewModel
            {
                EventId = 1,
                Name    = "Test",
                Date    = new DateTime(2016, 06, 01)
            };

            var mediator = new Mock <IMediator>();

            var eventSummaryModel = new EventSummaryViewModel
            {
                Id = 1, Name = "Event", OrganizationId = 1, StartDateTime = new DateTimeOffset(new DateTime(2016, 01, 01)), EndDateTime = new DateTimeOffset(new DateTime(2016, 12, 31))
            };

            mediator.Setup(x => x.SendAsync(It.IsAny <EventSummaryQuery>())).ReturnsAsync(eventSummaryModel);
            mediator.Setup(x => x.SendAsync(It.IsAny <EditItineraryCommand>())).ReturnsAsync(1);

            var mockValidator = new Mock <IItineraryEditModelValidator>();

            mockValidator.Setup(mock => mock.Validate(model, eventSummaryModel)).Returns(new List <KeyValuePair <string, string> >()).Verifiable();

            var sut = new ItineraryController(mediator.Object, mockValidator.Object);

            sut.SetClaims(new List <Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.SiteAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, "1")
            });

            await sut.Create(model);

            mockValidator.Verify(x => x.Validate(model, eventSummaryModel), Times.Once);
        }
        public void ReturnsNoErrorForWhenDatesIsBetweenStartAndEndOfParentEvent()
        {
            var sut = new ItineraryEditModelValidator();

            var model = new ItineraryEditViewModel
            {
                EventId = 1,
                Date    = eventStartDate.AddDays(1).DateTime
            };

            var errors = sut.Validate(model, TestEvent);

            Assert.True(errors.Count == 0);
        }
        //this test case needs renaming, ESL alert :|
        public void ReturnsNoErrorForWhenDatesIsBetweenStartAndEndOfParentEventAndDateIsNotEarlierThanCurrentDateIfEventsDateIsInThePast()
        {
            var sut = new ItineraryEditModelValidator();

            var model = new ItineraryEditViewModel
            {
                EventId = 1,
                Date    = DateTimeOffset.Now.DateTime.Date
            };

            var errors = sut.Validate(model, TestEvent);

            Assert.True(errors.Count == 0);
        }
        public void ReturnsCorrectErrorWhenModelsDateIsGreaterThanParentEventEndDate()
        {
            var sut = new ItineraryEditModelValidator();

            var model = new ItineraryEditViewModel
            {
                EventId = 1,
                Date    = eventEndDate.AddDays(1).DateTime
            };

            var errors = sut.Validate(model, TestEvent);

            Assert.True(errors.Exists(x => x.Key.Equals("Date")));
            Assert.Equal(errors.Find(x => x.Key == "Date").Value, "Date cannot be later than the event end date " + eventEndDate.Date.ToString("d"));
        }
        public void ReturnsCorrectErrorWhenEventStartDateIsEarlierThanTodayAndModelsDateIsEarlierThenCurrentDate()
        {
            var sut = new ItineraryEditModelValidator();

            var model = new ItineraryEditViewModel
            {
                EventId = 1,
                Date    = DateTimeOffset.Now.DateTime.AddDays(-1)
            };

            var errors = sut.Validate(model, TestEvent);

            Assert.True(errors.Exists(x => x.Key.Equals("Date")));
            Assert.Equal(errors.Find(x => x.Key == "Date").Value, "Date cannot be earlier than the current date if the event start date is in the past " + eventEndDate.Date.ToString("d"));
        }
        public void ReturnCorrectError_WhenItineraryDate_IsLessThanEventStartDate()
        {
            var sut = new ItineraryEditModelValidator();

            var model = new ItineraryEditViewModel
            {
                EventId = 1,
                Date    = _eventStartDate.AddDays(-1).DateTime
            };

            var errors = sut.Validate(model, TestEvent);

            Assert.True(errors.Exists(x => x.Key.Equals("Date")));
            Assert.Equal(errors.Find(x => x.Key == "Date").Value, "Date cannot be earlier than the event start date " + _eventStartDate.Date.ToString("d"));
        }
Example #8
0
        public List <KeyValuePair <string, string> > Validate(ItineraryEditViewModel model, EventSummaryViewModel eventSummary)
        {
            var result = new List <KeyValuePair <string, string> >();

            if (model.Date < eventSummary.StartDateTime.Date)
            {
                result.Add(new KeyValuePair <string, string>(nameof(model.Date), "Date cannot be earlier than the event start date " + eventSummary.StartDateTime.Date.ToString("d")));
            }

            if (model.Date > eventSummary.EndDateTime.Date)
            {
                result.Add(new KeyValuePair <string, string>(nameof(model.Date), "Date cannot be later than the event end date " + eventSummary.EndDateTime.Date.ToString("d")));
            }

            return(result);
        }
Example #9
0
        public List <KeyValuePair <string, string> > Validate(ItineraryEditViewModel model, EventSummaryViewModel eventSummary)
        {
            var result = new List <KeyValuePair <string, string> >();

            var itineraryDateConverted = ConvertIntineraryDateToEventsTimeZone(model.Date, eventSummary.TimeZoneId);

            if (itineraryDateConverted.Date < eventSummary.StartDateTime.Date)
            {
                result.Add(new KeyValuePair <string, string>(nameof(model.Date), $"Date cannot be earlier than the event start date {eventSummary.StartDateTime.Date:d}"));
            }

            if (itineraryDateConverted.Date > eventSummary.EndDateTime.Date)
            {
                result.Add(new KeyValuePair <string, string>(nameof(model.Date), $"Date cannot be later than the event end date {eventSummary.EndDateTime.Date:d}"));
            }

            return(result);
        }
Example #10
0
        public async Task CreateSendsEventSummaryQueryWithCorrectEventId()
        {
            var model = new ItineraryEditViewModel
            {
                EventId = 1,
                Name    = "Test",
                Date    = new DateTime(2016, 06, 01)
            };

            var mockMediator = new Mock <IMediator>();

            mockMediator.Setup(x => x.SendAsync(It.IsAny <EventSummaryQuery>()))
            .ReturnsAsync(It.IsAny <EventSummaryViewModel>()).Verifiable();

            var sut = new ItineraryController(mockMediator.Object, MockSuccessValidation().Object);
            await sut.Create(model);

            mockMediator.Verify(x => x.SendAsync(It.Is <EventSummaryQuery>(y => y.EventId == model.EventId)), Times.Once);
        }
        public async Task <IActionResult> Edit(ItineraryEditViewModel model)
        {
            if (model == null)
            {
                return(BadRequest());
            }

            var itinerary = await _mediator.SendAsync(new ItinerarySummaryQuery()
            {
                ItineraryId = model.Id
            });

            if (itinerary == null)
            {
                return(BadRequest());
            }

            var authorizableItinerary = await _mediator.SendAsync(new AuthorizableItineraryQuery(model.Id));

            if (!await authorizableItinerary.UserCanEdit())
            {
                return(new ForbidResult());
            }

            model.Date = itinerary.Date; // we currently don't allow the date to be changed via edit

            // todo - sgordon: add additional validation for address scenarios - enhance this later
            var errors = _itineraryValidator.Validate(model, itinerary.EventSummary);

            errors.ToList().ForEach(e => ModelState.AddModelError(e.Key, e.Value));

            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            await _mediator.SendAsync(new EditItineraryCommand { Itinerary = model });

            return(RedirectToAction(nameof(Details), new { area = "Admin", id = model.Id }));
        }
        public async Task <IActionResult> Create(ItineraryEditViewModel model)
        {
            if (model == null)
            {
                return(BadRequest());
            }

            var campaignEvent = await _mediator.SendAsync(new EventSummaryQuery { EventId = model.EventId });

            if (campaignEvent == null)
            {
                return(BadRequest());
            }

            var authorizableEvent = await _mediator.SendAsync(new AuthorizableEventQuery(campaignEvent.Id));

            if (!await authorizableEvent.UserCanEdit())
            {
                return(new ForbidResult());
            }

            var errors = _itineraryValidator.Validate(model, campaignEvent);

            errors.ToList().ForEach(e => ModelState.AddModelError(e.Key, e.Value));

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var result = await _mediator.SendAsync(new EditItineraryCommand { Itinerary = model });

            if (result > 0)
            {
                return(Ok(result));
            }

            return(BadRequest());
        }
Example #13
0
        public async Task <IActionResult> PutItinerary(int id, ItineraryEditViewModel ievm)
        {
            if (id != ievm.Id)
            {
                return(BadRequest());
            }

            var userId = HttpContext.GetUserId();

            var itinerary = new Itinerary()
            {
                Id          = ievm.Id,
                Name        = ievm.Name,
                DateOfEvent = ievm.DateOfEvent,
                City        = ievm.City,
                State       = ievm.State,
                UserId      = userId
            };

            _context.Entry(itinerary).State = EntityState.Modified;

            try
            {
                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException ex)
            {
                if (!ItineraryExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw ex;
                }
            }

            return(Ok(itinerary));
        }