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);
        }
        public static async Task <IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]
                                                     HttpRequest req,
                                                     [Table("Logs")] CloudTable percentageCalculationInputTable,
                                                     TraceWriter log)
        {
            log.Info("C# HTTP trigger function processed a request.");

            var requestBody = new StreamReader(req.Body).ReadToEnd();
            var requestRoot = JsonConvert.DeserializeObject <Models.Request.Root>(requestBody);

            // Move this to a DI container
            var percentageRounder = new PercentageRounder();
            var requestHandler    = new RequestHandler(percentageRounder);

            var response = requestHandler.Execute(requestRoot);

            await LogRequestAsync(percentageCalculationInputTable, requestBody, response);

            return(new OkObjectResult(response));
        }