public void SetUp() { dataContextMock = MockRepository.GenerateMock <IDataContext>(); emailServiceMock = MockRepository.GenerateMock <IIdentityMessageService>(); configurationManagerMock = MockRepository.GenerateMock <IConfigurationManager>(); playerInvitation = new PlayerInvitation { CustomEmailMessage = "custom message", EmailSubject = "email subject", InvitedPlayerEmail = "player email", InvitedPlayerId = 1 }; currentUser = new ApplicationUser { CurrentGamingGroupId = 15, UserName = "******" }; player = new Player { Id = playerInvitation.InvitedPlayerId, GamingGroupId = 135 }; gamingGroup = new GamingGroup { Id = currentUser.CurrentGamingGroupId, Name = "jake's Gaming Group" }; gamingGroupInvitation = new GamingGroupInvitation { Id = Guid.NewGuid() }; dataContextMock.Expect(mock => mock.FindById <GamingGroup>(currentUser.CurrentGamingGroupId)) .Return(gamingGroup); List <ApplicationUser> applicationUsers = new List <ApplicationUser> { new ApplicationUser { Email = playerInvitation.InvitedPlayerEmail, Id = existingUserId } }; dataContextMock.Expect(mock => mock.GetQueryable <ApplicationUser>()) .Return(applicationUsers.AsQueryable()); dataContextMock.Expect(mock => mock.Save <GamingGroupInvitation>(Arg <GamingGroupInvitation> .Is.Anything, Arg <ApplicationUser> .Is.Anything)) .Return(gamingGroupInvitation); configurationManagerMock.Expect(mock => mock.AppSettings[PlayerInviter.APP_SETTING_URL_ROOT]) .Return(rootUrl); emailServiceMock.Expect(mock => mock.SendAsync(Arg <IdentityMessage> .Is.Anything)) .Return(Task.FromResult <object>(null)); playerInviter = new PlayerInviter(dataContextMock, emailServiceMock, configurationManagerMock); }
public virtual ActionResult InvitePlayer(PlayerInvitationViewModel playerInvitationViewModel, ApplicationUser currentUser) { PlayerInvitation playerInvitation = new PlayerInvitation { InvitedPlayerId = playerInvitationViewModel.PlayerId, InvitedPlayerEmail = playerInvitationViewModel.EmailAddress.Trim(), EmailSubject = playerInvitationViewModel.EmailSubject, CustomEmailMessage = playerInvitationViewModel.EmailBody }; playerInviter.InvitePlayer(playerInvitation, currentUser); return(new RedirectResult(Url.Action(MVC.GamingGroup.ActionNames.Index, MVC.GamingGroup.Name))); }
public void InvitePlayer(PlayerInvitation playerInvitation, ApplicationUser currentUser) { var gamingGroup = _dataContext.FindById <GamingGroup>(playerInvitation.GamingGroupId); var existingUserId = (from ApplicationUser user in _dataContext.GetQueryable <ApplicationUser>() where user.Email == playerInvitation.InvitedPlayerEmail select user.Id).FirstOrDefault(); var gamingGroupInvitation = new GamingGroupInvitation { DateSent = DateTime.UtcNow, GamingGroupId = playerInvitation.GamingGroupId, InviteeEmail = playerInvitation.InvitedPlayerEmail, InvitingUserId = currentUser.Id, PlayerId = playerInvitation.InvitedPlayerId, RegisteredUserId = existingUserId }; var savedGamingGroupInvitation = _dataContext.Save(gamingGroupInvitation, currentUser); //commit so we can get the Id back _dataContext.CommitAllChanges(); var urlRoot = _configurationManager.AppSettings[APP_SETTING_URL_ROOT]; var customMessage = string.Empty; if (!string.IsNullOrWhiteSpace(playerInvitation.CustomEmailMessage)) { customMessage = $"{currentUser.UserName} says: {playerInvitation.CustomEmailMessage}"; } var messageBody = $@"Well hello there! You've been invited by '{currentUser.UserName}' to join the NemeStats Gaming Group called '{gamingGroup.Name}'! To join this Gaming Group, click on the following link: {urlRoot}/Account/ConsumeInvitation/{savedGamingGroupInvitation.Id} <br/><br/> {customMessage} <br/><br/> If you believe you've received this in error just disregard the email."; var message = new IdentityMessage { Body = messageBody, Destination = playerInvitation.InvitedPlayerEmail, Subject = playerInvitation.EmailSubject }; _emailService.SendAsync(message); }
public virtual ActionResult InvitePlayer(PlayerInvitationViewModel playerInvitationViewModel, ApplicationUser currentUser) { var playerInvitation = new PlayerInvitation { InvitedPlayerId = playerInvitationViewModel.PlayerId, InvitedPlayerEmail = playerInvitationViewModel.EmailAddress.Trim(), EmailSubject = playerInvitationViewModel.EmailSubject, CustomEmailMessage = playerInvitationViewModel.EmailBody }; playerInviter.InvitePlayer(playerInvitation, currentUser); SetToastMessage(TempMessageKeys.TEMP_MESSAGE_KEY_PLAYER_INVITED, $"Mail to invite {playerInvitationViewModel.PlayerName} sended succesfully"); return(new RedirectResult(Url.Action(MVC.GamingGroup.ActionNames.Index, MVC.GamingGroup.Name))); }
public void InvitePlayer(PlayerInvitation playerInvitation, ApplicationUser currentUser) { if (!currentUser.CurrentGamingGroupId.HasValue) { throw new UserHasNoGamingGroupException(currentUser.Id); } GamingGroup gamingGroup = dataContext.FindById <GamingGroup>(currentUser.CurrentGamingGroupId); string existingUserId = (from ApplicationUser user in dataContext.GetQueryable <ApplicationUser>() where user.Email == playerInvitation.InvitedPlayerEmail select user.Id).FirstOrDefault(); GamingGroupInvitation gamingGroupInvitation = new GamingGroupInvitation { DateSent = DateTime.UtcNow, GamingGroupId = currentUser.CurrentGamingGroupId.Value, InviteeEmail = playerInvitation.InvitedPlayerEmail, InvitingUserId = currentUser.Id, PlayerId = playerInvitation.InvitedPlayerId, RegisteredUserId = existingUserId }; GamingGroupInvitation savedGamingGroupInvitation = dataContext.Save <GamingGroupInvitation>(gamingGroupInvitation, currentUser); //commit so we can get the Id back dataContext.CommitAllChanges(); string urlRoot = configurationManager.AppSettings[APP_SETTING_URL_ROOT]; string messageBody = string.Format(PlayerInviter.EMAIL_MESSAGE_INVITE_PLAYER, currentUser.UserName, gamingGroup.Name, urlRoot, playerInvitation.CustomEmailMessage, savedGamingGroupInvitation.Id, "<br/><br/>"); var message = new IdentityMessage { Body = messageBody, Destination = playerInvitation.InvitedPlayerEmail, Subject = playerInvitation.EmailSubject }; emailService.SendAsync(message); }
public static IPlayerInvitation CreatePlayerInvitation( this IDocumentSession documentSession, int roomId) { documentSession.Ensure("documentSession"); var room = GetRoomById(documentSession, roomId); if (room == null) throw new InvalidOperationException(Strings.NoEntityForId("room", roomId)); var playerInvitation = new PlayerInvitation { Code = Guid.NewGuid().ToString(), RoomId = room.Id }; documentSession.Store(playerInvitation); return playerInvitation; }
public Player CreatePlayer(CreatePlayerRequest createPlayerRequest, ApplicationUser applicationUser, bool linkCurrentUserToThisPlayer = false) { ValidateRequestIsNotNull(createPlayerRequest); ValidatePlayerNameIsNotNullOrWhiteSpace(createPlayerRequest.Name); ValidateRequestedEmailIsntSetAtTheSameTimeAsAttemptingToLinktoCurrentPlayer(createPlayerRequest, linkCurrentUserToThisPlayer); var gamingGroupId = ValidateAndGetGamingGroupId(createPlayerRequest.GamingGroupId, applicationUser); ValidatePlayerDoesntExistWithThisName(createPlayerRequest.Name, gamingGroupId); ValidateUserNotAlreadyRegisteredWithThisEmail( gamingGroupId, createPlayerRequest.PlayerEmailAddress); var newPlayer = new Player { Name = createPlayerRequest.Name, Active = true, ApplicationUserId = linkCurrentUserToThisPlayer ? applicationUser.Id : null, GamingGroupId = gamingGroupId }; newPlayer = _dataContext.Save(newPlayer, applicationUser); if (!string.IsNullOrWhiteSpace(createPlayerRequest.PlayerEmailAddress)) { var playerInvitation = new PlayerInvitation { EmailSubject = $"NemeStats Invitation from {applicationUser.UserName}", InvitedPlayerEmail = createPlayerRequest.PlayerEmailAddress, InvitedPlayerId = newPlayer.Id, GamingGroupId = gamingGroupId }; _playerInviter.InvitePlayer(playerInvitation, applicationUser); } _dataContext.CommitAllChanges(); new Task(() => _eventTracker.TrackPlayerCreation(applicationUser)).Start(); return(newPlayer); }