public void CanAddASpecialistPackageToAPackage()
        {
            SubmitCustomSpecialistResponse response    = submitCustomSpecialist("MyCustomSpecialist");
            SubmitCustomSpecialistResponse responseTwo = submitCustomSpecialist("SecondCustomSpec");

            CreateSpecialistPackageResponse packageResponse = client.CreateSpecialistPackage(
                new CreateSpecialistPackageRequest()
            {
                SpecialistPackage = new SpecialistPackage()
                {
                    PackageName   = "myPackage",
                    SpecialistIds = { response.SpecialistConfigurationId },
                }
            });

            CreateSpecialistPackageResponse packageInPackageResponse = client.CreateSpecialistPackage(
                new CreateSpecialistPackageRequest()
            {
                SpecialistPackage = new SpecialistPackage()
                {
                    PackageName          = "myPackage In A Package",
                    SpecialistIds        = { responseTwo.SpecialistConfigurationId },
                    SpecialistPackageIds = { packageResponse.SpecialistPackageId }
                }
            });

            GetPlayerSpecialistPackagesResponse playerPackages = client.GetPlayerSpecialistPackages(new GetPlayerSpecialistPackagesRequest()
            {
                PlayerId = authHelper.getAccountId("userOne")
            });

            Assert.True(playerPackages.PlayerPackages.Count == 2);
            Assert.True(playerPackages.PlayerPackages.Count(it => it.Id == packageInPackageResponse.SpecialistPackageId) == 1);
            Assert.True(playerPackages.PlayerPackages.Count(it => it.Id == packageResponse.SpecialistPackageId) == 1);
        }
        public void CanAddMultipleSpecialistsToAPackage()
        {
            SubmitCustomSpecialistResponse response    = submitCustomSpecialist("MyCustomSpecialist");
            SubmitCustomSpecialistResponse responseTwo = submitCustomSpecialist("SecondCustomSpec");

            CreateSpecialistPackageResponse packageResponse = client.CreateSpecialistPackage(
                new CreateSpecialistPackageRequest()
            {
                SpecialistPackage = new SpecialistPackage()
                {
                    PackageName   = "myPackage",
                    SpecialistIds = { response.SpecialistConfigurationId, responseTwo.SpecialistConfigurationId },
                }
            });

            Assert.IsTrue(packageResponse.Status.IsSuccess);
            Assert.NotNull(packageResponse.SpecialistPackageId);

            GetPlayerSpecialistPackagesResponse playerPackages = client.GetPlayerSpecialistPackages(new GetPlayerSpecialistPackagesRequest()
            {
                PlayerId = authHelper.getAccountId("userOne")
            });

            Assert.True(playerPackages.PlayerPackages.Count == 1);
            Assert.True(playerPackages.PlayerPackages[0].Creator.Username == "userOne");
            Assert.True(playerPackages.PlayerPackages[0].SpecialistIds.Count == 2);
            Assert.True(playerPackages.PlayerPackages[0].SpecialistIds.Count(it => it == response.SpecialistConfigurationId) == 1);
            Assert.True(playerPackages.PlayerPackages[0].SpecialistIds.Count(it => it == responseTwo.SpecialistConfigurationId) == 1);
        }
        public override async Task <GetPlayerSpecialistPackagesResponse> GetPlayerSpecialistPackages(GetPlayerSpecialistPackagesRequest request, ServerCallContext context)
        {
            DbUserModel user = context.UserState["user"] as DbUserModel;

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

            // Get the requested user from their id
            DbUserModel player = await DbUserModel.GetUserFromGuid(request.PlayerId);

            if (player == null)
            {
                return(new GetPlayerSpecialistPackagesResponse()
                {
                    Status = ResponseFactory.createResponse(ResponseType.PLAYER_DOES_NOT_EXIST)
                });
            }
            List <SpecialistPackageModel> results = await player.GetSpecialistPackages();

            GetPlayerSpecialistPackagesResponse response = new GetPlayerSpecialistPackagesResponse()
            {
                Status = ResponseFactory.createResponse(ResponseType.SUCCESS),
            };

            foreach (SpecialistPackageModel model in results)
            {
                response.PlayerPackages.Add(model.SpecialistPackage);
            }

            return(response);
        }
    }