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)); }
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); }
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); }
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); }
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); }
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); }
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)); }
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); }
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); }