public void Execute_RequestsRoundedToIntegers_ResponseIsCorrect(RequestRoot request, List <int> roundedPercentages, ResponseRoot expectedResult)
        {
            var percentageCalculator = Substitute.For <IPercentageRounder>();

            percentageCalculator.Execute(Arg.Any <ICollection <decimal> >()).Returns(roundedPercentages);
            var requestHandler = new RequestHandler(percentageCalculator);

            var result = requestHandler.Execute(request);

            result.Should().BeEquivalentTo(expectedResult);
        }
        public void Execute_RequestHasZeroDataItems_ReturnsEmptyResponse()
        {
            var percentageCalculator = Substitute.For <IPercentageRounder>();
            var requestHandler       = new RequestHandler(percentageCalculator);

            var request        = new RequestRoot();
            var expectedResult = new ResponseRoot();

            var response = requestHandler.Execute(request);

            response.Should().BeEquivalentTo(expectedResult);
        }
        public void Execute_Response_Percentages_Add_Up_To_100(List <RequestData> dataList)
        {
            var percentageRounder = new PercentageRounder();
            var requestHandler    = new RequestHandler(percentageRounder);

            var request = new RequestRoot
            {
                Decimals = 0,
                Data     = dataList
            };

            var result = requestHandler.Execute(request);

            result.Data.Sum(x => x.Percentage).Should().Be(100);
        }
        public void Execute_All_Percentage_Values_Are_Positive(List <RequestData> dataList)
        {
            var percentageRounder = new PercentageRounder();
            var requestHandler    = new RequestHandler(percentageRounder);

            var request = new RequestRoot
            {
                Decimals = 0,
                Data     = dataList
            };

            var result = requestHandler.Execute(request);
            var allPercentagesArePositive = result.Data.All(x => x.Percentage > 0);

            allPercentagesArePositive.Should().BeTrue();
        }
        public void Execute_Largest_Value_Has_The_Largest_Percentage(List <RequestData> dataList)
        {
            var percentageRounder = new PercentageRounder();
            var requestHandler    = new RequestHandler(percentageRounder);

            var request = new RequestRoot
            {
                Decimals = 0,
                Data     = dataList
            };

            var result = requestHandler.Execute(request);

            var dataWithLargestValue      = result.Data.OrderByDescending(x => x.Value).First();
            var dataWithLargestPercentage = result.Data.OrderByDescending(x => x.Percentage).First();

            dataWithLargestValue.Should().Be(dataWithLargestPercentage);
        }