예제 #1
0
        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);
        }
예제 #2
0
        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)));
        }
예제 #3
0
        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);
        }
예제 #4
0
        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)));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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;
        }
예제 #7
0
        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);
        }