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