public void BillDueCalculator_SingleReminder_NoReminderMatch_ShouldNotReportBillDue()
        {
            Bill testData = new Bill();

            testData.Name              = "Test Bill 1";
            testData.DayOfMonth        = 3;
            testData.ReminderIntervals = new List <int>()
            {
                1
            };

            BillDueCalculator sut = new BillDueCalculator();

            BillDueResult result = sut.IsBillDue(testData, new DateTime(2018, 1, 1));

            Assert.False(result.IsBillDue);
        }
        public void BillDueCalculator_SingleReminder_ReminderMatch_ShouldReportBillDue()
        {
            Bill testData = new Bill();

            testData.Name              = "Test Bill 1";
            testData.DayOfMonth        = 2;
            testData.ReminderIntervals = new List <int>()
            {
                1
            };

            BillDueCalculator sut = new BillDueCalculator();

            BillDueResult result = sut.IsBillDue(testData, new DateTime(2018, 1, 1));

            Assert.True(result.IsBillDue);
            Assert.Equal(string.Format("Reminder: {0} payment is due in {1} days.", testData.Name, 1), result.ReminderMessage);
        }
Exemplo n.º 3
0
        public BillDueResult IsBillDue(Bill bill, DateTime currentDate)
        {
            StringBuilder logMessage = new StringBuilder();
            BillDueResult result     = new BillDueResult()
            {
                IsBillDue       = false,
                ReminderMessage = ""
            };

            logMessage.AppendFormat("Checking if {0} is due...", bill.Name);

            IEnumerable <int> reminders = bill
                                          .ReminderIntervals?
                                          .Where(i => i > 0 && i <= 31)
                                          .OrderByDescending(i => i);

            if (reminders == null)
            {
                Log.Information(string.Format("No reminder intervals specified for {0}. Skipping this bill.", bill.Name));
            }

            foreach (int reminder in reminders)
            {
                if (isReminderNeeded(bill.DayOfMonth, reminder, currentDate))
                {
                    result.IsBillDue       = true;
                    result.ReminderMessage = string.Format("{0}: payment is due in {1} days.", bill.Name, reminder);
                    break;
                }
            }

            logMessage.Append(result.IsBillDue ? "yes" : "no");

            Log.Debug(logMessage.ToString());

            return(result);
        }