public void IndexReturnsCorrectDataWhenUserIsOrgAdmin()
        {
            int OrganizationId = 99;
            var mockMediator = new Mock<IMediator>();
            mockMediator.Setup(x => x.Send(It.Is<CampaignListQuery>(c => c.OrganizationId == OrganizationId)))
                .Returns((CampaignListQuery q) => {
                    List<CampaignSummaryModel> ret = new List<CampaignSummaryModel>();
                    ret.Add(new CampaignSummaryModel { OrganizationId = OrganizationId });
                    return ret;
                }
            );
            CampaignController controller = new CampaignController(mockMediator.Object, null);

            List<Claim> claims = new List<Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, OrganizationId.ToString())
            };
            controller.SetClaims(claims);

            ViewResult view = (ViewResult)controller.Index();
            mockMediator.Verify(mock => mock.Send(It.Is<CampaignListQuery>(c => c.OrganizationId == OrganizationId)));

            // Org admin should only see own campaigns
            IEnumerable<CampaignSummaryModel> viewModel = (IEnumerable<CampaignSummaryModel>)view.ViewData.Model;
            Assert.NotNull(viewModel);
            Assert.Equal(viewModel.Count(), 1);
            Assert.Equal(viewModel.First().OrganizationId, OrganizationId);
        }
        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 void IndexReturnsCorrectDataWhenUserIsNotOrgAdmin()
        {
            int OrganizationId = 99;
            var mockMediator = new Mock<IMediator>();
            mockMediator.Setup(x => x.Send(It.Is<CampaignListQuery>(c => c.OrganizationId == null)))
                .Returns((CampaignListQuery q) => {
                    // return some models 
                    List<CampaignSummaryModel> ret = new List<CampaignSummaryModel>();
                    ret.Add(new CampaignSummaryModel { OrganizationId = OrganizationId });
                    ret.Add(new CampaignSummaryModel { OrganizationId = OrganizationId + 1 });
                    return ret;
                }
            );
            CampaignController controller = new CampaignController(mockMediator.Object, null);

            List<Claim> claims = new List<Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.SiteAdmin.ToString()),
            };
            controller.SetClaims(claims);

            // All campaigns returned when not OrgAdmin
            ViewResult view = (ViewResult)controller.Index();

            // verify the fetch was called
            mockMediator.Verify(mock => mock.Send(It.Is<CampaignListQuery>(c => c.OrganizationId == null)));

            // Site admin should only see all campaigns
            IEnumerable<CampaignSummaryModel> viewModel = (IEnumerable<CampaignSummaryModel>)view.ViewData.Model;
            Assert.NotNull(viewModel);
            Assert.Equal(viewModel.Count(), 2);
        }
Exemple #4
0
        public async Task DetailsReturnsCorrectViewModelWhenViewModelIsNotNullAndUserIsOrgAdmin()
        {
            int CAMPAIGN_ID     = 100;
            int ORGANIZATION_ID = 99;
            var mockMediator    = new Mock <IMediator>();

            // model is not null
            mockMediator.Setup(mock => mock.SendAsync(It.Is <CampaignDetailQuery>(c => c.CampaignId == CAMPAIGN_ID))).ReturnsAsync(new CampaignDetailModel {
                OrganizationId = ORGANIZATION_ID, Id = CAMPAIGN_ID
            }).Verifiable();

            // user is org admin
            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.Details(CAMPAIGN_ID));
            CampaignDetailModel viewModel = (CampaignDetailModel)view.ViewData.Model;

            Assert.Equal(viewModel.Id, CAMPAIGN_ID);
            Assert.Equal(viewModel.OrganizationId, ORGANIZATION_ID);
        }
        public async Task EditPostUploadsImageToImageService()
        {
            const int organizationId = 1;
            const int campaignId     = 100;

            var mockMediator     = new Mock <IMediator>();
            var mockImageService = new Mock <IImageService>();

            mockImageService.Setup(mock => mock.UploadCampaignImageAsync(It.IsAny <int>(), It.IsAny <int>(), It.IsAny <IFormFile>())).Returns(() => Task.FromResult("")).Verifiable();

            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, organizationId.ToString())
            });

            var file = FormFile("image/jpeg");

            await sut.Edit(new CampaignSummaryModel { Name = "Foo", OrganizationId = organizationId, Id = campaignId }, file);

            mockImageService.Verify(mock => mock.UploadCampaignImageAsync(
                                        It.Is <int>(i => i == organizationId),
                                        It.Is <int>(i => i == campaignId),
                                        It.Is <IFormFile>(i => i == file)), Times.Once);
        }
        public async Task DetailConfirmedRedirectsToCorrectActionWithCorrectRouteValuesWhenUserIsOrgAdmin()
        {
            const int organizationId = 1;
            const int campaignId     = 100;

            var mockMediator = new Mock <IMediator>();

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <CampaignSummaryQuery>())).ReturnsAsync(new CampaignSummaryModel {
                OrganizationId = organizationId
            });

            var sut = new CampaignController(mockMediator.Object, null);

            sut.SetClaims(new List <Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, organizationId.ToString())
            });

            var routeValues = new Dictionary <string, object> {
                ["area"] = "Admin"
            };

            var result = await sut.DeleteConfirmed(campaignId) as RedirectToActionResult;

            Assert.Equal(result.ActionName, nameof(CampaignController.Index));
            Assert.Equal(result.RouteValues, routeValues);
        }
