public async Task<IActionResult> Create(CampaignSummaryModel campaign, IFormCollection form) { if (campaign == null) { return HttpBadRequest(); } if (!User.IsTenantAdmin(campaign.TenantId)) { return HttpUnauthorized(); } if (ModelState.IsValid) { if (form.Files.Count > 0) { // If the form contains a file, upload it and update the ImageUrl. if (form.Files[0] != null) { var file = form.Files[0]; if (file.IsAcceptableImageContentType()) { campaign.ImageUrl = await _imageService.UploadCampaignImageAsync(campaign.Id, campaign.TenantId, form.Files[0]); } 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 {id = id, area = "Admin" }); } return View("Edit", campaign); }
public void ExistingCampaign() { var context = ServiceProvider.GetService<AllReadyContext>(); Organization htb = new Organization() { Name = "Humanitarian Toolbox", LogoUrl = "http://www.htbox.org/upload/home/ht-hero.png", WebUrl = "http://www.htbox.org", Campaigns = new List<Campaign>() }; Campaign firePrev = new Campaign() { Name = "Neighborhood Fire Prevention Days", ManagingOrganization = htb, TimeZoneId = "Eastern Standard Time" }; htb.Campaigns.Add(firePrev); context.Organizations.Add(htb); context.SaveChanges(); const string NEW_NAME = "Some new name value"; var startDate = new DateTime(2014, 12, 10); var endDate = new DateTime(2015, 7, 3); var vm = new CampaignSummaryModel { Description = firePrev.Description, EndDate = endDate, FullDescription = firePrev.FullDescription, StartDate = startDate, Id = firePrev.Id, ImageUrl = firePrev.ImageUrl, Name = NEW_NAME, OrganizationId = firePrev.ManagingOrganizationId, OrganizationName = firePrev.ManagingOrganization.Name, TimeZoneId = "Eastern Standard Time" }; var query = new EditCampaignCommand { Campaign = vm }; var handler = new EditCampaignCommandHandler(context); var result = handler.Handle(query); Assert.Equal(1, result); // should get back the Campaign id var data = context.Campaigns.Single(_ => _.Id == 1); Assert.Equal(NEW_NAME, data.Name); Assert.Equal(2014, data.StartDateTime.Year); Assert.Equal(12, data.StartDateTime.Month); Assert.Equal(10, data.StartDateTime.Day); Assert.Equal(00, data.StartDateTime.Hour); Assert.Equal(00, data.StartDateTime.Minute); Assert.Equal(-5, data.StartDateTime.Offset.TotalHours); Assert.Equal(2015, data.EndDateTime.Year); Assert.Equal(7, data.EndDateTime.Month); Assert.Equal(3, data.EndDateTime.Day); Assert.Equal(23, data.EndDateTime.Hour); Assert.Equal(59, data.EndDateTime.Minute); Assert.Equal(-4, data.EndDateTime.Offset.TotalHours); }
public void CampaignDoesNotExist() { var context = ServiceProvider.GetService<AllReadyContext>(); var vm = new CampaignSummaryModel(); var query = new EditCampaignCommand { Campaign = vm }; var handler = new EditCampaignCommandHandler(context); var result = handler.Handle(query); Assert.True(result > 0); var data = context.Campaigns.Count(_ => _.Id == result); Assert.True(data == 1); }
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 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 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 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 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 IActionResult Create(CampaignSummaryModel campaign) { if (campaign == null) { return HttpBadRequest(); } if (!User.IsTenantAdmin(campaign.TenantId)) { return HttpUnauthorized(); } if (ModelState.IsValid) { int id = _bus.Send(new EditCampaignCommand { Campaign = campaign }); return RedirectToAction("Details", new {id = id, area = "Admin" }); } return View("Edit", campaign); }
public void ExistingCampaign() { var context = ServiceProvider.GetService<AllReadyContext>(); Tenant htb = new Tenant() { Name = "Humanitarian Toolbox", LogoUrl = "http://www.htbox.org/upload/home/ht-hero.png", WebUrl = "http://www.htbox.org", Campaigns = new List<Campaign>() }; Campaign firePrev = new Campaign() { Name = "Neighborhood Fire Prevention Days", ManagingTenant = htb }; htb.Campaigns.Add(firePrev); context.Tenants.Add(htb); context.SaveChanges(); const string NEW_NAME = "Some new name value"; var vm = new CampaignSummaryModel { Description = firePrev.Description, EndDate = firePrev.EndDateTimeUtc, FullDescription = firePrev.FullDescription, StartDate = firePrev.StartDateTimeUtc, Id = firePrev.Id, ImageUrl = firePrev.ImageUrl, Name = NEW_NAME, TenantId = firePrev.ManagingTenantId, TenantName = firePrev.ManagingTenant.Name }; var query = new EditCampaignCommand { Campaign = vm }; var handler = new EditCampaignCommandHandler(context); var result = handler.Handle(query); Assert.Equal(1, result); // should get back the Campaign id var data = context.Campaigns.Single(_ => _.Id == 1); Assert.Equal(NEW_NAME, data.Name); }
public async Task 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 = await 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 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 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 await 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 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 await 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(); } // Temporary code to avoid current database update error when the post code geo does not exist in the database. if (!string.IsNullOrEmpty(campaign.Location?.PostalCode)) { bool validPostcode = await _mediator.SendAsync(new CheckValidPostcodeQueryAsync { Postcode = new PostalCodeGeo { City = campaign.Location.City, State = campaign.Location.State, PostalCode = campaign.Location.PostalCode } }); if (!validPostcode) { ModelState.AddModelError(campaign.Location.PostalCode, "The city, state and postal code combination is not valid"); } } 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 = _mediator.Send(new EditCampaignCommand { Campaign = campaign }); return RedirectToAction("Details", new { area = "Admin", id = id }); } return View(campaign); }
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 = await _mediator.SendAsync(new EditCampaignCommand { Campaign = campaign }); return RedirectToAction(nameof(Details), new { area = "Admin", id = id }); } return View(campaign); }
public async Task<IActionResult> Edit(CampaignSummaryModel campaign, IFormFile fileUpload) { if (campaign == null) { return HttpBadRequest(); } if (!User.IsOrganizationAdmin(campaign.OrganizationId)) { return HttpUnauthorized(); } 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 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<IActionResult> Edit(CampaignSummaryModel campaign, IFormFile fileUpload) { if (campaign == null) { return HttpBadRequest(); } if (!User.IsTenantAdmin(campaign.TenantId)) { return HttpUnauthorized(); } if (ModelState.IsValid) { if (fileUpload != null) { if (fileUpload.IsAcceptableImageContentType()) { campaign.ImageUrl = await _imageService.UploadCampaignImageAsync(campaign.TenantId, 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); }