public async Task DeleteCampaignImageReturnsJsonObjectWithStatusOfDateInvalidIfCampaignEndDateIsLessThanStartDate() { var mediatorMock = new Mock <IMediator>(); var campaignSummaryViewModel = new CampaignSummaryViewModel { OrganizationId = 1, StartDate = DateTimeOffset.Now.AddDays(10), EndDate = DateTimeOffset.Now }; mediatorMock.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); var imageServiceMock = new Mock <IImageService>(); var sut = new CampaignController(mediatorMock.Object, imageServiceMock.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); var result = await sut.DeleteCampaignImage(It.IsAny <int>()); result.Value.GetType() .GetProperty("status") .GetValue(result.Value) .ShouldBe("DateInvalid"); result.Value.GetType() .GetProperty("message") .GetValue(result.Value) .ShouldBe("The end date must fall on or after the start date."); }
public async Task EditPostDoesNotInvokeDeleteImageAsync__WhenCampaignDoesNotHaveAnImage() { const int organizationId = 1; const int campaignId = 100; var mockMediator = new Mock <IMediator>(); var mockImageService = new Mock <IImageService>(); var file = FormFile("image/jpeg"); mockImageService.Setup(x => x.UploadCampaignImageAsync(It.IsAny <int>(), It.IsAny <int>(), file)).ReturnsAsync("newImageUrl"); var sut = new CampaignController(mockMediator.Object, mockImageService.Object); sut.MakeUserAnOrgAdmin(organizationId.ToString()); var campaignSummaryViewModel = new CampaignSummaryViewModel { OrganizationId = organizationId, Id = campaignId, StartDate = new DateTimeOffset(new DateTime(2016, 2, 13)), EndDate = new DateTimeOffset(new DateTime(2016, 2, 14)), }; await sut.Edit(campaignSummaryViewModel, file); mockImageService.Verify(mock => mock.DeleteImageAsync(It.IsAny <string>()), Times.Never); }
public async Task DeleteCampaignImageReturnsJsonObjectWithStatusOfNothingToDeleteIfThereWasNoExistingImage() { var campaignSummaryViewModel = new CampaignSummaryViewModel { OrganizationId = 1 }; var mediatorMock = new Mock <IMediator>(); mediatorMock.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); mediatorMock.Setup(x => x.SendAsync(It.IsAny <AuthorizableCampaignQuery>())).ReturnsAsync(new FakeAuthorizableCampaign(false, true, false, false)); var imageServiceMock = new Mock <IImageService>(); var sut = GetInstance(mediatorMock.Object, imageServiceMock.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); var result = await sut.DeleteCampaignImage(It.IsAny <int>()); result.Value.GetType() .GetProperty("status") .GetValue(result.Value) .ShouldBe("NothingToDelete"); }
public async Task EditPostRedirectToAction_WithCorrect_Contoller_ActionAndResourceId() { const int resourceId = 2; var mockMediator = new Mock <IMediator>(); var campaignSummaryViewModel = new CampaignSummaryViewModel { Id = 2, OrganizationId = 5, Name = "OrgName" }; mockMediator.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); mockMediator.Setup(m => m.SendAsync(It.IsAny <CreateOrEditResourceCommand>())).ReturnsAsync(resourceId); var sut = new ResourceController(mockMediator.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); var resourceEditViewModel = new ResourceEditViewModel { Id = 1, CampaignId = 2 }; var result = await sut.Edit(resourceEditViewModel) as RedirectToActionResult; result.ShouldNotBeNull(); result.ActionName.ShouldBe(nameof(ResourceController.Details)); result.ControllerName.ShouldBe(nameof(Resource)); result.RouteValues["resourceId"].ShouldBe(resourceId); }
public async Task IndexFiltersOutFeaturedCampaignFromListOfUpcomingCampaings() { var mockMediator = new Mock <IMediator>(); var featuredCampaign = new CampaignSummaryViewModel { Id = 1, Title = "Featured campaign", Description = "This is a featured campaign" }; mockMediator.Setup(s => s.SendAsync(It.IsAny <FeaturedCampaignQuery>())) .ReturnsAsync(featuredCampaign); mockMediator.Setup(s => s.SendAsync(It.IsAny <ActiveOrUpcomingCampaignsQuery>())) .ReturnsAsync(new List <ActiveOrUpcomingCampaign> { new ActiveOrUpcomingCampaign { Id = featuredCampaign.Id, Name = featuredCampaign.Title, Description = featuredCampaign.Description }, new ActiveOrUpcomingCampaign { Id = 2, Name = "Not a featured campaign", Description = "This is not a featured campaign" } }); var sut = new HomeController(mockMediator.Object); var result = ((ViewResult)await sut.Index()).Model as IndexViewModel; result.ShouldNotBeNull(); result.ActiveOrUpcomingCampaigns.ShouldNotContain(c => c.Id == featuredCampaign.Id); }
public async Task EditGetReturnsTheCorrectViewModel() { var campaignSummaryViewModel = new CampaignSummaryViewModel { Id = 4, OrganizationId = 1, Name = "TestCampaign" }; var resourceDetailViewModel = new ResourceDetailViewModel { Id = 5 }; var mockMediator = new Mock <IMediator>(); mockMediator.Setup(m => m.SendAsync(It.IsAny <ResourceDetailQuery>())).ReturnsAsync(resourceDetailViewModel); mockMediator.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); var sut = new ResourceController(mockMediator.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); var result = await sut.Edit(It.IsAny <int>()) as ViewResult; result.ShouldNotBeNull(); result.Model.ShouldBeOfType <ResourceEditViewModel>(); result.Model.ShouldBeOfType <ResourceEditViewModel>().CampaignId.ShouldBe(campaignSummaryViewModel.Id); result.Model.ShouldBeOfType <ResourceEditViewModel>().Id.ShouldBe(resourceDetailViewModel.Id); }
public async Task DeleteReturnsTheCorrectViewModel() { var campaignSummaryViewModel = new CampaignSummaryViewModel { Id = 4, OrganizationId = 1, Name = "TestCampaign" }; var deleteResourceQuery = new ResourceDeleteViewModel { Id = 1, CampaignId = 4 }; var mockMediator = new Mock <IMediator>(); mockMediator.Setup(m => m.SendAsync(It.IsAny <DeleteResourceQuery>())).ReturnsAsync(deleteResourceQuery); mockMediator.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); var sut = new ResourceController(mockMediator.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); var result = await sut.Delete(It.IsAny <int>()) as ViewResult; result.ShouldNotBeNull(); result.ShouldBeOfType <ViewResult>(); result.Model.ShouldBeOfType <ResourceDeleteViewModel>(); result.Model.ShouldBeSameAs(deleteResourceQuery); }
public async Task DeleteCampaignImageReturnsJsonObjectWithStatusOfSuccessIfImageDeletedSuccessfully() { var mediatorMock = new Mock <IMediator>(); var campaignSummaryViewModel = new CampaignSummaryViewModel { OrganizationId = 1, ImageUrl = "URL!" }; mediatorMock.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); var imageServiceMock = new Mock <IImageService>(); var sut = new CampaignController(mediatorMock.Object, imageServiceMock.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); var result = await sut.DeleteCampaignImage(It.IsAny <int>()); result.Value.GetType() .GetProperty("status") .GetValue(result.Value) .ShouldBe("Success"); }
public async Task EditPostInvokesDeleteImageAsync_WhenCampaignHasAnImage() { const int organizationId = 1; const int campaignId = 100; var mockMediator = new Mock <IMediator>(); mockMediator.Setup(x => x.SendAsync(It.IsAny <AuthorizableCampaignQuery>())).ReturnsAsync(new FakeAuthorizableCampaign(false, true, false, false)); var mockImageService = new Mock <IImageService>(); var file = FormFile("image/jpeg"); mockImageService.Setup(x => x.UploadCampaignImageAsync(It.IsAny <int>(), It.IsAny <int>(), file)).ReturnsAsync("newImageUrl"); var sut = GetInstance(mockMediator.Object, mockImageService.Object); sut.MakeUserAnOrgAdmin(organizationId.ToString()); var campaignSummaryViewModel = new CampaignSummaryViewModel { OrganizationId = organizationId, ImageUrl = "existingImageUrl", Id = campaignId, StartDate = new DateTimeOffset(new DateTime(2016, 2, 13)), EndDate = new DateTimeOffset(new DateTime(2016, 2, 14)), }; await sut.Edit(campaignSummaryViewModel, file); mockImageService.Verify(mock => mock.DeleteImageAsync(It.Is <string>(x => x == "existingImageUrl")), Times.Once); }
public void CreateReturnsCorrectViewWithCorrectViewModel() { var mockMediator = new Mock <IMediator>(); CampaignController controller = new CampaignController(mockMediator.Object, null); ViewResult view = (ViewResult)controller.Create(); CampaignSummaryViewModel viewModel = (CampaignSummaryViewModel)view.ViewData.Model; Assert.Equal(view.ViewName, "Edit"); Assert.NotNull(viewModel); }
public async Task <IActionResult> Edit(CampaignSummaryViewModel 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()) { var existingImageUrl = campaign.ImageUrl; var newImageUrl = await _imageService.UploadCampaignImageAsync(campaign.OrganizationId, campaign.Id, fileUpload); if (!string.IsNullOrEmpty(newImageUrl)) { campaign.ImageUrl = newImageUrl; if (existingImageUrl != null) { await _imageService.DeleteImageAsync(existingImageUrl); } } } 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 })); } return(View(campaign)); }
public async Task AddNewCampaign() { // Arrange var handler = new EditCampaignCommandHandlerAsync(Context); var newCampaign = new CampaignSummaryViewModel { Name = "New", Description = "Desc", TimeZoneId = "UTC" }; // Act var result = await handler.Handle(new EditCampaignCommandAsync { Campaign = newCampaign }); // Assert Assert.Equal(5, Context.Campaigns.Count()); Assert.True(result > 0); }
public async Task EditPostAddsCorrectKeyAndErrorMessageToModelStateWhenCampaignEndDateIsLessThanCampainStartDate_WhenCampaignIdIsZero() { var campaignSummaryModel = new CampaignSummaryViewModel { OrganizationId = 1, StartDate = DateTime.Now.AddDays(1), EndDate = DateTime.Now.AddDays(-1) }; var sut = new CampaignController(null, null); sut.MakeUserAnOrgAdmin(campaignSummaryModel.OrganizationId.ToString()); await sut.Edit(campaignSummaryModel, null); var modelStateErrorCollection = sut.ModelState.GetErrorMessagesByKey(nameof(CampaignSummaryViewModel.EndDate)); Assert.Equal("The end date must fall on or after the start date.", modelStateErrorCollection.Single().ErrorMessage); }
public async Task CreateGetSendsCampaignSummaryViewModelQueryWithCorrectCampaignId() { var campaignSummaryViewModel = new CampaignSummaryViewModel { Id = 4, OrganizationId = 1, Name = "TestCampaign" }; var mockMediator = new Mock <IMediator>(); mockMediator.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); var sut = new ResourceController(mockMediator.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); var result = await sut.Create(campaignSummaryViewModel.Id) as ViewResult; result.ShouldNotBeNull(); mockMediator.Verify(m => m.SendAsync(It.Is <CampaignSummaryQuery>(c => c.CampaignId == campaignSummaryViewModel.Id)), Times.Once); }
public async Task EditPostReturnsForbidResultResultWhenUserIsNotAuthorized() { const int campaignId = 100; var viewModel = new CampaignSummaryViewModel { Id = campaignId }; var mediator = new Mock <IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny <AuthorizableCampaignQuery>())).ReturnsAsync(new FakeAuthorizableCampaign(false, false, false, false)); var sut = new CampaignController(mediator.Object, null); var result = await sut.Edit(viewModel, null); Assert.IsType <ForbidResult>(result); }
public void ReturnCorrectErrorWhenEndDateTimeIsLessThanStartDateTime() { var validator = new EventEditViewModelValidator(); var parentCampaign = new CampaignSummaryViewModel { EndDate = new DateTimeOffset(new DateTime(1999, 2, 1)) }; var model = new EventEditViewModel { 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 UpdatingExistingCampaign_UpdatesAllCoreProperties() { CampaignsHandlerTestHelper.LoadCampaignssHandlerTestData(Context); // Arrange const string name = "New Name"; const string desc = "New Desc"; const string fullDesc = "New Full Desc"; const string timezoneId = "GMT Standard Time"; var startDate = DateTime.Now; var endDate = DateTime.Now.AddDays(30); const int org = 2; var handler = new EditCampaignCommandHandler(Context, Mock.Of <IConvertDateTimeOffset>()); var updatedCampaign = new CampaignSummaryViewModel { 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 EditPostAddsCorrectKeyAndErrorMessageToModelStateWhenCampaignEndDateIsLessThanCampainStartDate_WhenCampaignIdIsNotZero() { const int campaignId = 33; var campaignSummaryModel = new CampaignSummaryViewModel { Id = campaignId, OrganizationId = 1, StartDate = DateTime.Now.AddDays(1), EndDate = DateTime.Now.AddDays(-1) }; var mediator = new Mock <IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny <AuthorizableCampaignQuery>())).ReturnsAsync(new FakeAuthorizableCampaign(false, true, false, false)); var sut = new CampaignController(mediator.Object, null); await sut.Edit(campaignSummaryModel, null); var modelStateErrorCollection = sut.ModelState.GetErrorMessagesByKey(nameof(CampaignSummaryViewModel.EndDate)); Assert.Equal("The end date must fall on or after the start date.", modelStateErrorCollection.Single().ErrorMessage); }
public async Task UpdatingExistingCampaign_WithNoPriorContactAddsContactWithAllProperties() { CampaignsHandlerTestHelper.LoadCampaignssHandlerTestData(Context); // Arrange const string name = "New Name"; const string desc = "New Desc"; const int org = 2; const string contactEmail = "*****@*****.**"; const string firstname = "John"; const string lastname = "Doe"; const string telephone = "01323 111111"; var handler = new EditCampaignCommandHandler(Context, Mock.Of <IConvertDateTimeOffset>()); var updatedCampaign = new CampaignSummaryViewModel { 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 EditPostSendsEditResourceCommandWithCorrectResource() { var mockMediator = new Mock <IMediator>(); var campaignSummaryViewModel = new CampaignSummaryViewModel { Id = 2, OrganizationId = 5, Name = "OrgName" }; mockMediator.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); mockMediator.Setup(m => m.SendAsync(It.IsAny <CreateOrEditResourceCommand>())).ReturnsAsync(It.IsAny <int>()); var sut = new ResourceController(mockMediator.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); var resourceEditViewModel = new ResourceEditViewModel(); var result = await sut.Edit(resourceEditViewModel) as RedirectToActionResult; result.ShouldNotBeNull(); mockMediator.Verify(m => m.SendAsync(It.Is <CreateOrEditResourceCommand>(e => e.Resource == resourceEditViewModel)), Times.Once); }
public CampaignViewModel(CampaignSummaryViewModel from) { Name = from.Name; Description = from.Description; FullDescription = from.FullDescription; ExternalUrl = from.ExternalUrl; ExternalUrlText = from.ExternalUrlText; ManagingOrganizationId = from.OrganizationId; ManagingOrganizationName = from.OrganizationName; ImageUrl = from.ImageUrl; TimeZoneId = from.TimeZoneId; StartDate = from.StartDate; EndDate = from.EndDate; Headline = from.Headline; Featured = from.Featured; Published = from.Published; CampaignGoals = new List <CampaignGoal>(); Location = new Location(from.Location); }
public void RetrunCorrectErrorWhenModelsEndDateTimeIsGreaterThanParentCampaignsEndDate() { var validator = new EventEditViewModelValidator(); var parentCampaign = new CampaignSummaryViewModel { StartDate = new DateTimeOffset(new DateTime(2000, 1, 1)), EndDate = new DateTimeOffset(new DateTime(2001, 1, 1)) }; var model = new EventEditViewModel { 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 CampaignDoesNotExist() { var context = ServiceProvider.GetService <AllReadyContext>(); var vm = new CampaignSummaryViewModel { TimeZoneId = "Eastern Standard Time" }; var query = new EditCampaignCommandAsync { Campaign = vm }; var handler = new EditCampaignCommandHandlerAsync(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 EditPostAddsCorrectKeyAndErrorMessageToModelStateWhenCampaignEndDateIsLessThanCampainStartDate() { var campaignSummaryModel = new CampaignSummaryViewModel { 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(CampaignSummaryViewModel.EndDate)); Assert.Equal(modelStateErrorCollection.Single().ErrorMessage, "The end date must fall on or after the start date."); }
public async Task EditPostReturnsUnauthorized_WhenUserIsNotOrganizationAdmin() { var campaignSummaryViewModel = new CampaignSummaryViewModel { Id = 4, OrganizationId = 1, Name = "TestCampaign" }; var mockMediator = new Mock <IMediator>(); mockMediator.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); var sut = new ResourceController(mockMediator.Object); sut.MakeUserNotAnOrgAdmin(); var result = await sut.Edit(new ResourceEditViewModel()) as UnauthorizedResult; result.ShouldNotBeNull(); result.ShouldBeOfType <UnauthorizedResult>(); result.StatusCode.ShouldBe((int)HttpStatusCode.Unauthorized); }
public async Task CreatePostReturnsView_IfModelStateIsNotValid() { var campaignSummaryViewModel = new CampaignSummaryViewModel { Id = 4, OrganizationId = 1, Name = "TestCampaign" }; var mockMediator = new Mock <IMediator>(); mockMediator.Setup(m => m.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(campaignSummaryViewModel); var sut = new ResourceController(mockMediator.Object); sut.MakeUserAnOrgAdmin(campaignSummaryViewModel.OrganizationId.ToString()); sut.ModelState.AddModelError("Name", "Filling name is mandatory!"); var result = await sut.Create(new ResourceEditViewModel()) as ViewResult; result.ShouldNotBeNull(); result.ViewName.ShouldBe("Edit"); result.Model.ShouldBeOfType <ResourceEditViewModel>(); }
public async Task UpdatingExistingCampaign_UpdatesLocationWithAllProperties() { CampaignsHandlerTestHelper.LoadCampaignssHandlerTestData(Context); // Arrange const string name = "New Name"; const string desc = "New Desc"; const int org = 2; const string address1 = "Address 1"; const string address2 = "Address 1"; const string city = "City"; const string state = "State"; const string postcode = "45231"; const string country = "USA"; var handler = new EditCampaignCommandHandler(Context, Mock.Of <IConvertDateTimeOffset>()); var updatedCampaign = new CampaignSummaryViewModel { Id = 2, Name = name, Description = desc, OrganizationId = org, TimeZoneId = "GMT Standard Time", Location = new LocationEditViewModel { 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); 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 EditCampaignCommandHandlerAsync(Context); var updatedCampaign = new CampaignSummaryViewModel { 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 EditCampaignCommandAsync { 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 EditPostAddsErrorToModelStateWhenInvalidImageFormatIsSupplied() { const int campaignId = 100; var viewModel = new CampaignSummaryViewModel { Name = "Foo", Id = campaignId }; var mediator = new Mock <IMediator>(); mediator.Setup(x => x.SendAsync(It.IsAny <AuthorizableCampaignQuery>())).ReturnsAsync(new FakeAuthorizableCampaign(false, true, false, false)); var mockImageService = new Mock <IImageService>(); var file = FormFile(""); var sut = new CampaignController(mediator.Object, mockImageService.Object); await sut.Edit(viewModel, file); Assert.False(sut.ModelState.IsValid); Assert.Equal("You must upload a valid image file for the logo (.jpg, .png, .gif)", sut.ModelState["ImageUrl"].Errors.Single().ErrorMessage); }
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 CampaignSummaryViewModel { 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)); CampaignSummaryViewModel viewModel = (CampaignSummaryViewModel)view.ViewData.Model; Assert.Equal(viewModel.Id, CAMPAIGN_ID); }