public void BlockingAPlayerAfterSendingThemAFriendRequestRemovesTheFriendRequest()
        {
            authHelper.loginToAccount("userOne");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            SendFriendRequestResponse response = client.SendFriendRequest(request);

            Assert.AreEqual(response.Status.IsSuccess, true);

            BlockPlayerRequest blockRequest = new BlockPlayerRequest()
            {
                UserIdToBlock = authHelper.getAccountId("userTwo")
            };

            client.BlockPlayer(blockRequest);
            authHelper.loginToAccount("userTwo");

            // Make sure the players are not friends.
            ViewFriendRequestsResponse blockFriendListResponse = client.ViewFriendRequests(new ViewFriendRequestsRequest());

            Assert.AreEqual(blockFriendListResponse.Status.IsSuccess, true);
            Assert.AreEqual(0, blockFriendListResponse.IncomingFriends.Count);
        }
        public void PlayerCanRemoveAFriendRequest()
        {
            authHelper.loginToAccount("userOne");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            SendFriendRequestResponse response = client.SendFriendRequest(request);

            Assert.AreEqual(response.Status.IsSuccess, true);

            authHelper.loginToAccount("userTwo");

            DenyFriendRequestRequest friendRequest = new DenyFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userOne"),
            };

            DenyFriendRequestResponse acceptResponse = client.DenyFriendRequest(friendRequest);

            Assert.AreEqual(acceptResponse.Status.IsSuccess, true);

            ViewFriendRequestsResponse friendResponse = client.ViewFriendRequests(new ViewFriendRequestsRequest());

            Assert.AreEqual(friendResponse.Status.IsSuccess, true);
            Assert.AreEqual(0, friendResponse.IncomingFriends.Count);
        }
        public void PlayerCannotGetAFriendRequestFromABlockedPlayer()
        {
            authHelper.loginToAccount("userOne");

            BlockPlayerRequest blockPlayerRequest = new BlockPlayerRequest()
            {
                UserIdToBlock = authHelper.getAccountId("userTwo")
            };

            client.BlockPlayer(blockPlayerRequest);
            authHelper.loginToAccount("userTwo");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userOne")
            };

            var exception = client.SendFriendRequest(request);

            Assert.AreEqual(exception.Status.IsSuccess, false);
            Assert.AreEqual(exception.Status.Detail, ResponseType.PLAYER_IS_BLOCKED.ToString());

            authHelper.loginToAccount("userOne");

            var friendResponse = client.ViewFriendRequests(new ViewFriendRequestsRequest());

            Assert.AreEqual(friendResponse.Status.IsSuccess, true);
            Assert.AreEqual(0, friendResponse.IncomingFriends.Count);
        }
        public void OriginalPlayerCanViewFriendAfterOtherPlayerAcceptsRequest()
        {
            authHelper.loginToAccount("userOne");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            SendFriendRequestResponse response = client.SendFriendRequest(request);

            Assert.AreEqual(response.Status.IsSuccess, true);

            authHelper.loginToAccount("userTwo");

            AcceptFriendRequestRequest friendRequest = new AcceptFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userOne"),
            };

            AcceptFriendRequestResponse acceptResponse = client.AcceptFriendRequest(friendRequest);

            Assert.AreEqual(acceptResponse.Status.IsSuccess, true);

            authHelper.loginToAccount("userOne");

            ViewFriendsResponse friendResponse = client.ViewFriends(new ViewFriendsRequest());

            Assert.AreEqual(friendResponse.Status.IsSuccess, true);
            Assert.AreEqual(1, friendResponse.Friends.Count);
            Assert.IsTrue(friendResponse.Friends.Any((friend) => friend.Id == authHelper.getAccountId("userTwo")));
        }
        public void PlayerCanSendFriendRequestToOtherPlayer()
        {
            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            SendFriendRequestResponse response = client.SendFriendRequest(request);

            Assert.AreEqual(response.Status.IsSuccess, true);
        }
        public void BlockingAPlayerRemovesThemAsAFriend()
        {
            authHelper.loginToAccount("userOne");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            SendFriendRequestResponse response = client.SendFriendRequest(request);

            Assert.AreEqual(response.Status.IsSuccess, true);

            authHelper.loginToAccount("userTwo");

            AcceptFriendRequestRequest friendRequest = new AcceptFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userOne"),
            };

            AcceptFriendRequestResponse acceptResponse = client.AcceptFriendRequest(friendRequest);

            Assert.AreEqual(acceptResponse.Status.IsSuccess, true);

            ViewFriendsResponse friendResponse = client.ViewFriends(new ViewFriendsRequest());

            Assert.AreEqual(friendResponse.Status.IsSuccess, true);
            Assert.AreEqual(1, friendResponse.Friends.Count);
            Assert.IsTrue(friendResponse.Friends.Any((friend) => friend.Id == authHelper.getAccountId("userOne")));

            BlockPlayerRequest blockRequest = new BlockPlayerRequest()
            {
                UserIdToBlock = authHelper.getAccountId("userOne")
            };

            BlockPlayerResponse blockResponse = client.BlockPlayer(blockRequest);

            Assert.AreEqual(blockResponse.Status.IsSuccess, true);

            // Make sure the players are not friends.
            ViewFriendsResponse blockFriendListResponse = client.ViewFriends(new ViewFriendsRequest());

            Assert.AreEqual(blockFriendListResponse.Status.IsSuccess, true);
            Assert.AreEqual(0, blockFriendListResponse.Friends.Count);

            authHelper.loginToAccount("userOne");

            // Make sure the players are not friends.
            ViewFriendsResponse blockFriendListResponseUserOne = client.ViewFriends(new ViewFriendsRequest());

            Assert.AreEqual(blockFriendListResponseUserOne.Status.IsSuccess, true);
            Assert.AreEqual(0, blockFriendListResponseUserOne.Friends.Count);
        }
        public override async Task <SendFriendRequestResponse> SendFriendRequest(SendFriendRequestRequest request, ServerCallContext context)
        {
            DbUserModel dbUserModel = context.UserState["user"] as DbUserModel;

            if (dbUserModel == null)
            {
                return new SendFriendRequestResponse()
                       {
                           Status = ResponseFactory.createResponse(ResponseType.UNAUTHORIZED)
                       }
            }
            ;

            DbUserModel friend = await DbUserModel.GetUserFromGuid(request.FriendId);

            if (friend == null)
            {
                return new SendFriendRequestResponse()
                       {
                           Status = ResponseFactory.createResponse(ResponseType.PLAYER_DOES_NOT_EXIST)
                       }
            }
            ;

            if (await friend.HasFriendRequestFrom(dbUserModel))
            {
                return new SendFriendRequestResponse()
                       {
                           Status = ResponseFactory.createResponse(ResponseType.DUPLICATE)
                       }
            }
            ;

            if (await friend.IsBlocked(dbUserModel) || await dbUserModel.IsBlocked(friend))
            {
                return new SendFriendRequestResponse()
                       {
                           Status = ResponseFactory.createResponse(ResponseType.PLAYER_IS_BLOCKED)
                       }
            }
            ;

            // Add request to the other player.
            await friend.AddFriendRequestFrom(dbUserModel);

            return(new SendFriendRequestResponse()
            {
                Status = ResponseFactory.createResponse(ResponseType.SUCCESS)
            });
        }
        public void PlayerCannotSendFriendRequestToInvalidPlayerId()
        {
            authHelper.loginToAccount("userOne");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = "asdfasdfasdf"
            };

            var exception = client.SendFriendRequest(request);

            Assert.AreEqual(exception.Status.IsSuccess, false);
            Assert.AreEqual(exception.Status.Detail, ResponseType.PLAYER_DOES_NOT_EXIST.ToString());
        }
        public void PlayerCannotSendMultipleFriendRequests()
        {
            authHelper.loginToAccount("userOne");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            SendFriendRequestResponse response = client.SendFriendRequest(request);

            Assert.AreEqual(response.Status.IsSuccess, true);

            var errorResponse = client.SendFriendRequest(request);

            Assert.AreEqual(errorResponse.Status.IsSuccess, false);
            Assert.AreEqual(errorResponse.Status.Detail, ResponseType.DUPLICATE.ToString());
        }
        public void WhenAPlayerGetsAFriendRequestTheyCanSeeIt()
        {
            authHelper.loginToAccount("userOne");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            SendFriendRequestResponse response = client.SendFriendRequest(request);

            Assert.AreEqual(response.Status.IsSuccess, true);

            authHelper.loginToAccount("userTwo");

            ViewFriendRequestsResponse friendRequestresponse = client.ViewFriendRequests(new ViewFriendRequestsRequest());

            Assert.AreEqual(friendRequestresponse.Status.IsSuccess, true);
            Assert.AreEqual(1, friendRequestresponse.IncomingFriends.Count);
            Assert.IsTrue(friendRequestresponse.IncomingFriends.Any((user) => user.Id == authHelper.getAccountId("userOne")));
        }
        public void PlayerCannotSendAFriendRequestToABlockedPlayer()
        {
            authHelper.loginToAccount("userOne");

            BlockPlayerRequest blockPlayerRequest = new BlockPlayerRequest()
            {
                UserIdToBlock = authHelper.getAccountId("userTwo")
            };

            client.BlockPlayer(blockPlayerRequest);

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            var exception = client.SendFriendRequest(request);

            Assert.AreEqual(exception.Status.IsSuccess, false);
            Assert.AreEqual(exception.Status.Detail, ResponseType.PLAYER_IS_BLOCKED.ToString());
        }
        public void PlayerCanAcceptAFriendRequest()
        {
            authHelper.loginToAccount("userOne");

            SendFriendRequestRequest request = new SendFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userTwo")
            };

            SendFriendRequestResponse response = client.SendFriendRequest(request);

            Assert.AreEqual(response.Status.IsSuccess, true);

            authHelper.loginToAccount("userTwo");

            AcceptFriendRequestRequest friendRequest = new AcceptFriendRequestRequest()
            {
                FriendId = authHelper.getAccountId("userOne"),
            };

            AcceptFriendRequestResponse acceptResponse = client.AcceptFriendRequest(friendRequest);

            Assert.AreEqual(acceptResponse.Status.IsSuccess, true);
        }