Exemple #7
0
        public async Task LockUnlockReturnsHttpUnauthorizedResultWhenUserIsNotSiteAdmin()
        {
            CampaignController controller = new CampaignController(null, null);

            controller.SetClaims(new List <Claim> {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString())
            });
            Assert.IsType <HttpUnauthorizedResult>(await controller.LockUnlock(100));
        }
        public async Task LockUnlockSendsLockUnlockCampaignCommandWithCorrectCampaignIdWhenUserIsSiteAdmin()
        {
            int CAMPAIGN_ID = 99;
            var mockMediator = new Mock<IMediator>();
            CampaignController controller = new CampaignController(mockMediator.Object, null);
            List<Claim> claims = new List<Claim> { new Claim(AllReady.Security.ClaimTypes.UserType, UserType.SiteAdmin.ToString()) };
            controller.SetClaims(claims);

            await controller.LockUnlock(CAMPAIGN_ID);

            mockMediator.Verify(mock => mock.SendAsync(It.Is<LockUnlockCampaignCommand>(q => q.CampaignId == CAMPAIGN_ID)), Times.Once);
        }
        public async Task EditGetSendsCampaignSummaryQueryWithCorrectCampaignId()
        {
            int CAMPAIGN_ID = 100;
            var mockMediator = new Mock<IMediator>();

            // model is not null
            mockMediator.Setup(mock => mock.SendAsync(It.Is<CampaignSummaryQuery>(c => c.CampaignId == CAMPAIGN_ID))).ReturnsAsync(new CampaignSummaryModel { Id = CAMPAIGN_ID });

            CampaignController controller = new CampaignController(mockMediator.Object, null);
            controller.SetClaims(new List<Claim>()); // create a User for the controller
            var view = await controller.Edit(CAMPAIGN_ID);
            mockMediator.Verify(mock => mock.SendAsync(It.Is<CampaignSummaryQuery>(c => c.CampaignId == CAMPAIGN_ID)));
        }
        public void CreateReturnsCorrectViewWithCorrectViewModel()
        {
            var sut = new CampaignController(null, null);

            sut.SetClaims(new List <Claim>());

            var view = (ViewResult)sut.Create();

            var viewModel = (CampaignSummaryViewModel)view.ViewData.Model;

            Assert.Equal("Edit", view.ViewName);
            Assert.NotNull(viewModel);
        }
        public void IndexSendsCampaignListQueryWithCorrectDataWhenUserIsNotOrgAdmin()
        {
            var mockMediator = new Mock<IMediator>();
            CampaignController controller = new CampaignController(mockMediator.Object, null);
            List<Claim> claims = new List<Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
            };
            controller.SetClaims(claims);

            controller.Index();

            mockMediator.Verify(mock => mock.Send(It.Is<CampaignListQuery>(q => q.OrganizationId == null)));
        }
        public async Task DetailsSendsCampaignDetailQueryWithCorrectCampaignId()
        {
            int CAMPAIGN_ID = 100;
            int ORGANIZATION_ID = 99;
            var mockMediator = new Mock<IMediator>();

            // model is not null
            mockMediator.Setup(mock => mock.SendAsync(It.Is<CampaignDetailQuery>(c => c.CampaignId == CAMPAIGN_ID))).ReturnsAsync(new CampaignDetailModel { OrganizationId = ORGANIZATION_ID, Id = CAMPAIGN_ID }).Verifiable();

            CampaignController controller = new CampaignController(mockMediator.Object, null);
            controller.SetClaims(new List<Claim>()); // create a User for the controller
            var view = await controller.Details(CAMPAIGN_ID);
            mockMediator.Verify(mock => mock.SendAsync(It.Is<CampaignDetailQuery>(c => c.CampaignId == CAMPAIGN_ID)));
        }
        private static CampaignController CampaignControllerWithDetailQuery(string userType, int organizationId)
        {
            var mockMediator = new Mock<IMediator>();
            mockMediator.Setup(mock => mock.SendAsync(It.IsAny<CampaignDetailQuery>())).ReturnsAsync(new CampaignDetailModel { OrganizationId = organizationId }).Verifiable();

            var controller = new CampaignController(mockMediator.Object, null);
            controller.SetClaims(new List<Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, userType),
                new Claim(AllReady.Security.ClaimTypes.Organization, organizationId.ToString())
            });

            return controller;
        }
 public async Task DeleteSendsCampaignSummaryQueryWithCorrectCampaignId()
 {
     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));
     mockMediator.Verify(mock => mock.SendAsync(It.Is<CampaignSummaryQuery>(c => c.CampaignId == CAMPAIGN_ID)), Times.Once);
 }
        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);
 }
        public void CreateReturnsCorrectDataOnViewModelWhenTimeZoneIdClaimNotSet()
        {
            var dateTimeNow = DateTime.Now;

            var sut = new CampaignController(null, null)
            {
                DateTimeNow = () => dateTimeNow
            };

            sut.SetClaims(new List <Claim>());
            var view      = (ViewResult)sut.Create();
            var viewModel = (CampaignSummaryViewModel)view.ViewData.Model;

            Assert.Equal(viewModel.StartDate, dateTimeNow);
            Assert.Equal(viewModel.EndDate, dateTimeNow.AddMonths(1));
            Assert.Equal(viewModel.TimeZoneId, "UTC");
        }
        private static CampaignController CampaignControllerWithSummaryQuery(string userType, int organizationId)
        {
            var mockMediator = new Mock<IMediator>();
            mockMediator.Setup(mock => mock.SendAsync(It.IsAny<CampaignSummaryQuery>()))
                .ReturnsAsync(new CampaignSummaryModel { OrganizationId = organizationId, Location = new LocationEditModel() }).Verifiable();

            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, organizationId.ToString())
            });

            return controller;
        }
        public void IndexSendsCampaignListQueryWithCorrectDataWhenUserIsOrgAdmin()
        {
            int OrganizationId            = 99;
            var mockMediator              = new Mock <IMediator>();
            var mockImageService          = new Mock <IImageService>();
            CampaignController controller = new CampaignController(mockMediator.Object, mockImageService.Object);
            List <Claim>       claims     = new List <Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, OrganizationId.ToString())
            };

            controller.SetClaims(claims);

            controller.Index();

            mockMediator.Verify(mock => mock.Send(It.Is <CampaignListQuery>(q => q.OrganizationId == OrganizationId)));
        }
