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(); } if (!User.IsOrganizationAdmin(campaignEvent.OrganizationId)) { return Unauthorized(); } 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 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 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 EditPost_ReturnsRedirect_AfterCommandIsSent() { var model = new ItineraryEditViewModel { Id = 1, EventId = 1, Name = "Test", Date = new DateTime(2016, 06, 01) }; var mediator = new Mock<IMediator>(); var itinerarySummaryModel = new ItinerarySummaryViewModel { Id = 1, Name = "Itinerary", OrganizationId = 1, EventSummary = new EventSummaryViewModel { StartDateTime = new DateTimeOffset(new DateTime(2016, 01, 01)), EndDateTime = new DateTimeOffset(new DateTime(2016, 12, 31)) } }; mediator.Setup(x => x.SendAsync(It.IsAny<ItinerarySummaryQuery>())).ReturnsAsync(itinerarySummaryModel); 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>>()); 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.Edit(model); var redirectResult = Assert.IsType<RedirectToActionResult>(result); redirectResult.ActionName.ShouldBe("Details"); var id = redirectResult.RouteValues["id"]; id.ShouldNotBeNull(); id.ShouldBe(model.Id); }
public async Task EditPost_SendsEditItineraryCommand_WithCorrectItineraryEditModel() { var model = new ItineraryEditViewModel { EventId = 1, Name = "Test", Date = new DateTime(2016, 06, 01) }; var mediator = new Mock<IMediator>(); var itinerarySummaryModel = new ItinerarySummaryViewModel { Id = 1, Name = "Itinerary", OrganizationId = 1, EventSummary = new EventSummaryViewModel { StartDateTime = new DateTimeOffset(new DateTime(2016, 01, 01)), EndDateTime = new DateTimeOffset(new DateTime(2016, 12, 31)) } }; mediator.Setup(x => x.SendAsync(It.IsAny<ItinerarySummaryQuery>())).ReturnsAsync(itinerarySummaryModel); mediator.Setup(x => x.SendAsync(It.IsAny<EditItineraryCommand>())).ReturnsAsync(0).Verifiable(); var mockValidator = new Mock<IItineraryEditModelValidator>(); mockValidator.Setup(mock => mock.Validate(It.IsAny<ItineraryEditViewModel>(), It.IsAny<EventSummaryViewModel>())).Returns(new List<KeyValuePair<string, string>>()); 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.Edit(model); mediator.Verify(x => x.SendAsync(It.Is<EditItineraryCommand>(y => y.Itinerary == model)), Times.Once); }
public async Task EditPost_ReturnsViewWithModel_WhenValidatonFails() { var model = new ItineraryEditViewModel { EventId = 1, Name = "Test", Date = new DateTime(2016, 06, 01) }; var mediator = new Mock<IMediator>(); var itinerarySummaryModel = new ItinerarySummaryViewModel { Id = 1, Name = "Itinerary", OrganizationId = 1, EventSummary = new EventSummaryViewModel { StartDateTime = new DateTimeOffset(new DateTime(2016, 01, 01)), EndDateTime = new DateTimeOffset(new DateTime(2016, 12, 31)) } }; mediator.Setup(x => x.SendAsync(It.IsAny<ItinerarySummaryQuery>())).ReturnsAsync(itinerarySummaryModel); var validatorError = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("key", "value") }; var mockValidator = new Mock<IItineraryEditModelValidator>(); mockValidator.Setup(mock => mock.Validate(It.IsAny<ItineraryEditViewModel>(), It.IsAny<EventSummaryViewModel>())).Returns(validatorError); 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.Edit(model); var viewResult = Assert.IsType<ViewResult>(result); var resultViewModel = viewResult.ViewData.Model; Assert.IsType<ItineraryEditViewModel>(resultViewModel); Assert.Equal(resultViewModel, model); }
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 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(); } if (!User.IsOrganizationAdmin(itinerary.OrganizationId)) { return Unauthorized(); } 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 CreateReturnsHttpBadRequestResultWhenModelStateHasError() { var model = new ItineraryEditViewModel { EventId = 1, Date = new DateTime(2016, 06, 01) }; var sut = GetItineraryControllerWithEventSummaryQuery(UserType.SiteAdmin.ToString(), 0); sut.ModelState.AddModelError("key", "Error"); var result = await sut.Create(model); Assert.IsType<BadRequestObjectResult>(result); }
public async Task CreateReturnsOkResultWhenUserIsSiteAdmin_AndModelIsValid_AndSuccessfulAdd() { var model = new ItineraryEditViewModel { EventId = 1, Name = "Test", Date = new DateTime(2016, 06, 01) }; var sut = GetItineraryControllerWithEventSummaryQuery(UserType.SiteAdmin.ToString(), 0); Assert.IsType<OkObjectResult>(await sut.Create(model)); }
public async Task CreateReturnsHttpUnauthorizedResultWhenUserIsNotOrgAdminForEventOrg() { var model = new ItineraryEditViewModel { EventId = 1, Name = "Test", Date = new DateTime(2016, 06, 01) }; var sut = GetItineraryControllerWithEventSummaryQuery(UserType.OrgAdmin.ToString(), 5); Assert.IsType<UnauthorizedResult>(await sut.Create(model)); }