public async Task SendEventManagerInviteShouldCreateInvite_WhenUserIsOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var @event       = new Event
            {
                Campaign = new Campaign()
                {
                    ManagingOrganizationId = 1
                }
            };

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(@event);

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

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

            // Act
            IActionResult result = await sut.SendEventManagerInvite(invite.EventId, invite);

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

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(@event);

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

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

            // Act
            IActionResult result = await sut.SendEventManagerInvite(eventId, invite);

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

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(@event);

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

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

            // Act
            IActionResult result = await sut.SendEventManagerInvite(eventId, invite);

            // Assert
            Assert.IsType <UnauthorizedResult>(result);
        }
        public async Task SendEventManagerInviteReturnsPassesCorrectViewModelToView()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var @event       = new Event();

            @event.Campaign = new Campaign()
            {
                ManagingOrganizationId = 1
            };
            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(@event);

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

            sut.MakeUserAnOrgAdmin(organizationId: "1");

            // Act
            IActionResult result = await sut.SendEventManagerInvite(eventId);

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

            Assert.Equal(eventId, model.EventId);
            Assert.Equal("Send Event Manager Invite", model.Title);
            Assert.Equal("SendEventManagerInvite", model.FormAction);
        }
        public async Task SendEventManagerInviteReturnsSendView_WhenUserIsOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var @event       = new Event();

            @event.Campaign = new Campaign()
            {
                ManagingOrganizationId = 1
            };
            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <EventByEventIdQuery>())).ReturnsAsync(@event);

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

            sut.MakeUserAnOrgAdmin(organizationId: "1");

            // Act
            IActionResult result = await sut.SendEventManagerInvite(eventId);

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

            Assert.Equal(view.ViewName, "Send");
        }
        public async Task SendCampaignManagerInviteReturnsUnauthorizedResult_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");

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

            // Assert
            Assert.IsType <UnauthorizedResult>(result);
        }