public void RecurringTransactionRepository_Update() { var dbHelper = new DbHelper(new SQLitePlatformWinRT(), new TestDatabasePath()); using (var db = dbHelper.GetSqlConnection()) { db.DeleteAll<RecurringTransaction>(); } var repository = new RecurringTransactionRepository(new RecurringTransactionDataAccess(dbHelper)); var account = new Account { Name = "TestAccount" }; var transaction = new RecurringTransaction { ChargedAccount = account, Amount = 20, AmountWithoutExchange = 20 }; repository.Save(transaction); Assert.AreEqual(1, repository.Data.Count); Assert.AreSame(transaction, repository.Data[0]); transaction.Amount = 789; repository.Save(transaction); Assert.AreEqual(1, repository.Data.Count); Assert.AreEqual(789, repository.Data[0].Amount); }
/// <summary> /// Creates an Financial Transaction based on the Recurring transaction. /// </summary> /// <param name="recurringTransaction">The Recurring Transaction the new Transaction shall be based on.</param> /// <returns>The new created Financial Transaction</returns> public static FinancialTransaction GetFinancialTransactionFromRecurring( RecurringTransaction recurringTransaction) { var date = DateTime.Today; //If the transaction is monthly we want it on the same day of month again. if (recurringTransaction.Recurrence == (int) TransactionRecurrence.Monthly) { date = DateTime.Today.AddDays(recurringTransaction.StartDate.Day - DateTime.Today.Day); } return new FinancialTransaction { ChargedAccount = recurringTransaction.ChargedAccount, ChargedAccountId = recurringTransaction.ChargedAccountId, TargetAccount = recurringTransaction.TargetAccount, TargetAccountId = recurringTransaction.TargetAccountId, Date = date, IsRecurring = true, Amount = recurringTransaction.Amount, Category = recurringTransaction.Category, CategoryId = recurringTransaction.CategoryId, Type = recurringTransaction.Type, ReccuringTransactionId = recurringTransaction.Id, RecurringTransaction = recurringTransaction, Note = recurringTransaction.Note }; }
/// <summary> /// Checks if the recurring Transaction is up for a repetition based on the passed Financial Transaction /// </summary> /// <param name="recTrans">RecurringTransaction to check.</param> /// <param name="relTransaction">Reference Transaction</param> /// <returns>True or False if the transaction have to be repeated.</returns> public static bool CheckIfRepeatable(RecurringTransaction recTrans, FinancialTransaction relTransaction) { switch (recTrans.Recurrence) { case (int) TransactionRecurrence.Daily: return DateTime.Today.Date != relTransaction.Date.Date; case (int) TransactionRecurrence.DailyWithoutWeekend: return DateTime.Today.Date != relTransaction.Date.Date && DateTime.Today.DayOfWeek != DayOfWeek.Saturday && DateTime.Today.DayOfWeek != DayOfWeek.Sunday; case (int) TransactionRecurrence.Weekly: var days = DateTime.Now - relTransaction.Date; return days.Days >= 7; case (int) TransactionRecurrence.Monthly: return DateTime.Now.Month != relTransaction.Date.Month; case (int) TransactionRecurrence.Yearly: return DateTime.Now.Year != relTransaction.Date.Year && DateTime.Now.Month == relTransaction.Date.Month; default: return false; } }
public void RecurringTransactionRepository_Delete() { var recurringTransactionDataAccessMock = new RecurringTransactionDataAccessMock(); var repository = new RecurringTransactionRepository(recurringTransactionDataAccessMock); var account = new Account { Name = "TestAccount" }; var transaction = new RecurringTransaction { ChargedAccount = account, Amount = 20, AmountWithoutExchange = 20 }; repository.Save(transaction); Assert.AreSame(transaction, recurringTransactionDataAccessMock.RecurringTransactionTestList[0]); repository.Delete(transaction); Assert.IsFalse(recurringTransactionDataAccessMock.RecurringTransactionTestList.Any()); Assert.IsFalse(repository.Data.Any()); }
/// <summary> /// Checks if the recurring Transaction is up for a repetition based on the passed Financial Transaction /// </summary> /// <param name="recTrans">RecurringTransaction to check.</param> /// <param name="relTransaction">Reference Transaction</param> /// <returns>True or False if the transaction have to be repeated.</returns> public static bool CheckIfRepeatable(RecurringTransaction recTrans, FinancialTransaction relTransaction) { if (!relTransaction.IsCleared) return false; switch (recTrans.Recurrence) { case (int) TransactionRecurrence.Daily: return DateTime.Today.Date != relTransaction.Date.Date; case (int) TransactionRecurrence.DailyWithoutWeekend: return DateTime.Today.Date != relTransaction.Date.Date && DateTime.Today.DayOfWeek != DayOfWeek.Saturday && DateTime.Today.DayOfWeek != DayOfWeek.Sunday; case (int) TransactionRecurrence.Weekly: var daysWeekly = DateTime.Now - relTransaction.Date; return daysWeekly.Days >= 7; case (int) TransactionRecurrence.Biweekly: var daysBiweekly = DateTime.Now - relTransaction.Date; return daysBiweekly.Days >= 14; case (int) TransactionRecurrence.Monthly: return DateTime.Now.Month != relTransaction.Date.Month; case (int) TransactionRecurrence.Yearly: return (DateTime.Now.Year != relTransaction.Date.Year && DateTime.Now.Month >= relTransaction.Date.Month) || (DateTime.Now.Year - relTransaction.Date.Year) > 1; default: return false; } }
public void RecurringTransactionRepository_AddMultipleToCache() { var recurringTransactionDataAccessMock = new RecurringTransactionDataAccessMock(); var repository = new RecurringTransactionRepository(recurringTransactionDataAccessMock); var account = new Account { Name = "TestAccount" }; var transaction = new RecurringTransaction { ChargedAccount = account, Amount = 20, AmountWithoutExchange = 20 }; var secondTransaction = new RecurringTransaction { ChargedAccount = account, Amount = 60, AmountWithoutExchange = 60 }; repository.Save(transaction); repository.Save(secondTransaction); Assert.AreEqual(2, repository.Data.Count); Assert.AreSame(transaction, repository.Data[0]); Assert.AreSame(secondTransaction, repository.Data[1]); }
public void RecurringTransactionDataAccess_CrudRecurringTransaction() { var recurringTransactionDataAccess = new RecurringTransactionDataAccess(new SqliteConnectionCreator(new WindowsSqliteConnectionFactory())); const double firstAmount = 100.70; const double secondAmount = 80.45; var transaction = new RecurringTransaction { ChargedAccountId = 7, Amount = firstAmount, StartDate = DateTime.Today, EndDate = DateTime.Now.AddDays(7), Note = "this is a note!!!" }; recurringTransactionDataAccess.SaveItem(transaction); var list = recurringTransactionDataAccess.LoadList(); Assert.Equal(1, list.Count); Assert.Equal(firstAmount, list.First().Amount); transaction.Amount = secondAmount; recurringTransactionDataAccess.SaveItem(transaction); recurringTransactionDataAccess.LoadList(); list = recurringTransactionDataAccess.LoadList(); Assert.Equal(1, list.Count); Assert.Equal(secondAmount, list.First().Amount); recurringTransactionDataAccess.DeleteItem(transaction); recurringTransactionDataAccess.LoadList(); list = recurringTransactionDataAccess.LoadList(); Assert.False(list.Any()); }
public void RecurringTransactionDataAccess_CrudRecurringTransaction() { var recurringTransactionDataAccess = new RecurringTransactionDataAccess(new DbHelper(new SQLitePlatformWinRT(), new TestDatabasePath())); const double firstAmount = 100.70; const double secondAmount = 80.45; var transaction = new RecurringTransaction { ChargedAccountId = 7, Amount = firstAmount, StartDate = DateTime.Today, EndDate = DateTime.Now.AddDays(7), Note = "this is a note!!!" }; recurringTransactionDataAccess.Save(transaction); var list = recurringTransactionDataAccess.LoadList(); Assert.AreEqual(1, list.Count); Assert.AreEqual(firstAmount, list.First().Amount); transaction.Amount = secondAmount; recurringTransactionDataAccess.Save(transaction); recurringTransactionDataAccess.LoadList(); list = recurringTransactionDataAccess.LoadList(); Assert.AreEqual(1, list.Count); Assert.AreEqual(secondAmount, list.First().Amount); recurringTransactionDataAccess.Delete(transaction); recurringTransactionDataAccess.LoadList(); list = recurringTransactionDataAccess.LoadList(); Assert.IsFalse(list.Any()); }
public void CheckIfRepeatable_DivRecurrences_ValidatedRecurrence(TransactionRecurrence recurrence, int amountOfDaysBack) { var account = new Account {Id = 2}; var recTrans = new RecurringTransaction { Id = 4, Recurrence = (int) recurrence, StartDate = new DateTime(2015, 08, 25), ChargedAccountId = 2, ChargedAccount = account, Amount = 105 }; RecurringTransactionHelper.CheckIfRepeatable(recTrans, new FinancialTransaction {Date = DateTime.Today.AddDays(-amountOfDaysBack)}); }
public void CheckIfRepeatable_UnclearedTransaction_ReturnFalse() { var account = new Account {Id = 2}; var recTrans = new RecurringTransaction { Id = 4, Recurrence = (int) TransactionRecurrence.Weekly, StartDate = new DateTime(2015, 08, 25), ChargedAccountId = 2, ChargedAccount = account, Amount = 105 }; RecurringTransactionHelper.CheckIfRepeatable(recTrans, new FinancialTransaction {Date = DateTime.Today.AddDays(11)}).ShouldBeFalse(); }
private static void SaveTransaction(RecurringTransaction recurringTransaction) { try { var date = DateTime.Now; if (recurringTransaction.Recurrence == (int) TransactionRecurrence.Monthly) { date = DateTime.Now.AddDays(recurringTransaction.StartDate.Day - DateTime.Today.Day); } var newTransaction = new FinancialTransaction { ChargedAccount = recurringTransaction.ChargedAccount, TargetAccount = recurringTransaction.TargetAccount, Date = date, IsRecurring = true, Amount = recurringTransaction.Amount, AmountWithoutExchange = recurringTransaction.AmountWithoutExchange, Currency = recurringTransaction.Currency, CategoryId = recurringTransaction.CategoryId, Type = recurringTransaction.Type, ReccuringTransactionId = recurringTransaction.Id, Note = recurringTransaction.Note }; transactionRepository.Save(newTransaction); } catch (Exception ex) { InsightHelper.Report(ex); } }
public void TransactionRepository_SaveWithouthAccount() { try { var recurringTransactionDataAccessMock = new RecurringTransactionDataAccessMock(); var repository = new RecurringTransactionRepository(recurringTransactionDataAccessMock); var transaction = new RecurringTransaction { Amount = 20, AmountWithoutExchange = 20 }; repository.Save(transaction); } catch (InvalidDataException) { return; } catch (Exception) { Assert.Fail("wrong exception."); } Assert.Fail("No excpetion thrown"); }
public void RemoveRecurringForTransactions(RecurringTransaction recTrans) { try { var relatedTrans = transactionRepository .Data .Where(x => x.IsRecurring && x.ReccuringTransactionId == recTrans.Id); foreach (var transaction in relatedTrans) { transaction.IsRecurring = false; transaction.ReccuringTransactionId = 0; transactionRepository.Save(transaction); } } catch (Exception ex) { InsightHelper.Report(ex); } }
public static void Delete(RecurringTransaction recTransaction) { RecurringTransactionData.Delete(recTransaction); RemoveRecurringForTransactions(recTransaction); }
public void GetFinancialTransactionFromRecurring_RecurringTransaction_CorrectMappedFinancialTrans( TransactionRecurrence recurrence) { var account = new Account {Id = 2}; var recTrans = new RecurringTransaction { Id = 4, Recurrence = (int) recurrence, StartDate = new DateTime(2015, 08, 25), ChargedAccountId = 2, ChargedAccount = account, Amount = 105 }; var result = RecurringTransactionHelper.GetFinancialTransactionFromRecurring(recTrans); result.ChargedAccount.ShouldBe(account); result.ChargedAccountId.ShouldBe(account.Id); result.Amount.ShouldBe(105); result.Date.ShouldBe(DateTime.Today); }
public void GetFinancialTransactionFromRecurring_MonthlyTransaction_CorrectMappedFinancialTrans() { var account = new Account {Id = 2}; var dayOfMonth = 26; var recTrans = new RecurringTransaction { Id = 4, Recurrence = (int) TransactionRecurrence.Monthly, StartDate = new DateTime(2015, 08, dayOfMonth), ChargedAccountId = 2, ChargedAccount = account, Amount = 105 }; var result = RecurringTransactionHelper.GetFinancialTransactionFromRecurring(recTrans); result.ChargedAccount.ShouldBe(account); result.ChargedAccountId.ShouldBe(account.Id); result.Amount.ShouldBe(105); result.Date.ShouldBe(new DateTime(DateTime.Today.Year, DateTime.Today.Month, dayOfMonth)); }
public void RecurringTransactionRepository_Save() { var recurringTransactionDataAccessMock = new RecurringTransactionDataAccessMock(); var repository = new RecurringTransactionRepository(recurringTransactionDataAccessMock); var account = new Account { Name = "TestAccount" }; var transaction = new RecurringTransaction { ChargedAccount = account, Amount = 20, AmountWithoutExchange = 20 }; repository.Save(transaction); Assert.IsTrue(transaction == recurringTransactionDataAccessMock.RecurringTransactionTestList[0]); Assert.IsTrue(account == recurringTransactionDataAccessMock.RecurringTransactionTestList[0].ChargedAccount); }