public async Task<Dictionary<string, string>> Validate (CampaignSummaryModel model) { var result = new Dictionary<string, string>(); if (model.EndDate < model.StartDate) { result.Add(nameof(model.EndDate), "The end date must fall on or after the start date."); } // Temporary code to avoid current database update error when the post code geo does not exist in the database. if (!string.IsNullOrEmpty(model.Location?.PostalCode)) { bool validPostcode = await _mediator.SendAsync(new CheckValidPostcodeQueryAsync { Postcode = new PostalCodeGeo { City = model.Location.City, State = model.Location.State, PostalCode = model.Location.PostalCode } }); if (!validPostcode) { result.Add(nameof(model.Location.PostalCode), "The city, state and postal code combination is not valid"); } } return result; }
public async Task <Dictionary <string, string> > Validate(CampaignSummaryModel model) { var result = new Dictionary <string, string>(); if (model.EndDate < model.StartDate) { result.Add(nameof(model.EndDate), "The end date must fall on or after the start date."); } // Temporary code to avoid current database update error when the post code geo does not exist in the database. if (!string.IsNullOrEmpty(model.Location?.PostalCode)) { bool validPostcode = await _mediator.SendAsync(new CheckValidPostcodeQueryAsync { Postcode = new PostalCodeGeo { City = model.Location.City, State = model.Location.State, PostalCode = model.Location.PostalCode } }); if (!validPostcode) { result.Add(nameof(model.Location.PostalCode), "The city, state and postal code combination is not valid"); } } return(result); }
private static CampaignController CampaignControllerWithSummaryModel(CampaignSummaryModel model, AllReadyContext Context, string userType) { var mockMediator = new Mock <IMediator>(); IAsyncRequest <int> command = new EditCampaignCommand() { Campaign = model }; mockMediator.Setup(x => x.SendAsync(It.IsAny <EditCampaignCommand>())) .Returns(() => { IAsyncRequestHandler <EditCampaignCommand, int> handler = new EditCampaignCommandHandler(Context); return(handler.Handle((EditCampaignCommand)command)); }); var mockImageService = new Mock <IImageService>(); var controller = new CampaignController(mockMediator.Object, mockImageService.Object); controller.SetClaims(new List <Claim> { new Claim(AllReady.Security.ClaimTypes.UserType, userType), new Claim(AllReady.Security.ClaimTypes.Organization, model.OrganizationId.ToString()) }); return(controller); }
public async Task <IActionResult> Edit(CampaignSummaryModel campaign, IFormFile fileUpload) { if (campaign == null) { return(HttpBadRequest()); } if (!User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { campaign.ImageUrl = await _imageService.UploadCampaignImageAsync(campaign.OrganizationId, campaign.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View(campaign)); } } int id = _bus.Send(new EditCampaignCommand { Campaign = campaign }); return(RedirectToAction("Details", new { area = "Admin", id = id })); } return(View(campaign)); }
public IActionResult Create(int campaignId) { CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery { CampaignId = campaignId }); if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } var activity = new ActivityDetailModel { CampaignId = campaign.Id, CampaignName = campaign.Name, TimeZoneId = campaign.TimeZoneId, OrganizationId = campaign.OrganizationId, OrganizationName = campaign.OrganizationName, StartDateTime = DateTime.Today.Date, EndDateTime = DateTime.Today.Date.AddMonths(1) }; return(View("Edit", activity)); }
public async Task <IActionResult> Create(int campaignId, ActivityDetailModel activity, IFormFile fileUpload) { if (activity.EndDateTime < activity.StartDateTime) { ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be earlier than the start date"); } CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery { CampaignId = campaignId }); if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } if (activity.StartDateTime < campaign.StartDate) { ModelState.AddModelError(nameof(activity.StartDateTime), "Start date cannot be earlier than the campaign start date " + campaign.StartDate.ToString("d")); } if (activity.EndDateTime > campaign.EndDate) { ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be later than the campaign end date " + campaign.EndDate.ToString("d")); } if (ModelState.IsValid) { 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", activity)); } } activity.OrganizationId = campaign.OrganizationId; var id = _mediator.Send(new EditActivityCommand { Activity = activity }); if (fileUpload != null) { // resave now that activity has the ImageUrl activity.Id = id; activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, id, fileUpload); _mediator.Send(new EditActivityCommand { Activity = activity }); } return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id })); } return(View("Edit", activity)); }
public void CreateReturnsCorrectViewWithCorrectViewModel() { var mockMediator = new Mock<IMediator>(); CampaignController controller = new CampaignController(mockMediator.Object, null); ViewResult view = (ViewResult) controller.Create(); CampaignSummaryModel viewModel = (CampaignSummaryModel)view.ViewData.Model; Assert.Equal(view.ViewName, "Edit"); Assert.NotNull(viewModel); }
public async Task <IActionResult> Edit(ActivityDetailModel activity, IFormFile fileUpload) { if (activity == null) { return(HttpBadRequest()); } //TODO: Use the query pattern here int organizationId = _dataAccess.GetManagingOrganizationId(activity.Id); if (!User.IsOrganizationAdmin(organizationId)) { return(HttpUnauthorized()); } if (activity.EndDateTime < activity.StartDateTime) { ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be earlier than the start date"); } CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery { CampaignId = activity.CampaignId }); if (activity.StartDateTime < campaign.StartDate) { ModelState.AddModelError(nameof(activity.StartDateTime), "Start date cannot be earlier than the campaign start date " + campaign.StartDate.ToString("d")); } if (activity.EndDateTime > campaign.EndDate) { ModelState.AddModelError(nameof(activity.EndDateTime), "End date cannot be later than the campaign end date " + campaign.EndDate.ToString("d")); } if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, activity.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View(activity)); } } var id = _mediator.Send(new EditActivityCommand { Activity = activity }); return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id })); } return(View(activity)); }
protected void AssertSummary(CampaignSummaryModel expectedModel, CampaignSummaryModel model) { Assert.AreEqual(expectedModel.CreatedBy.Id, model.CreatedBy.Id); Assert.AreEqual(expectedModel.IsReadOnly, model.IsReadOnly); AssertCampaign(expectedModel.Campaign, model.Campaign); if (expectedModel.Template == null) { Assert.IsNull(model.Template); } else { AssertTemplate(expectedModel.Template, model.Template); } }
public async Task <IActionResult> Create(int campaignId, ActivityDetailModel activity, IFormFile fileUpload) { CampaignSummaryModel campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = campaignId }); if (campaign == null || !User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } var validator = new ActivityDetailModelValidator(_mediator); var errors = await validator.Validate(activity, 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(activity)) { 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", activity)); } } activity.OrganizationId = campaign.OrganizationId; var id = _mediator.Send(new EditActivityCommand { Activity = activity }); if (fileUpload != null) { // resave now that activity has the ImageUrl activity.Id = id; activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, id, fileUpload); _mediator.Send(new EditActivityCommand { Activity = activity }); } return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id })); } return(View("Edit", activity)); }
public IActionResult DeleteConfirmed(int id) { CampaignSummaryModel campaign = _bus.Send(new CampaignSummaryQuery { CampaignId = id }); if (!User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } _bus.Send(new DeleteCampaignCommand { CampaignId = id }); return(RedirectToAction("Index", new { area = "Admin" })); }
public async Task<Dictionary<string, string>> Validate (CampaignSummaryModel model) { var result = new Dictionary<string, string>(); if (model.EndDate < model.StartDate) { result.Add(nameof(model.EndDate), "The end date must fall on or after the start date."); } var postalCodeValidation = new LocationEditModelValidator(_mediator); var postalCodeErrors = await postalCodeValidation.Validate(model.Location); postalCodeErrors.ToList().ForEach(e => result.Add(e.Key, e.Value)); return result; }
public async Task AddNewCampaign() { // Arrange var handler = new EditCampaignCommandHandler(Context); var newCampaign = new CampaignSummaryModel { Name = "New", Description = "Desc", TimeZoneId = "UTC" }; // Act var result = await handler.Handle(new EditCampaignCommand { Campaign = newCampaign }); // Assert Assert.Equal(5, Context.Campaigns.Count()); Assert.True(result > 0); }
public async Task EditPostAddsCorrectKeyAndErrorMessageToModelStateWhenCampaignEndDateIsLessThanCampainStartDate() { var campaignSummaryModel = new CampaignSummaryModel { OrganizationId = 1, StartDate = DateTime.Now.AddDays(1), EndDate = DateTime.Now.AddDays(-1)}; var sut = new CampaignController(null, null); sut.SetClaims(new List<Claim> { new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()), new Claim(AllReady.Security.ClaimTypes.Organization, campaignSummaryModel.OrganizationId.ToString()) }); await sut.Edit(campaignSummaryModel, null); var modelStateErrorCollection = sut.ModelState.GetErrorMessagesByKey(nameof(CampaignSummaryModel.EndDate)); Assert.Equal(modelStateErrorCollection.Single().ErrorMessage, "The end date must fall on or after the start date."); }
public async Task DeleteReturnsCorrectViewModelWhenUserIsOrgAdmin() { int ORGANIZATION_ID = 99; int CAMPAIGN_ID = 100; var mockMediator = new Mock<IMediator>(); mockMediator.Setup(mock => mock.SendAsync(It.Is<CampaignSummaryQuery>(c => c.CampaignId == CAMPAIGN_ID))).ReturnsAsync(new CampaignSummaryModel { Id = CAMPAIGN_ID, OrganizationId = ORGANIZATION_ID }); CampaignController controller = new CampaignController(mockMediator.Object, null); controller.SetClaims(new List<Claim> { new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()), new Claim(AllReady.Security.ClaimTypes.Organization, ORGANIZATION_ID.ToString()) }); ViewResult view = (ViewResult)(await controller.Delete(CAMPAIGN_ID)); CampaignSummaryModel viewModel = (CampaignSummaryModel)view.ViewData.Model; Assert.Equal(viewModel.Id, CAMPAIGN_ID); }
// GET: Campaign/Delete/5 public IActionResult Delete(int id) { CampaignSummaryModel campaign = _mediator.Send(new CampaignSummaryQuery { CampaignId = id }); if (campaign == null) { return(HttpNotFound()); } if (!User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } return(View(campaign)); }
public void ReturnsCorrectErrorWhenEndDateTimeIsLessThanStartDateTime() { var validator = new EventEditModelValidator(); var parentCampaign = new CampaignSummaryModel { EndDate = new DateTimeOffset(new DateTime(1999, 2, 1)) }; var model = new EventEditModel { 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 ReportErrorsWhenDatesAreInvalid() { // arrage var mediator = new Mock <IMediator>(); var validator = new CampaignSummaryModelValidator(mediator.Object); var model = new CampaignSummaryModel { StartDate = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDate = new DateTimeOffset(new DateTime(1999, 1, 1)) }; // act var errors = await validator.Validate(model); // assert Assert.True(errors.ContainsKey("EndDate")); }
public async Task ReportErrorsWhenEndDateIsInvalid() { // arrage var mediator = new Mock <IMediator>(); var validator = new ActivityDetailModelValidator(mediator.Object); var campaign = new CampaignSummaryModel(); var model = new ActivityDetailModel { 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> Edit(ActivityDetailModel activity, IFormFile fileUpload) { if (activity == null) { return(HttpBadRequest()); } //TODO: Use the query pattern here var organizationId = _dataAccess.GetManagingOrganizationId(activity.Id); if (!User.IsOrganizationAdmin(organizationId)) { return(HttpUnauthorized()); } CampaignSummaryModel campaign = await _mediator.SendAsync(new CampaignSummaryQuery { CampaignId = activity.CampaignId }); var validator = new ActivityDetailModelValidator(_mediator); var errors = await validator.Validate(activity, campaign); errors.ForEach(e => ModelState.AddModelError(e.Key, e.Value)); if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { activity.ImageUrl = await _imageService.UploadActivityImageAsync(campaign.OrganizationId, activity.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View(activity)); } } var id = _mediator.Send(new EditActivityCommand { Activity = activity }); return(RedirectToAction("Details", "Activity", new { area = "Admin", id = id })); } return(View(activity)); }
public void RetrunsCorrectErrorWhenModelsEndDateTimeIsGreaterThanParentCampaignsEndDate() { var validator = new EventEditModelValidator(); var parentCampaign = new CampaignSummaryModel { StartDate = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDate = new DateTimeOffset(new DateTime(2001, 1, 1)) }; var model = new EventEditModel { 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 void ReturnsCorrectErrorWhenModelsStartDateTimeIsLessThanParentCampaignsStartDate() { var validator = new EventDetailModelValidator(); var parentCampaign = new CampaignSummaryModel { StartDate = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDate = new DateTimeOffset(new DateTime(2001, 2, 1)) }; var model = new EventDetailModel { EndDateTime = new DateTimeOffset(new DateTime(2001, 1, 1)) }; var errors = validator.Validate(model, parentCampaign); Assert.True(errors.Exists(x => x.Key.Equals("StartDateTime"))); Assert.Equal(errors.Find(x => x.Key == "StartDateTime").Value, "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d")); }
public async Task CampaignDoesNotExist() { var context = ServiceProvider.GetService <AllReadyContext>(); var vm = new CampaignSummaryModel { TimeZoneId = "Eastern Standard Time" }; var query = new EditCampaignCommand { Campaign = vm }; var handler = new EditCampaignCommandHandler(context); var result = await handler.Handle(query); Assert.True(result > 0); var data = context.Campaigns.Count(_ => _.Id == result); Assert.True(data == 1); }
public void UpdatingExistingCampaignWithNoPriorContactAddsContactWithAllProperties() { // Arrange var name = "New Name"; var desc = "New Desc"; var org = 2; var contactEmail = "*****@*****.**"; var firstname = "John"; var lastname = "Doe"; var telephone = "01323 111111"; var handler = new EditCampaignCommandHandler(Context); var updatedCampaign = new CampaignSummaryModel { Id = 2, Name = name, Description = desc, OrganizationId = org, TimeZoneId = "GMT Standard Time", PrimaryContactEmail = contactEmail, PrimaryContactFirstName = firstname, PrimaryContactLastName = lastname, PrimaryContactPhoneNumber = telephone }; // Act var result = handler.Handle(new EditCampaignCommand { Campaign = updatedCampaign }); var newContact = Context.Contacts.OrderBy(c => c.Id).LastOrDefault(); // Assert Assert.Equal(2, Context.CampaignContacts.Count()); Assert.Equal(2, Context.Contacts.Count()); Assert.NotNull(newContact); Assert.Equal(contactEmail, newContact.Email); Assert.Equal(firstname, newContact.FirstName); Assert.Equal(lastname, newContact.LastName); Assert.Equal(telephone, newContact.PhoneNumber); }
public async Task <IActionResult> Edit(CampaignSummaryModel campaign, IFormFile fileUpload) { if (campaign == null) { return(HttpBadRequest()); } if (!User.IsOrganizationAdmin(campaign.OrganizationId)) { return(HttpUnauthorized()); } var validator = new CampaignSummaryModelValidator(_mediator); var errors = await validator.Validate(campaign); errors.ToList().ForEach(e => ModelState.AddModelError(e.Key, e.Value)); if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { campaign.ImageUrl = await _imageService.UploadCampaignImageAsync(campaign.OrganizationId, campaign.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View(campaign)); } } var id = _mediator.SendAsync(new EditCampaignCommand { Campaign = campaign }); return(RedirectToAction(nameof(Details), new { area = "Admin", id = id })); } return(View(campaign)); }
public void UpdatingExistingCampaignUpdatesAllCoreProperties() { // Arrange var name = "New Name"; var desc = "New Desc"; var fullDesc = "New Full Desc"; var timezoneId = "GMT Standard Time"; var startDate = DateTime.Now; var endDate = DateTime.Now.AddDays(30); var org = 2; var handler = new EditCampaignCommandHandler(Context); var updatedCampaign = new CampaignSummaryModel { Id = 2, Name = name, Description = desc, FullDescription = fullDesc, TimeZoneId = timezoneId, StartDate = startDate, EndDate = endDate, OrganizationId = org, }; // Act var result = handler.Handle(new EditCampaignCommand { Campaign = updatedCampaign }); var savedCampaign = Context.Campaigns.SingleOrDefault(s => s.Id == 2); // Assert Assert.Equal(4, Context.Campaigns.Count()); Assert.Equal(2, result); Assert.Equal(name, savedCampaign.Name); Assert.Equal(desc, savedCampaign.Description); Assert.Equal(fullDesc, savedCampaign.FullDescription); Assert.Equal(timezoneId, savedCampaign.TimeZoneId); Assert.NotEqual(startDate.Date, new DateTime()); // We're not testing the date logic in this test, only that a datetime value is saved Assert.NotEqual(endDate.Date, new DateTime()); // We're not testing the date logic in this test, only that a datetime value is saved Assert.Equal(org, savedCampaign.ManagingOrganizationId); }
public async Task EditPostReturnsCorrectViewModelWhenInvalidImageFormatIsSupplied() { int ORGANIZATION_ID = 100; var mockMediator = new Mock<IMediator>(); var mockImageService = new Mock<IImageService>(); var sut = new CampaignController(mockMediator.Object, mockImageService.Object); sut.SetClaims(new List<Claim> { new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()), new Claim(AllReady.Security.ClaimTypes.Organization, ORGANIZATION_ID.ToString()) }); var file = FormFile("audio/mpeg3"); CampaignSummaryModel model = MassiveTrafficLightOutage_model; model.OrganizationId = ORGANIZATION_ID; ViewResult view = (ViewResult)(await sut.Edit(model, file)); CampaignSummaryModel viewModel = (CampaignSummaryModel)view.ViewData.Model; Assert.True(Object.ReferenceEquals(model, viewModel)); }
public List <KeyValuePair <string, string> > Validate(EventEditModel model, CampaignSummaryModel parentCampaign) { var result = new List <KeyValuePair <string, string> >(); if (model.EndDateTime < model.StartDateTime) { result.Add(new KeyValuePair <string, string>(nameof(model.EndDateTime), "End date cannot be earlier than the start date")); } if (model.StartDateTime < parentCampaign.StartDate) { result.Add(new KeyValuePair <string, string>(nameof(model.StartDateTime), "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d"))); } if (model.EndDateTime > parentCampaign.EndDate) { result.Add(new KeyValuePair <string, string>(nameof(model.EndDateTime), "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d"))); } return(result); }
public List<KeyValuePair<string, string>> Validate(EventEditModel model, CampaignSummaryModel parentCampaign) { var result = new List<KeyValuePair<string, string>>(); if (model.EndDateTime < model.StartDateTime) { result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be earlier than the start date")); } if (model.StartDateTime < parentCampaign.StartDate) { result.Add(new KeyValuePair<string, string>(nameof(model.StartDateTime), "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d"))); } if (model.EndDateTime > parentCampaign.EndDate) { result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d"))); } return result; }
public void UpdatingExistingCampaignUpdatesLocationWithAllProperties() { // Arrange var name = "New Name"; var desc = "New Desc"; var org = 2; var address1 = "Address 1"; var address2 = "Address 1"; var city = "City"; var state = "State"; var postcode = "45231"; var country = "USA"; var handler = new EditCampaignCommandHandler(Context); var updatedCampaign = new CampaignSummaryModel { Id = 2, Name = name, Description = desc, OrganizationId = org, TimeZoneId = "GMT Standard Time", Location = new LocationEditModel { Address1 = address1, Address2 = address2, City = city, State = state, PostalCode = postcode } }; // Act var result = handler.Handle(new EditCampaignCommand { Campaign = updatedCampaign }); var savedCampaign = Context.Campaigns.SingleOrDefault(s => s.Id == 2); // Assert Assert.Equal(address1, savedCampaign.Location.Address1); Assert.Equal(address2, savedCampaign.Location.Address2); Assert.Equal(city, savedCampaign.Location.City); Assert.Equal(state, savedCampaign.Location.State); Assert.Equal(postcode, savedCampaign.Location.PostalCode.PostalCode); Assert.Equal(country, savedCampaign.Location.Country); }
public async Task ReportErrorsWhenPostalCodeIsInvalid() { // arrange var mediator = new Mock <IMediator>(); mediator.Setup(m => m.SendAsync(It.IsAny <CheckValidPostcodeQueryAsync>())).ReturnsAsync(false); var validator = new CampaignSummaryModelValidator(mediator.Object); var model = new CampaignSummaryModel { Location = new LocationEditModel { PostalCode = "90210" } }; // act var errors = await validator.Validate(model); // assert mediator.Verify(m => m.SendAsync(It.IsAny <CheckValidPostcodeQueryAsync>())); Assert.True(errors.ContainsKey("PostalCode")); }
public async Task <IActionResult> Edit(CampaignSummaryModel campaign, IFormFile fileUpload) { if (campaign == null) { return(BadRequest()); } if (!User.IsOrganizationAdmin(campaign.OrganizationId)) { return(Unauthorized()); } if (campaign.EndDate < campaign.StartDate) { ModelState.AddModelError(nameof(campaign.EndDate), "The end date must fall on or after the start date."); } if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { campaign.ImageUrl = await _imageService.UploadCampaignImageAsync(campaign.OrganizationId, campaign.Id, fileUpload); } else { ModelState.AddModelError("ImageUrl", "You must upload a valid image file for the logo (.jpg, .png, .gif)"); return(View(campaign)); } } var id = await _mediator.SendAsync(new EditCampaignCommand { Campaign = campaign }); return(RedirectToAction(nameof(Details), new { area = "Admin", id = id })); } return(View(campaign)); }
public async Task<List<KeyValuePair<string, string>>> Validate(ActivityDetailModel model, CampaignSummaryModel parentCampaign) { var result = new List<KeyValuePair<string, string>>(); if (model.EndDateTime < model.StartDateTime) { result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be earlier than the start date")); } if (model.StartDateTime < parentCampaign.StartDate) { result.Add(new KeyValuePair<string, string>(nameof(model.StartDateTime), "Start date cannot be earlier than the campaign start date " + parentCampaign.StartDate.ToString("d"))); } if (model.EndDateTime > parentCampaign.EndDate) { result.Add(new KeyValuePair<string, string>(nameof(model.EndDateTime), "End date cannot be later than the campaign end date " + parentCampaign.EndDate.ToString("d"))); } var postalCodeValidation = new LocationEditModelValidator(_mediator); var postalCodeErrors = await postalCodeValidation.Validate(model.Location); postalCodeErrors.ToList().ForEach(e => result.Add(new KeyValuePair<string, string>(e.Key, e.Value))); return result; }