Ejemplo n.º 1
0
        public async Task CreateCampaignManagerInvite()
        {
            var handler = new CreateCampaignManagerInviteCommandHandler(Context);
            var invite  = new CampaignManagerInviteViewModel
            {
                CustomMessage       = "message",
                CampaignId          = 1,
                InviteeEmailAddress = "*****@*****.**",
            };

            var inviteCommand = new CreateCampaignManagerInviteCommand
            {
                Invite = invite,
                UserId = "userId"
            };

            handler.DateTimeUtcNow = () => new DateTime(2016, 5, 29);

            await handler.Handle(inviteCommand);

            Context.EventManagerInvites.Count().ShouldBe(0);
            Context.CampaignManagerInvites.Count().ShouldBe(1);
            Context.CampaignManagerInvites.SingleOrDefault().AcceptedDateTimeUtc.ShouldBe(null);
            Context.CampaignManagerInvites.SingleOrDefault().CustomMessage.ShouldBe("message");
            Context.CampaignManagerInvites.SingleOrDefault().CampaignId.ShouldBe(1);
            Context.CampaignManagerInvites.SingleOrDefault().InviteeEmailAddress.ShouldBe("*****@*****.**");
            Context.CampaignManagerInvites.SingleOrDefault().RejectedDateTimeUtc.ShouldBe(null);
            Context.CampaignManagerInvites.SingleOrDefault().RevokedDateTimeUtc.ShouldBe(null);
            Context.CampaignManagerInvites.SingleOrDefault().SenderUserId.ShouldBe("userId");
            Context.CampaignManagerInvites.SingleOrDefault().SentDateTimeUtc.ShouldBe(new DateTime(2016, 5, 29));
        }
Ejemplo n.º 2
0
        public async Task SendShouldCreateInvite_WhenUserIsOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new Campaign()
            {
                ManagingOrganizationId = 1
            };

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

            userManager.Setup(x => x.GetUserAsync(It.IsAny <ClaimsPrincipal>())).ReturnsAsync(new ApplicationUser());

            var sut = new CampaignManagerInviteController(mockMediator.Object, userManager.Object);

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

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

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

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

            var sut = new CampaignManagerInviteController(mockMediator.Object, UserManagerMockHelper.CreateUserManagerMock().Object);

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

            // Act
            IActionResult result = await sut.Send(invite.CampaignId, invite);

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.Is <CreateCampaignManagerInviteCommand>(c => c.Invite == invite)), Times.Never);
        }
Ejemplo n.º 4
0
        public async Task <IActionResult> Send(int campaignId, CampaignManagerInviteViewModel invite)
        {
            if (invite == null)
            {
                return(BadRequest());
            }

            if (ModelState.IsValid)
            {
                var campaign = await _mediator.SendAsync(new CampaignByCampaignIdQuery { CampaignId = campaignId });

                if (!User.IsOrganizationAdmin(campaign.ManagingOrganizationId))
                {
                    return(Unauthorized());
                }

                if (await _mediator.SendAsync(new UserHasCampaignManagerInviteQuery {
                    CampaignId = invite.CampaignId, InviteeEmail = invite.InviteeEmailAddress
                }))
                {
                    ModelState.AddModelError("InviteeEmailAddress", $"An invite already exists for {invite.InviteeEmailAddress}.");
                    return(View("Send", invite));
                }

                var userToInvite = await _userManager.FindByEmailAsync(invite.InviteeEmailAddress);

                if (userToInvite?.ManagedCampaigns != null && userToInvite.ManagedCampaigns.Any(m => m.CampaignId == campaignId))
                {
                    ModelState.AddModelError("InviteeEmailAddress", $"{invite.InviteeEmailAddress} is allready a manager for this campaign");
                    return(View("Send", invite));
                }

                invite.CampaignId = campaignId;
                var user = await _userManager.GetUserAsync(User);

                var inviteId = await _mediator.SendAsync(new CreateCampaignManagerInviteCommand
                {
                    Invite = invite,
                    UserId = user.Id,
                    IsInviteeRegistered = userToInvite != null,
                    SenderName          = user.Name,
                    RegisterUrl         = Url.Action(nameof(AllReady.Controllers.AccountController.Register), "Account", new { area = "" }, HttpContext.Request.Scheme)
                });

                return(RedirectToAction("Details", "Campaign", new { area = AreaNames.Admin, id = invite.CampaignId }));
            }

            return(View("Send", invite));
        }
