public void PlayerCanUnblockAPlayerAfterBlockingThem()
        {
            BlockPlayerRequest request = new BlockPlayerRequest()
            {
                UserIdToBlock = authHelper.getAccountId("userTwo")
            };

            BlockPlayerResponse response = client.BlockPlayer(request);

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

            ViewBlockedPlayersResponse blockResponse = client.ViewBlockedPlayers(new ViewBlockedPlayersRequest());

            Assert.AreEqual(blockResponse.Status.IsSuccess, true);
            Assert.AreEqual(1, blockResponse.BlockedUsers.Count);
            Assert.IsTrue(blockResponse.BlockedUsers.Any(it => it.Id == authHelper.getAccountId("userTwo")));

            UnblockPlayerRequest unblockRequest = new UnblockPlayerRequest()
            {
                UserIdToBlock = authHelper.getAccountId("userTwo")
            };

            UnblockPlayerResponse unblockResponse = client.UnblockPlayer(unblockRequest);

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

            ViewBlockedPlayersResponse blockedUserResponse = client.ViewBlockedPlayers(new ViewBlockedPlayersRequest());

            Assert.AreEqual(blockedUserResponse.Status.IsSuccess, true);
            Assert.AreEqual(0, blockedUserResponse.BlockedUsers.Count);
        }
        public override async Task <ViewBlockedPlayersResponse> ViewBlockedPlayers(ViewBlockedPlayersRequest request, ServerCallContext context)
        {
            DbUserModel dbUserModel = context.UserState["user"] as DbUserModel;

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

            ViewBlockedPlayersResponse response = new ViewBlockedPlayersResponse();

            var blockedUsers = await Task.WhenAll(
                (await dbUserModel.GetBlockedUsers())
                .Select(
                    async it => (
                        await DbUserModel.GetUserFromGuid(it.FriendId)
                        ).AsUser()
                    )
                );


            response.BlockedUsers.AddRange(blockedUsers);
            response.Status = ResponseFactory.createResponse(ResponseType.SUCCESS);
            return(response);
        }
        public void AfterBlockingAPlayerTheyAppearOnTheBlockList()
        {
            BlockPlayerRequest request = new BlockPlayerRequest()
            {
                UserIdToBlock = authHelper.getAccountId("userTwo")
            };

            BlockPlayerResponse response = client.BlockPlayer(request);

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

            ViewBlockedPlayersResponse blockResponse = client.ViewBlockedPlayers(new ViewBlockedPlayersRequest());

            Assert.AreEqual(blockResponse.Status.IsSuccess, true);
            Assert.AreEqual(1, blockResponse.BlockedUsers.Count);
            Assert.IsTrue(blockResponse.BlockedUsers.Any(it => it.Id == authHelper.getAccountId("userTwo")));
        }
        public void CannotBlockAnAdmin()
        {
            SuperUser admin = authHelper.CreateSuperUser();

            var errorResponse = client.BlockPlayer(new BlockPlayerRequest()
            {
                UserIdToBlock = admin.DbUserModel.UserModel.Id,
            });

            Assert.AreEqual(errorResponse.Status.IsSuccess, false);
            Assert.AreEqual(errorResponse.Status.Detail, ResponseType.PERMISSION_DENIED.ToString());

            ViewBlockedPlayersResponse blockedUserResponse = client.ViewBlockedPlayers(new ViewBlockedPlayersRequest());

            Assert.AreEqual(errorResponse.Status.IsSuccess, true);
            Assert.AreEqual(0, blockedUserResponse.BlockedUsers.Count);
        }
        public override async Task <ViewBlockedPlayersResponse> ViewBlockedPlayers(ViewBlockedPlayersRequest request, ServerCallContext context)
        {
            RedisUserModel user = context.UserState["user"] as RedisUserModel;

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

            ViewBlockedPlayersResponse response = new ViewBlockedPlayersResponse();

            response.BlockedUsers.AddRange((await user.GetBlockedUsers()).ConvertAll(it => it.asUser()));
            response.Status = ResponseFactory.createResponse(ResponseType.SUCCESS);
            return(response);
        }