Beispiel #1
0
        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);
        }
Beispiel #3
0
        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");
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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);
        }
Beispiel #6
0
        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);
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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");
        }
Beispiel #9
0
        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);
        }
Beispiel #10
0
        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);
        }
Beispiel #11
0
        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));
        }
Beispiel #12
0
        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);
        }
Beispiel #13
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);
        }
Beispiel #15
0
        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);
        }
Beispiel #16
0
        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);
        }
Beispiel #18
0
        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);
        }
Beispiel #21
0
 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);
 }
Beispiel #22
0
        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"));
        }
Beispiel #23
0
        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);
        }
Beispiel #24
0
        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);
        }
Beispiel #28
0
        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);
        }
Beispiel #29
0
        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);
        }
Beispiel #30
0
        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);
        }