Beispiel #1
0
        public void TestCanConstructCalculatedScoreObjectTest()
        {
            // arrange
            TraditionalBowlingScoringCalculator traditionalBowlingScoringCalculator =
                new TraditionalBowlingScoringCalculator();
            TraditionalBowlingScoreCalculatorValidator traditionalBowlingScoreCalculatorValidator =
                new TraditionalBowlingScoreCalculatorValidator(traditionalBowlingScoringCalculator);

            IList <BowlingFrame> playedFrames = new List <BowlingFrame>()
            {
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 3, 7 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 8, 2 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 8, 1 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 10, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 3, 4 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 7, 0 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 5, 5 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 3, 2 }),
                BowlingFrame.CreateAndValidateFrameFromPoints(new int[] { 2, 5 })
            };

            // act
            CalculatedBowlingScoresDto calculatedBowlingScoresDto = traditionalBowlingScoreCalculatorValidator.ConstructScoresToValidate(playedFrames, traditionalBowlingScoringCalculator);

            // assert
            Assert.AreEqual(calculatedBowlingScoresDto.points.Length, 10);
            Assert.AreEqual(calculatedBowlingScoresDto.points.First(), 20);
            Assert.AreEqual(calculatedBowlingScoresDto.points.Last(), 123);
        }
Beispiel #2
0
        internal CalculatedBowlingScoresDto ConstructScoresToValidate(IList <BowlingFrame> playedBowlingFrames, TraditionalBowlingScoringCalculator scoreCalculator)
        {
            CalculatedBowlingScoresDto validationObject = new CalculatedBowlingScoresDto()
            {
                token  = _apiValidationToken,
                points = new int[playedBowlingFrames.Count]
            };

            int summarizedGameScore = 0;

            for (int i = 0; i < playedBowlingFrames.Count; i++)
            {
                summarizedGameScore       += _scoreCalculator.CalculateScoreForSingleFrame(i + 1, playedBowlingFrames);
                validationObject.points[i] = summarizedGameScore;
            }

            return(validationObject);
        }
Beispiel #3
0
        public BowlingScoreValidatorResultEnum ValidateBowlingScoreRules()
        {
            try
            {
                TestGameDataDto      playedFramesTestData = GetPlayedTestFramesFromRestApi(out _apiValidationToken);
                IList <BowlingFrame> playedBowlingFrames  = ConvertTestDataToBowlingFrames(playedFramesTestData);

                CalculatedBowlingScoresDto      calculatedBowlingGameScoreDto = ConstructScoresToValidate(playedBowlingFrames, _scoreCalculator);
                BowlingScoreValidatorResultEnum validationResult = ValidateCalculatedGameScoreAgainstApi(calculatedBowlingGameScoreDto);

                return(validationResult);
            }
            catch (WebException)
            {
                return(BowlingScoreValidatorResultEnum.ScoreCalculatorValidationServiceInaccesible);
            }
            catch (Exception)
            {
                throw;
            }
        }
Beispiel #4
0
        private BowlingScoreValidatorResultEnum ValidateCalculatedGameScoreAgainstApi(CalculatedBowlingScoresDto calculatedBowlingScoresDTO)
        {
            string        calculatedBowlingScoresAsJson = Newtonsoft.Json.JsonConvert.SerializeObject(calculatedBowlingScoresDTO);
            StringContent content = new StringContent(calculatedBowlingScoresAsJson, Encoding.UTF8, "application/json");

            HttpClient          client   = new HttpClient();
            string              url      = ConfigurationManager.AppSettings["BowlingScoreCalculatorValidationServiceUrl"];
            HttpResponseMessage response = client.PostAsync(url, content).Result;

            if (!response.IsSuccessStatusCode)
            {
                throw new WebException("The REST api used for retrieving test-data didn't respond in an orderly fashion");
            }

            JObject responseObject             = JObject.Parse(response.Content.ReadAsStringAsync().Result);
            bool    scoresValidatedSuccesfully = (bool)responseObject["success"];

            if (scoresValidatedSuccesfully)
            {
                return(BowlingScoreValidatorResultEnum.ScoreCalculatorWorksFine);
            }
            else
            {
                return(BowlingScoreValidatorResultEnum.ScoreCalculatorValidationServiceInaccesible);
            }
        }