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); }
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")); }
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); }
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); }
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()); }
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)); }