public async Task Givent_ALoserCat_When_PatchingIt_Then_CallTheDBWithTheRightsArumentsAndReturnTheUpdatedWinner()
        {
            int totalViews = 20;
            var loser      = new Cat
            {
                Id                = 1,
                ViewsNumber       = 7,
                ProbabilityWeight = 0.65,
                Rating            = 42.85
            };

            var loserAfterMatch = new Cat
            {
                Id                = 1,
                ViewsNumber       = 8,
                ProbabilityWeight = 0.6,
            };
            var updateParameter = new UpdateOneCatParameters(loserAfterMatch.Id, loserAfterMatch.ViewsNumber, loserAfterMatch.ProbabilityWeight, loser.Rating);

            _repository.GetOneAsync <int, CountViewsParameters>(Arg.Any <CountViewsParameters>()).Returns(totalViews);
            _repository.GetCatAsync <UpdateOneCatParameters>(Arg.Any <UpdateOneCatParameters>()).Returns(loserAfterMatch);

            var result = await _catService.PatchLoserCat(loser);

            Check.That(result).HasFieldsWithSameValues(loserAfterMatch);

            await _repository.Received().GetCatAsync <UpdateOneCatParameters>(Arg.Is <UpdateOneCatParameters>(x => (x.Id == 1 && x.Views == 8 && x.Weight == 0.6 && x.Rating == null)));
        }
Exemplo n.º 2
0
        //--
        //-- Applicative logic : should be factorized in Applicatio Layer (CatMash.Core.Application)
        //--
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public async Task <CatEntity> PatchLoserCat(CatEntity winner)
        {
            var parameters = new CountViewsParameters();
            int totalViews = await repository.GetOneAsync <int, CountViewsParameters>(parameters);

            winner.ApplyLoose(totalViews);

            var updateParameter = new UpdateOneCatParameters(winner);

            winner = await repository.GetCatAsync <UpdateOneCatParameters>(updateParameter);

            return(winner);
        }
Exemplo n.º 3
0
        public async Task <Cat> PatchWinnerCat(Cat winner)
        {
            var parameters = new CountViewsParameters();
            int totalViews = await _repository.GetOneAsync <int, CountViewsParameters>(parameters);

            if (totalViews == 0)
            {
                totalViews = 1;
            }
            winner.ViewsNumber += 1;
            winner.Wins        += 1;

            winner.ProbabilityWeight = await CalculateWeight(winner.ViewsNumber, totalViews);

            winner.Rating = winner.Wins * 100 / winner.ViewsNumber;

            var updateParameter = new UpdateOneCatParameters(winner.Id, winner.ViewsNumber, winner.ProbabilityWeight, winner.Rating, winner.Wins);

            winner = await _repository.GetCatAsync <UpdateOneCatParameters>(updateParameter);

            return(winner);
        }