Exemple #1
0
        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.");
        }