public void AfterUpdateLastModifiedIsUpdated() { BudgetModel subject = BudgetModelTestData.CreateTestData1(); DateTime lastUpdated = subject.LastModified; Thread.Sleep(10); subject.Update(subject.Incomes, subject.Expenses); Assert.AreNotEqual(lastUpdated, subject.LastModified); }
public void UpdateIncomesAndExpenses( [NotNull] BudgetModel model, IEnumerable <Income> allIncomes, IEnumerable <Expense> allExpenses) { if (model == null) { throw new ArgumentNullException(nameof(model)); } // Copy view model bound data back into model. model.Update(allIncomes, allExpenses); }
/// <summary> /// A budget model that is effective from 01/1/13. /// Includes InsHome, and PhoneInternet, CarMtc, HairCut, Power /// Designed for use with LedgerBookTestData5 and StatementModelTestData5 /// </summary> public static BudgetModel CreateTestData5() { var budget = new BudgetModel { EffectiveFrom = new DateTime(2013, 01, 01), Name = TestDataConstants.Budget5Name }; var expenses = new List <Expense>( new[] { new Expense { Amount = 300M, Bucket = new SavedUpForExpenseBucket(TestDataConstants.InsuranceHomeBucketCode, "Home Insurance") }, new Expense { Amount = 120M, Bucket = new SavedUpForExpenseBucket(TestDataConstants.PhoneBucketCode, "Phone/Internet") }, new Expense { Amount = 100M, Bucket = new SavedUpForExpenseBucket(TestDataConstants.CarMtcBucketCode, "Car maintenance") }, new Expense { Amount = 65M, Bucket = new SpentMonthlyExpenseBucket(TestDataConstants.HairBucketCode, "Hair cuts") }, new Expense { Amount = 185M, Bucket = new SpentMonthlyExpenseBucket(TestDataConstants.PowerBucketCode, "Power") } }); var incomes = new List <Income>( new[] { new Income { Amount = 2600M, Bucket = new IncomeBudgetBucket(TestDataConstants.IncomeBucketCode, "Pay") } }); budget.Update(incomes, expenses); return(budget); }
public void SurplusCannotBeUsedInTheExpenseList() { BudgetModel subject = BudgetModelTestData.CreateTestData1(); List <Expense> myExpenses = subject.Expenses.ToList(); myExpenses.Add(new Expense { Amount = 445M, Bucket = new SurplusBucket() }); List <Income> myIncomes = subject.Incomes.ToList(); subject.Update(myIncomes, myExpenses); Assert.Fail(); }
public void AfterUpdateIncomesAreReplaced() { BudgetModel subject = BudgetModelTestData.CreateTestData1(); var incomes = new List <Income> { new Income { Amount = 9999, Bucket = new IncomeBudgetBucket("Foo", "Bar") }, new Income { Amount = 4444, Bucket = new IncomeBudgetBucket("Horse", "Shit") } }; subject.Update(incomes, subject.Expenses); Assert.AreEqual(9999M + 4444M, subject.Incomes.Sum(i => i.Amount)); }
public void AfterUpdateExpensesAreStillInDescendingOrder() { BudgetModel subject = BudgetModelTestData.CreateTestData1(); var expenses = new List <Expense> { new Expense { Amount = 4444, Bucket = new SpentMonthlyExpenseBucket("Horse", "Shit") }, new Expense { Amount = 9999, Bucket = new SavedUpForExpenseBucket("Foo", "Bar") } }; subject.Update(subject.Incomes, expenses); EnsureDescendingOrder(subject.Expenses); }
public void AfterUpdateExpensesAreReplaced() { BudgetModel subject = BudgetModelTestData.CreateTestData1(); var expenses = new List <Expense> { new Expense { Amount = 4444, Bucket = new SpentMonthlyExpenseBucket("Horse", "Shit") }, new Expense { Amount = 9999, Bucket = new SavedUpForExpenseBucket("Foo", "Bar") } }; subject.Update(subject.Incomes, expenses); Assert.AreEqual(4444M + 9999M, subject.Expenses.Sum(e => e.Amount)); }
public void AfterUpdateIncomesAreStillInDescendingOrder() { BudgetModel subject = BudgetModelTestData.CreateTestData1(); var incomes = new List <Income> { new Income { Amount = 4444, Bucket = new IncomeBudgetBucket("Horse", "Shit") }, new Income { Amount = 9999, Bucket = new IncomeBudgetBucket("Foo", "Bar") } }; subject.Update(incomes, subject.Expenses); EnsureDescendingOrder(subject.Incomes); }
public BudgetModel CloneBudgetModel(BudgetModel sourceBudget, DateTime newBudgetEffectiveFrom) { if (sourceBudget == null) { throw new ArgumentNullException(nameof(sourceBudget)); } if (newBudgetEffectiveFrom <= sourceBudget.EffectiveFrom) { throw new ArgumentException("The effective date of the new budget must be later than the other budget.", nameof(newBudgetEffectiveFrom)); } if (newBudgetEffectiveFrom <= DateTime.Today) { throw new ArgumentException("The effective date of the new budget must be a future date.", nameof(newBudgetEffectiveFrom)); } var validationMessages = new StringBuilder(); if (!sourceBudget.Validate(validationMessages)) { throw new ValidationWarningException(string.Format(CultureInfo.CurrentCulture, "The source budget is currently in an invalid state, unable to clone it at this time.\n{0}", validationMessages)); } var newBudget = new BudgetModel { EffectiveFrom = newBudgetEffectiveFrom, Name = string.Format(CultureInfo.CurrentCulture, "Copy of {0}", sourceBudget.Name) }; newBudget.Update(CloneBudgetIncomes(sourceBudget), CloneBudgetExpenses(sourceBudget)); if (!newBudget.Validate(validationMessages)) { throw new InvalidOperationException("New cloned budget is invalid but the source budget is ok. Code Error.\n" + validationMessages); } Budgets.Add(newBudget); this.budgetRepository.SaveAsync(); UpdateServiceMonitor(); return(newBudget); }