public void ReturnsCorrectErrorWhenEndDateTimeIsLessThanStartDateTime() { var validator = new EventDetailModelValidator(); var parentCampaign = new CampaignSummaryModel { EndDate = new DateTimeOffset(new DateTime(1999, 2, 1)) }; var model = new EventDetailModel { StartDateTime = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDateTime = new DateTimeOffset(new DateTime(1999, 1, 1)) }; var errors = validator.Validate(model, parentCampaign); Assert.True(errors.Exists(x => x.Key.Equals("EndDateTime"))); Assert.Equal(errors.Find(x => x.Key == "EndDateTime").Value, "End date cannot be earlier than the start date"); }
public async Task <IActionResult> Edit(EventDetailModel campaignEvent, IFormFile fileUpload) { if (campaignEvent == null) { return(HttpBadRequest()); } var organizationId = _mediator.Send(new ManagingOrganizationIdByEventIdQuery { EventId = campaignEvent.Id }); if (!User.IsOrganizationAdmin(organizationId)) { return(HttpUnauthorized()); } var campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = campaignEvent.CampaignId }); var validator = new EventDetailModelValidator(_mediator); var errors = await validator.Validate(campaignEvent, campaign); errors.ForEach(e => ModelState.AddModelError(e.Key, e.Value)); if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { campaignEvent.ImageUrl = await _imageService.UploadEventImageAsync(campaign.OrganizationId, campaignEvent.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View(campaignEvent)); } } var id = await _mediator.SendAsync(new EditEventCommand { Event = campaignEvent }); return(RedirectToAction(nameof(Details), new { area = "Admin", id = id })); } return(View(campaignEvent)); }
public async Task ReportErrorsWhenEndDateIsInvalid() { // arrage var mediator = new Mock<IMediator>(); var validator = new EventDetailModelValidator(mediator.Object); var campaign = new CampaignSummaryModel(); var model = new EventDetailModel { StartDateTime = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDateTime = new DateTimeOffset(new DateTime(1999, 1, 1)) }; // act var errors = await validator.Validate(model, campaign); // assert Assert.True(errors.Exists(x => x.Key.Equals("EndDateTime"))); }
public async Task ReportErrorsWhenEndDateIsInvalid() { // arrage var mediator = new Mock <IMediator>(); var validator = new EventDetailModelValidator(mediator.Object); var campaign = new CampaignSummaryModel(); var model = new EventDetailModel { StartDateTime = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDateTime = new DateTimeOffset(new DateTime(1999, 1, 1)) }; // act var errors = await validator.Validate(model, campaign); // assert Assert.True(errors.Exists(x => x.Key.Equals("EndDateTime"))); }
public async Task <IActionResult> Create(int campaignId, EventDetailModel campaignEvent, IFormFile fileUpload) { var campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = campaignId }); if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } var validator = new EventDetailModelValidator(_mediator); var errors = await validator.Validate(campaignEvent, campaign); errors.ToList().ForEach(e => ModelState.AddModelError(e.Key, e.Value)); //TryValidateModel is called explictly because of MVC 6 behavior that supresses model state validation during model binding when binding to an IFormFile. //See #619. if (ModelState.IsValid && TryValidateModel(campaignEvent)) { if (fileUpload != null) { if (!fileUpload.IsAcceptableImageContentType()) { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View("Edit", campaignEvent)); } } campaignEvent.OrganizationId = campaign.OrganizationId; var id = await _mediator.SendAsync(new EditEventCommand { Event = campaignEvent }); if (fileUpload != null) { // resave now that event has the ImageUrl campaignEvent.Id = id; campaignEvent.ImageUrl = await _imageService.UploadEventImageAsync(campaign.OrganizationId, id, fileUpload); await _mediator.SendAsync(new EditEventCommand { Event = campaignEvent }); } return(RedirectToAction(nameof(Details), new { area = "Admin", id = id })); } return(View("Edit", campaignEvent)); }
public void RetrunsCorrectErrorWhenModelsEndDateTimeIsGreaterThanParentCampaignsEndDate() { var validator = new EventDetailModelValidator(); var parentCampaign = new CampaignSummaryModel { StartDate = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDate = new DateTimeOffset(new DateTime(2001, 1, 1)) }; var model = new EventDetailModel { StartDateTime = new DateTimeOffset(new DateTime(2001, 1, 1)), EndDateTime = new DateTimeOffset(new DateTime(2001, 2, 1)), }; var errors = validator.Validate(model, parentCampaign); Assert.True(errors.Exists(x => x.Key.Equals("EndDateTime"))); Assert.Equal(errors.Find(x => x.Key == "EndDateTime").Value, "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d")); }
public async Task ReportErrorsWhenPostalCodeInvalid() { // arrage var mediator = new Mock<IMediator>(); var validator = new EventDetailModelValidator(mediator.Object); var campaign = new CampaignSummaryModel(); var model = new EventDetailModel { Location = new LocationEditModel() { PostalCode = "12345", State = "WA", City = "Seattle" } }; // act var errors = await validator.Validate(model, campaign); // assert Assert.True(errors.Exists(x => x.Key.Equals("PostalCode"))); }
public async Task ReportErrorsWhenPostalCodeInvalid() { // arrage var mediator = new Mock <IMediator>(); var validator = new EventDetailModelValidator(mediator.Object); var campaign = new CampaignSummaryModel(); var model = new EventDetailModel { Location = new LocationEditModel() { PostalCode = "12345", State = "WA", City = "Seattle" } }; // act var errors = await validator.Validate(model, campaign); // assert Assert.True(errors.Exists(x => x.Key.Equals("PostalCode"))); }
public async Task<IActionResult> Create(int campaignId, EventDetailModel campaignEvent, IFormFile fileUpload) { var campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = campaignId }); if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId)) { return HttpUnauthorized(); } var validator = new EventDetailModelValidator(_mediator); var errors = await validator.Validate(campaignEvent, campaign); errors.ToList().ForEach(e => ModelState.AddModelError(e.Key, e.Value)); //TryValidateModel is called explictly because of MVC 6 behavior that supresses model state validation during model binding when binding to an IFormFile. //See #619. if (ModelState.IsValid && TryValidateModel(campaignEvent)) { if (fileUpload != null) { if (!fileUpload.IsAcceptableImageContentType()) { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return View("Edit", campaignEvent); } } campaignEvent.OrganizationId = campaign.OrganizationId; var id = await _mediator.SendAsync(new EditEventCommand { Event = campaignEvent }); if (fileUpload != null) { // resave now that event has the ImageUrl campaignEvent.Id = id; campaignEvent.ImageUrl = await _imageService.UploadEventImageAsync(campaign.OrganizationId, id, fileUpload); await _mediator.SendAsync(new EditEventCommand { Event = campaignEvent }); } return RedirectToAction(nameof(Details), new { area = "Admin", id = id }); } return View("Edit", campaignEvent); }
public async Task<IActionResult> Edit(EventDetailModel campaignEvent, IFormFile fileUpload) { if (campaignEvent == null) { return HttpBadRequest(); } var organizationId = _mediator.Send(new ManagingOrganizationIdByEventIdQuery { EventId = campaignEvent.Id }); if (!User.IsOrganizationAdmin(organizationId)) { return HttpUnauthorized(); } var campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = campaignEvent.CampaignId }); var validator = new EventDetailModelValidator(_mediator); var errors = await validator.Validate(campaignEvent, campaign); errors.ForEach(e => ModelState.AddModelError(e.Key, e.Value)); if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { campaignEvent.ImageUrl = await _imageService.UploadEventImageAsync(campaign.OrganizationId, campaignEvent.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return View(campaignEvent); } } var id = await _mediator.SendAsync(new EditEventCommand { Event = campaignEvent }); return RedirectToAction(nameof(Details), new { area = "Admin", id = id }); } return View(campaignEvent); }