Пример #1
0
        public async Task CreateEventManagerInvite()
        {
            var mockMediator = new Mock <IMediator>();
            var urlHelper    = new Mock <IUrlHelper>();
            var handler      = new CreateEventManagerInviteCommandHandler(Context, mockMediator.Object, urlHelper.Object);
            var invite       = new EventManagerInviteViewModel
            {
                CustomMessage       = "message",
                EventId             = 5,
                InviteeEmailAddress = "*****@*****.**",
                Id = 5
            };

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

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

            await handler.Handle(inviteCommand);

            Context.CampaignManagerInvites.Count().ShouldBe(0);
            Context.EventManagerInvites.Count().ShouldBe(1);
            Context.EventManagerInvites.SingleOrDefault().AcceptedDateTimeUtc.ShouldBe(null);
            Context.EventManagerInvites.SingleOrDefault().CustomMessage.ShouldBe("message");
            Context.EventManagerInvites.SingleOrDefault().EventId.ShouldBe(5);
            Context.EventManagerInvites.SingleOrDefault().InviteeEmailAddress.ShouldBe("*****@*****.**");
            Context.EventManagerInvites.SingleOrDefault().RejectedDateTimeUtc.ShouldBe(null);
            Context.EventManagerInvites.SingleOrDefault().RevokedDateTimeUtc.ShouldBe(null);
            Context.EventManagerInvites.SingleOrDefault().SenderUserId.ShouldBe("userId");
            Context.EventManagerInvites.SingleOrDefault().SentDateTimeUtc.ShouldBe(new DateTime(2016, 5, 29));
        }
Пример #2
0
        public async Task SendShouldCreateInvite_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 userManager = UserManagerMockHelper.CreateUserManagerMock();

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

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

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

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

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.Is <CreateEventManagerInviteCommand>(c => c.Invite == invite)), Times.Once);
        }
Пример #3
0
        public async Task SendShouldNotCreateInvite_WhenAnInviteAlreadyExistsForInviteeEmailAddress()
        {
            // 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);
            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <UserHasEventManagerInviteQuery>())).ReturnsAsync(true);

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

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

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

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.Is <CreateEventManagerInviteCommand>(c => c.Invite == invite)), Times.Never);
        }
Пример #4
0
        public async Task SendShouldNotCreateInvite_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 EventManagerInviteController(mockMediator.Object, UserManagerMockHelper.CreateUserManagerMock().Object);

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

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

            // Assert
            mockMediator.Verify(x => x.SendAsync(It.IsAny <CreateEventManagerInviteCommand>()), Times.Never);
        }
Пример #5
0
        public async Task SendPostReturnsUnauthorizedResult_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 EventManagerInviteController(mockMediator.Object, UserManagerMockHelper.CreateUserManagerMock().Object);

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

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

            // Assert
            Assert.IsType <UnauthorizedResult>(result);
        }
Пример #6
0
        public async Task SendPassesCorrectViewModelToView()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var viewModel    = new EventManagerInviteViewModel
            {
                EventId        = eventId,
                EventName      = "TestEvent",
                CampaignId     = campaignId,
                CampaignName   = "TestCampaign",
                OrganizationId = 1
            };

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <EventManagerInviteQuery>())).ReturnsAsync(viewModel);

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

            sut.MakeUserAnOrgAdmin(organizationId: "1");

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

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

            Assert.Equal(eventId, model.EventId);
            Assert.Equal(campaignId, model.CampaignId);
            Assert.Equal("TestCampaign", model.CampaignName);
            Assert.Equal("TestEvent", model.EventName);
        }
Пример #7
0
        public async Task SendReturnsSendView_WhenUserIsOrgAdminForCampaign()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var viewModel    = new EventManagerInviteViewModel
            {
                OrganizationId = 1
            };

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

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

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

            sut.MakeUserAnOrgAdmin(organizationId: "1");

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

            // Assert
            Assert.IsType <ViewResult>(result);
            ViewResult view = result as ViewResult;
        }
        public async Task <IActionResult> Send(int eventId, EventManagerInviteViewModel invite)
        {
            if (invite == null)
            {
                return(BadRequest());
            }

            if (ModelState.IsValid)
            {
                var @event = await _mediator.SendAsync(new EventByEventIdQuery { EventId = eventId });

                if (!User.IsOrganizationAdmin(@event.Campaign.ManagingOrganizationId))
                {
                    return(Unauthorized());
                }

                if (await _mediator.SendAsync(new UserHasEventManagerInviteQuery {
                    EventId = invite.EventId, 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?.ManagedEvents != null && userToInvite.ManagedEvents.Any(m => m.EventId == eventId))
                {
                    ModelState.AddModelError("InviteeEmailAddress", $"{invite.InviteeEmailAddress} is allready a manager for this event");
                    return(View("Send", invite));
                }

                invite.EventId = eventId;
                var user = await _userManager.GetUserAsync(User);

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

                return(RedirectToAction(actionName: "Details", controllerName: "Event", routeValues: new { area = AreaNames.Admin, id = invite.EventId }));
            }
            return(View("Send", invite));
        }
Пример #9
0
        public async Task ShouldSendEventManagerInviteEmail()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var urlHelper    = new Mock <IUrlHelper>();

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

            var handler = new CreateEventManagerInviteCommandHandler(Context, mockMediator.Object, urlHelper.Object);
            var invite  = new EventManagerInviteViewModel
            {
                CustomMessage       = "test message",
                CampaignId          = 1,
                InviteeEmailAddress = "*****@*****.**",
                EventName           = "Test Event",
            };

            var inviteCommand = new CreateEventManagerInviteCommand
            {
                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 <EventManagerInvited>(i =>
                                                                                i.InviteeEmail == invite.InviteeEmailAddress &&
                                                                                i.EventName == invite.EventName &&
                                                                                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);
        }
Пример #10
0
        public async Task SendReturnsUnauthorizedResult_WhenUserIsNotOrgAdmin()
        {
            // Arrange
            var mockMediator = new Mock <IMediator>();
            var viewModel    = new EventManagerInviteViewModel()
            {
                OrganizationId = 1
            };

            mockMediator.Setup(mock => mock.SendAsync(It.IsAny <EventManagerInviteQuery>())).ReturnsAsync(viewModel);

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

            sut.MakeUserNotAnOrgAdmin();

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

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