Ejemplo n.º 1
0
        public virtual async Task <SkillUpdateResult> PushSkillExpenditures(int gameId, string playerId,
                                                                            SkillExpenditureRequest skillExpenditureRequest, string baseApiUrl)
        {
            using (var client = new HttpClient())
            {
                var stringifiedObject = _serialization.SerializeToHttpStringContent(skillExpenditureRequest);

                var uri = new Uri(baseApiUrl + $"/games/{gameId}/players/{playerId}/skills");
                using (var response = await client.PostAsync(uri, stringifiedObject))
                {
                    using (var content = response.Content)
                    {
                        var data = await content.ReadAsStringAsync();

                        Debug.WriteLine($"POST request sent to '{uri.AbsolutePath}' with data: '{await stringifiedObject.ReadAsStringAsync()}'.");
                        Debug.WriteLine($"Got response: '{data}'");

                        if (data != null && response.IsSuccessStatusCode)
                        {
                            return(_serialization.DeserializeObject <SkillUpdateResult>(data));
                        }

                        var requestDataJson = await stringifiedObject.ReadAsStringAsync();

                        throw new ApiException(uri, HttpMethod.Post, requestDataJson, response.StatusCode, data);
                    }
                }
            }
        }
        public void Example_SkillExpenditure()
        {
            //--arrange
            var request = new SkillExpenditureRequest("31");

            request.IncreaseRegeneration();
            request.IncreaseBudding();
            request.IncreaseBudding();
            request.IncreaseAntiApoptosis();
            request.IncreaseHypermutation();
            request.IncreaseMycotoxicity();
            request.IncreaseHydrophilia();
            request.AddMoistureDroplet(1);
            request.AddMoistureDroplet(351);
            request.AddMoistureDroplet(591);

            //--act
            var jsonString = JsonConvert.SerializeObject(request, new JsonSerializerSettings
            {
                ContractResolver = new DefaultContractResolver
                {
                    NamingStrategy = new CamelCaseNamingStrategy()
                }
            });

            //--assert
            //--assert
            Debug.WriteLine(jsonString);
        }
        public async Task It_Returns_Next_Round_Available_If_All_Players_Have_Pushed_Their_Points()
        {
            //--arrange
            var newGame = await CreateValidGameForTesting(TestUserName, 1, 1);

            var firstPlayer = newGame.Players.First(x => x.Human);

            var skillExpenditureRequest = new SkillExpenditureRequest(firstPlayer.Id);

            for (int i = 0; i < firstPlayer.MutationPoints; i++)
            {
                skillExpenditureRequest.IncreaseRegeneration();
            }

            //--act
            var result = await GamesClient.PushSkillExpenditures(newGame.Id, firstPlayer.Id, skillExpenditureRequest, TestEnvironmentSettings.BaseApiUrl);

            //--assert
            result.NextRoundAvailable.ShouldBe(true);
        }
        public async Task It_Returns_A_400_Bad_Request_If_The_Player_Attempted_To_Push_Too_Many_Active_Cell_Changes()
        {
            //--arrange
            var newGame = await CreateValidGameForTesting(TestUserName, 2, 0);

            var firstPlayer = newGame.Players[0];

            var skillExpenditureRequest = new SkillExpenditureRequest(firstPlayer.Id);

            skillExpenditureRequest.AddMoistureDroplet(1);
            skillExpenditureRequest.AddMoistureDroplet(2);
            skillExpenditureRequest.AddMoistureDroplet(3);
            skillExpenditureRequest.AddMoistureDroplet(4);

            //--act
            var exception = Assert.ThrowsAsync <ApiException>(async() => await GamesClient.PushSkillExpenditures(newGame.Id, firstPlayer.Id, skillExpenditureRequest, TestEnvironmentSettings.BaseApiUrl));

            //--assert
            exception.ResponseStatusCode.ShouldBe(HttpStatusCode.BadRequest);
        }
        public async Task It_Returns_The_Updated_Player()
        {
            //--arrange
            var newGame = await CreateValidGameForTesting(TestUserName, 2, 0);

            var joinGameRequest = new JoinGameRequest(newGame.Id, TestUserName2);
            //--have another player join so that the game is started
            await GamesClient.JoinGame(joinGameRequest, TestEnvironmentSettings.BaseApiUrl);

            var firstPlayer = newGame.Players[0];

            var skillExpenditureRequest = new SkillExpenditureRequest(firstPlayer.Id);

            skillExpenditureRequest.IncreaseBudding();

            //--act
            var result = await GamesClient.PushSkillExpenditures(newGame.Id, firstPlayer.Id, skillExpenditureRequest, TestEnvironmentSettings.BaseApiUrl);

            //--assert
            result.UpdatedPlayer.MutationPoints.ShouldBe(firstPlayer.MutationPoints - 1);
        }
        public async Task It_Returns_Next_Round_Not_Available_If_Not_All_Players_Have_Pushed_Their_Points()
        {
            //--arrange
            var newGame = await CreateValidGameForTesting(TestUserName, 2, 0);

            var joinGameRequest = new JoinGameRequest(newGame.Id, TestUserName2);
            //--have another player join so that the game is started
            await GamesClient.JoinGame(joinGameRequest, TestEnvironmentSettings.BaseApiUrl);

            var firstPlayer = newGame.Players[0];

            var skillExpenditureRequest = new SkillExpenditureRequest(firstPlayer.Id);

            for (int i = 0; i < firstPlayer.MutationPoints; i++)
            {
                skillExpenditureRequest.IncreaseRegeneration();
            }

            //--act
            var result = await GamesClient.PushSkillExpenditures(newGame.Id, firstPlayer.Id, skillExpenditureRequest, TestEnvironmentSettings.BaseApiUrl);

            //--assert
            result.NextRoundAvailable.ShouldBe(false);
        }
 public async Task <SkillUpdateResult> PushSkillExpenditures(int gameId, string playerId, SkillExpenditureRequest skillExpenditureRequest)
 {
     return(await _gamesApiClient.PushSkillExpenditures(gameId, playerId, skillExpenditureRequest, _baseApiUrl));
 }