Ejemplo n.º 1
0
        public async Task <int> CalculateAsync(ShiftInformation shiftInformation)
        {
            shiftInformation = FixPostMidnightDates(shiftInformation);
            var awakeHours        = CalculateAwakeHours(shiftInformation);
            var asleepHours       = CalculateAsleepHours(shiftInformation);
            var postMidnightHours = CalculatePostMidnightHours(shiftInformation);

            return(CalculateIncome(awakeHours, asleepHours, postMidnightHours));
        }
Ejemplo n.º 2
0
        public int CalculatePostMidnightHours(ShiftInformation shiftInformation)
        {
            var postMidnightHours = (int)(shiftInformation.EndTime - DateTime.Today.AddDays(1)).TotalHours;

            if (postMidnightHours < 0)
            {
                postMidnightHours = 0;
            }
            return(postMidnightHours);
        }
Ejemplo n.º 3
0
        public int CalculateAsleepHours(ShiftInformation shiftInformation)
        {
            var asleepHours = (int)(FixStartTime(shiftInformation.StartTime).Date.AddDays(1) - shiftInformation.BedTime).TotalHours;

            if (asleepHours < 0)
            {
                asleepHours = 0;
            }
            return(asleepHours);
        }
Ejemplo n.º 4
0
        public int CalculateAwakeHours(ShiftInformation shiftInformation)
        {
            var awakeHours = (int)(shiftInformation.BedTime - FixStartTime(shiftInformation.StartTime)).TotalHours;

            if (awakeHours < 0)
            {
                awakeHours = 0;
            }
            return(awakeHours);
        }
        public async Task <IActionResult> myControllerAction(ShiftInformation shiftInformation)
        {
            var paymentCalculationService = new PaymentCalculationService();
            var income = paymentCalculationService.CalculateAsync(shiftInformation);
            await Task.WhenAll(income);

            var data = new
            {
                income
            };

            return(Ok(data));
        }
Ejemplo n.º 6
0
        public ShiftInformation FixPostMidnightDates(ShiftInformation shiftInformation)
        {
            if (shiftInformation.StartTime.Hour < 5)
            {
                shiftInformation.StartTime = shiftInformation.StartTime.AddDays(1);
            }

            if (shiftInformation.EndTime.Hour < 5)
            {
                shiftInformation.EndTime = shiftInformation.EndTime.AddDays(1);
            }

            if (shiftInformation.BedTime.Hour < 5)
            {
                shiftInformation.BedTime = shiftInformation.BedTime.AddDays(1);
            }
            return(shiftInformation);
        }
        public void CalculateAwakeHours_BedTimeBeforeStartTime_DoesNotReturnNegativeHours(string startTime, string bedTime)
        {
            // Arrange
            var shiftInformation = new ShiftInformation();

            shiftInformation.StartTime = DateTime.Parse(startTime);
            shiftInformation.BedTime   = DateTime.Parse(bedTime);
            var service = new PaymentCalculationService();

            // Act
            var actualAwakeHours   = service.CalculateAwakeHours(shiftInformation);
            var expectedAwakeHours = (int)(shiftInformation.BedTime - shiftInformation.StartTime).TotalHours;

            if (expectedAwakeHours < 0)
            {
                expectedAwakeHours = 0;
            }

            Assert.Equal(expectedAwakeHours, actualAwakeHours);
        }
        public void CalculateAsleepHours_FractionalHours_OnlyCountsFullHours(string startTime, string bedTime)
        {
            // Arrange
            var shiftInformation = new ShiftInformation();

            shiftInformation.StartTime = DateTime.Parse(startTime);
            shiftInformation.BedTime   = DateTime.Parse(bedTime);
            var service = new PaymentCalculationService();

            // Act
            var actualAsleepHours   = service.CalculateAsleepHours(shiftInformation);
            var expectedAsleepHours = (int)(shiftInformation.StartTime.Date.AddDays(1) - shiftInformation.BedTime).TotalHours;

            if (expectedAsleepHours < 0)
            {
                expectedAsleepHours = 0;
            }

            Assert.Equal(expectedAsleepHours, actualAsleepHours);
        }