Ejemplo n.º 5
0
        public async Task ShouldSendCampaignManagerInviteEmail()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var urlHelper    = new Mock <IUrlHelper>();

            urlHelper.Setup(x => x.Link("CampaignManagerInviteAcceptRoute", It.IsAny <object>())).Returns("http://accept.com/");
            urlHelper.Setup(x => x.Link("CampaignManagerInviteDeclineRoute", It.IsAny <object>())).Returns("http://decline.com/");

            var handler = new CreateCampaignManagerInviteCommandHandler(Context, mockMediator.Object, urlHelper.Object);
            var invite  = new CampaignManagerInviteViewModel
            {
                CustomMessage       = "test message",
                CampaignId          = 1,
                InviteeEmailAddress = "*****@*****.**",
                CampaignName        = "Test Campaign",
            };

            var inviteCommand = new CreateCampaignManagerInviteCommand
            {
                Invite              = invite,
                UserId              = "userId",
                SenderName          = "John Smith",
                RegisterUrl         = "http://register.com/",
                IsInviteeRegistered = true
            };

            handler.DateTimeUtcNow = () => new DateTime(2016, 5, 29);

            // Act
            await handler.Handle(inviteCommand);

            // Assert
            mockMediator.Verify(x => x.PublishAsync(It.Is <CampaignManagerInvited>(i =>
                                                                                   i.InviteeEmail == invite.InviteeEmailAddress &&
                                                                                   i.CampaignName == invite.CampaignName &&
                                                                                   i.SenderName == "John Smith" &&
                                                                                   i.AcceptUrl == "http://accept.com/" &&
                                                                                   i.DeclineUrl == "http://decline.com/" &&
                                                                                   i.RegisterUrl == "http://register.com/" &&
                                                                                   i.IsInviteeRegistered &&
                                                                                   i.Message == "test message"
                                                                                   )), Times.Once);
        }
Ejemplo n.º 6
0
        public async Task <IActionResult> Send(int campaignId, CampaignManagerInviteViewModel invite)
        {
            if (invite == null)
            {
                return(BadRequest());
            }

            if (ModelState.IsValid)
            {
                var campaign = await _mediator.SendAsync(new CampaignByCampaignIdQuery { CampaignId = campaignId });

                if (!User.IsOrganizationAdmin(campaign.ManagingOrganizationId))
                {
                    return(Unauthorized());
                }

                if (await _mediator.SendAsync(new UserHasCampaignManagerInviteQuery {
                    CampaignId = invite.CampaignId, InviteeEmail = invite.InviteeEmailAddress
                }))
                {
                    ModelState.AddModelError("InviteeEmailAddress", $"An invite already exists for {invite.InviteeEmailAddress}.");
                    return(View("Send", invite));
                }

                var userToInvite = await _userManager.FindByEmailAsync(invite.InviteeEmailAddress);

                if (userToInvite != null && userToInvite.ManagedCampaigns.Any(m => m.CampaignId == campaignId))
                {
                    ModelState.AddModelError("InviteeEmailAddress", $"{invite.InviteeEmailAddress} is allready a manager for this campaign");
                    return(View("Send", invite));
                }

                invite.CampaignId = campaignId;
                var user = await _userManager.GetUserAsync(User);

                await _mediator.SendAsync(new CreateCampaignManagerInviteCommand { Invite = invite, UserId = user.Id });

                return(RedirectToAction("Details", "Campaign", new { area = "Admin", id = invite.CampaignId }));
            }

            return(View("Send", invite));
        }
Ejemplo n.º 7
0
        public async Task SendReturnsUnauthorizedResult_WhenUserIsNotOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new CampaignManagerInviteViewModel()
            {
                CampaignId = campaignId, OrganizationId = 1
            };

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

            var sut = new CampaignManagerInviteController(mockMediator.Object, UserManagerMockHelper.CreateUserManagerMock().Object);

            sut.MakeUserAnOrgAdmin(organizationId: "2");

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

            // Assert
            Assert.IsType <UnauthorizedResult>(result);
        }
Ejemplo n.º 8
0
        public async Task SendShouldNotCreateInvite_WhenUserIsAllreadyManagerForEvent()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new Campaign()
            {
                ManagingOrganizationId = 1
            };

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

            var mockUserManger = UserManagerMockHelper.CreateUserManagerMock();

            mockUserManger.Setup(mock => mock.FindByEmailAsync(It.Is <string>(e => e == "*****@*****.**"))).ReturnsAsync(new ApplicationUser
            {
                ManagedCampaigns = new List <CampaignManager> {
                    new CampaignManager()
                    {
                        CampaignId = 1
                    }
                },
            });

            var sut = new CampaignManagerInviteController(mockMediator.Object, mockUserManger.Object);

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

            // Act
            IActionResult result = await sut.Send(invite.CampaignId, invite);

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.Is <CreateCampaignManagerInviteCommand>(c => c.Invite == invite)), Times.Never);
        }
Ejemplo n.º 9
0
        public async Task SendShouldNotCreateInvite_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 CampaignManagerInviteController(mockMediator.Object, UserManagerMockHelper.CreateUserManagerMock().Object);

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

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

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.IsAny <CreateCampaignManagerInviteCommand>()), Times.Never);
        }
Ejemplo n.º 10
0
        public async Task SendPassesCorrectViewModelToView()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var campaign     = new CampaignManagerInviteViewModel()
            {
                CampaignId = campaignId, OrganizationId = 1
            };

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

            var sut = new CampaignManagerInviteController(mockMediator.Object, UserManagerMockHelper.CreateUserManagerMock().Object);

            sut.MakeUserAnOrgAdmin(organizationId: "1");

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

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

            Assert.Equal(campaignId, model.CampaignId);
        }