public void Test_Transaction_SplitDetails_UserObsolete() { var(account, _) = this.context.GenerateAccount(); var(splitwiseAccount, _) = this.context.GenerateAccount(AccountType.Splitwise); var category = this.context.GenerateCategory(); var user1 = this.SplitwiseContextMock.GenerateUser(1, "User1"); var transaction = this.context.GenerateTransaction( account, TransactionType.Expense, "Description", DateTime.Today.ToLocalDate(), -50, category, splitDetails: new List <SplitDetailEntity> { new SplitDetailEntity { SplitwiseUserId = user1.Id, Amount = 20, }, new SplitDetailEntity { SplitwiseUserId = 2, Amount = 15, }, }); this.context.SaveChanges(); Wv8Assert.Throws <IsObsoleteException>( () => this.TransactionProcessor.ProcessAll(), "Splitwise user is obsolete."); }
public void Test_CreateRecurringTransaction_SplitwiseValidation() { var(account, _) = this.context.GenerateAccount(); var splitwiseAccount = this.context.GenerateAccount(AccountType.Splitwise); var category = this.context.GenerateCategory(); var splitwiseUser = this.SplitwiseContextMock.GenerateUser(1, "User1"); this.context.SaveChanges(); // Wrong transaction type var input = this.GetInputRecurringTransaction( account.Id, TransactionType.Income, categoryId: category.Id, amount: 50, splitwiseSplits: new InputSplitwiseSplit { Amount = 25, UserId = 1 }.Singleton()); Wv8Assert.Throws <ValidationException>( () => this.RecurringTransactionManager.CreateRecurringTransaction(input), "Payment requests and Splitwise splits can only be specified on expenses."); // Splits greater than amount input.Amount = -10; Wv8Assert.Throws <ValidationException>( () => this.RecurringTransactionManager.CreateRecurringTransaction(input), "The amount split can not exceed the total amount of the transaction."); input.Amount = -100; // Split without amount input.SplitwiseSplits = new InputSplitwiseSplit { Amount = 0, UserId = 1 }.Singleton(); Wv8Assert.Throws <ValidationException>( () => this.RecurringTransactionManager.CreateRecurringTransaction(input), "Splits must have an amount greater than 0."); // 2 splits for same user input.SplitwiseSplits = new List <InputSplitwiseSplit> { new InputSplitwiseSplit { Amount = 10, UserId = 1 }, new InputSplitwiseSplit { Amount = 20, UserId = 1 }, }; Wv8Assert.Throws <ValidationException>( () => this.RecurringTransactionManager.CreateRecurringTransaction(input), "A user can only be linked to a single split."); // Unknown Splitwise user input.SplitwiseSplits = new InputSplitwiseSplit { Amount = 10, UserId = 2 }.Singleton(); Wv8Assert.Throws <ValidationException>( () => this.RecurringTransactionManager.CreateRecurringTransaction(input), "Unknown Splitwise user(s) specified."); }