Exemple #20
0
        public async Task DetailsSendsCampaignDetailQueryWithCorrectCampaignId()
        {
            const int campaignId     = 100;
            const int organizationId = 99;
            var       mockMediator   = new Mock <IMediator>();

            // model is not null
            mockMediator.Setup(mock => mock.SendAsync(It.Is <CampaignDetailQuery>(c => c.CampaignId == campaignId))).ReturnsAsync(new CampaignDetailViewModel {
                OrganizationId = organizationId, Id = campaignId
            }).Verifiable();

            var controller = new CampaignController(mockMediator.Object, null);

            controller.SetClaims(new List <Claim>()); // create a User for the controller
            await controller.Details(campaignId);

            mockMediator.Verify(mock => mock.SendAsync(It.Is <CampaignDetailQuery>(c => c.CampaignId == campaignId)));
        }
        public async Task DetailConfirmedSendsDeleteCampaignCommandWithCorrectCampaignIdWhenUserIsOrgAdmin()
        {
            const int organizationId = 1;
            const int campaignId = 100;

            var mockMediator = new Mock<IMediator>();
            mockMediator.Setup(mock => mock.SendAsync(It.IsAny<CampaignSummaryQuery>())).ReturnsAsync(new CampaignSummaryModel { OrganizationId = organizationId });

            var sut = new CampaignController(mockMediator.Object, null);
            sut.SetClaims(new List<Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, organizationId.ToString())
            });

            await sut.DeleteConfirmed(campaignId);

            mockMediator.Verify(mock => mock.SendAsync(It.Is<DeleteCampaignCommand>(i => i.CampaignId == campaignId)), Times.Once);
        }
