public async Task SendCampaignManagerInviteShouldCreateInvite_WhenUserIsOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new Campaign()
            {
                ManagingOrganizationId = 1
            };

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <CampaignByCampaignIdQuery>())).ReturnsAsync(campaign);

            var sut = new InviteController(mockMediator.Object, new FakeUserManager());

            sut.MakeUserAnOrgAdmin(organizationId: "1");
            var invite = new InviteViewModel
            {
                CampaignId          = 1,
                InviteeEmailAddress = "*****@*****.**",
                CustomMessage       = "test message"
            };

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId, invite);

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.Is <CreateCampaignManagerInviteCommand>(c => c.Invite == invite)), Times.Once);
        }
        public async Task SendCampaignManagerInviteReturnsPassesCorrectViewModelToView()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new Campaign()
            {
                ManagingOrganizationId = 1
            };

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <CampaignByCampaignIdQuery>())).ReturnsAsync(campaign);

            var sut = new InviteController(mockMediator.Object, new FakeUserManager());

            sut.MakeUserAnOrgAdmin(organizationId: "1");

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId);

            // Assert
            ViewResult view  = result as ViewResult;
            var        model = Assert.IsType <InviteViewModel>(view.ViewData.Model);

            Assert.Equal(campaignId, model.CampaignId);
            Assert.Equal("SendCampaignManagerInvite", model.FormAction);
            Assert.Equal("Send Campaign Manager Invite", model.Title);
        }
        public async Task SendCampaignManagerInviteShouldNotCreateInvite_WhenViewModelIsNull()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new InviteController(mockMediator.Object, new FakeUserManager());

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId, null);

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.IsAny <CreateCampaignManagerInviteCommand>()), Times.Never);
        }
        public async Task SendCampaignManagerInviteReturnsBadRequestResult_WhenViewModelIsNull()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new InviteController(mockMediator.Object, new FakeUserManager());

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId, null);

            // Assert
            Assert.IsType <BadRequestResult>(result);
        }
        public async Task SendCampaignManagerInviteSendsCampaignByCampaignIdQueryWithCorrectCampaignId()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new InviteController(mockMediator.Object, new FakeUserManager());

            // Act
            await sut.SendCampaignManagerInvite(campaignId);

            // Assert
            mockMediator.Verify(mock => mock.SendAsync(It.Is <CampaignByCampaignIdQuery>(c => c.CampaignId == campaignId)));
        }
        public async Task SendCampaignManagerInviteShouldNotCreateInvite_WhenModelStateIsNotValid()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new InviteController(mockMediator.Object, new FakeUserManager());

            sut.ModelState.AddModelError("Error", "Message");

            // Act
            var result = await sut.SendCampaignManagerInvite(campaignId, new InviteViewModel());

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.IsAny <CreateCampaignManagerInviteCommand>()), Times.Never);
        }
        public async Task SendEventManagerInviteShouldNotCreateInvite_WhenNoCampaignMatchesId()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();

            mockMediator.Setup(x => x.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(null);
            var sut    = new InviteController(mockMediator.Object, new FakeUserManager());
            var invite = new InviteViewModel();

            // Act
            var result = await sut.SendCampaignManagerInvite(eventId, invite);

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.IsAny <CreateCampaignManagerInviteCommand>()), Times.Never);
        }
        public async Task SendCampaignManagerInviteReturnsNotFoundResult_WhenNoCampaignMatchesId()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <CampaignByCampaignIdQuery>())).ReturnsAsync(null);

            var sut = new InviteController(mockMediator.Object, new FakeUserManager());

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId);

            // Assert
            Assert.IsType <NotFoundResult>(result);
        }
        public async Task SendCampaignManagerInviteReturnsBadRequestResult_WhenNoCampaignMatchesId()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();

            mockMediator.Setup(x => x.SendAsync(It.IsAny <CampaignByCampaignIdQuery>())).ReturnsAsync(null);
            var sut    = new InviteController(mockMediator.Object, new FakeUserManager());
            var invite = new InviteViewModel();

            // Act
            var result = await sut.SendCampaignManagerInvite(campaignId, new InviteViewModel());

            // Assert
            Assert.IsType <BadRequestResult>(result);
        }
        public async Task SendCampaignManagerInviteReturnsSendView_WhenModelStateIsNotValid()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var sut          = new InviteController(mockMediator.Object, new FakeUserManager());

            sut.ModelState.AddModelError("Error", "Message");

            // Act
            var result = await sut.SendCampaignManagerInvite(campaignId, new InviteViewModel());

            // Assert
            var view = Assert.IsType <ViewResult>(result);

            Assert.Equal("Send", view.ViewName);
        }
        public async Task SendCampaignManagerInviteReturnsUnauthorizedResult_WhenUserIsNotOrgAdmin()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <CampaignByCampaignIdQuery>())).ReturnsAsync(new Campaign());

            var sut = new InviteController(mockMediator.Object, new FakeUserManager());

            sut.MakeUserNotAnOrgAdmin();

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId);

            // Assert
            Assert.IsType <UnauthorizedResult>(result);
        }
        public async Task SendCampaignManagerInviteShouldNotCreateInvite_WhenUserIsNotOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new Campaign()
            {
                ManagingOrganizationId = 1
            };

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <CampaignByCampaignIdQuery>())).ReturnsAsync(campaign);

            var sut = new InviteController(mockMediator.Object, new FakeUserManager());

            sut.MakeUserAnOrgAdmin(organizationId: "2");
            var invite = new InviteViewModel();

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId, invite);

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.IsAny <CreateCampaignManagerInviteCommand>()), Times.Never);
        }
        public async Task SendCampaignManagerInvitePostReturnsUnauthorizedResult_WhenUserIsNotOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new Campaign()
            {
                ManagingOrganizationId = 1
            };

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <CampaignByCampaignIdQuery>())).ReturnsAsync(campaign);

            var sut = new InviteController(mockMediator.Object, new FakeUserManager());

            sut.MakeUserAnOrgAdmin(organizationId: "2");
            var invite = new InviteViewModel();

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId, invite);

            // Assert
            Assert.IsType <UnauthorizedResult>(result);
        }
        public async Task SendCampaignManagerInviteReturnsSendView_WhenUserIsOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new Campaign()
            {
                ManagingOrganizationId = 1
            };

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <CampaignByCampaignIdQuery>())).ReturnsAsync(campaign);

            var sut = new InviteController(mockMediator.Object, new FakeUserManager());

            sut.MakeUserAnOrgAdmin(organizationId: "1");

            // Act
            IActionResult result = await sut.SendCampaignManagerInvite(campaignId);

            // Assert
            Assert.IsType <ViewResult>(result);
            ViewResult view = result as ViewResult;

            Assert.Equal(view.ViewName, "Send");
        }