Exemple #22
0
        public async Task DeleteSendsCampaignSummaryQueryWithCorrectCampaignId()
        {
            const int organizationId = 99;
            const int campaignId     = 100;
            var       mockMediator   = new Mock <IMediator>();

            mockMediator.Setup(mock => mock.SendAsync(It.Is <CampaignSummaryQuery>(c => c.CampaignId == campaignId))).ReturnsAsync(new CampaignSummaryViewModel {
                Id = campaignId, OrganizationId = organizationId
            });
            var 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, organizationId.ToString())
            });
            var view = (ViewResult)(await controller.Delete(campaignId));

            mockMediator.Verify(mock => mock.SendAsync(It.Is <CampaignSummaryQuery>(c => c.CampaignId == campaignId)), Times.Once);
        }
        public async Task LockUnlockRedirectsToCorrectActionWithCorrectRouteValuesWhenUserIsSiteAdmin()
        {
            int CAMPAIGN_ID = 100;
            var mockMediator = new Mock<IMediator>();

            CampaignController controller = new CampaignController(mockMediator.Object, null);
            List<Claim> claims = new List<Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.SiteAdmin.ToString()),
            };
            controller.SetClaims(claims);

            RedirectToActionResult view = (RedirectToActionResult)await controller.LockUnlock(CAMPAIGN_ID);

            // verify the next route
            Assert.Equal(view.ActionName, nameof(CampaignController.Details));
            Assert.Equal(view.RouteValues["area"], "Admin");
            Assert.Equal(view.RouteValues["id"], CAMPAIGN_ID);

        }
        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 async Task EditPostInsertsCampaign()
        {
            int OrganizationId = 99;
            int NewCampaignId  = 100;
            var mockMediator   = new Mock <IMediator>();

            mockMediator.Setup(x => x.SendAsync(It.IsAny <EditCampaignCommand>()))
            .Returns((EditCampaignCommand q) => Task.FromResult <int>(NewCampaignId));

            var mockImageService          = new Mock <IImageService>();
            CampaignController controller = new CampaignController(mockMediator.Object, mockImageService.Object);
            List <Claim>       claims     = new List <Claim>
            {
                new Claim(AllReady.Security.ClaimTypes.UserType, UserType.OrgAdmin.ToString()),
                new Claim(AllReady.Security.ClaimTypes.Organization, OrganizationId.ToString())
            };

            controller.SetClaims(claims);

            var model = MassiveTrafficLightOutage_model;

            model.OrganizationId = OrganizationId;

            // verify the model is valid
            var validationContext = new ValidationContext(model, null, null);
            var validationResults = new List <ValidationResult>();

            Validator.TryValidateObject(model, validationContext, validationResults);
            Assert.Equal(0, validationResults.Count());

            var file = FormFile("image/jpeg");
            RedirectToActionResult view = (RedirectToActionResult)await controller.Edit(model, file);

            // verify the edit(add) is called
            mockMediator.Verify(mock => mock.SendAsync(It.Is <EditCampaignCommand>(c => c.Campaign.OrganizationId == OrganizationId)));

            // verify that the next route
            Assert.Equal(view.RouteValues["area"], "Admin");
            Assert.Equal(view.RouteValues["id"], NewCampaignId);
        }