Example #1
0
 def test_transfer_neg_to_neg(self):
     src = self.account(type=Account.TYPES.asset)
     dst = self.account(type=Account.TYPES.asset)
     src.transfer_to(dst, Money(100, "EUR"))
     self.assertEqual(src.balance(), Balance(-100, "EUR"))
     self.assertEqual(dst.balance(), Balance(100, "EUR"))
     Account.validate_accounting_equation()
Example #2
0
    def test_prepaid_rent(self):
        # All accounts start at 0
        self.assertBalanceEqual(self.cash.balance(), 0)
        self.assertBalanceEqual(self.rent_expense.balance(), 0)
        self.assertBalanceEqual(self.prepaid_rent.balance(), 0)

        # Pay the rent to the landlord
        self.cash.transfer_to(self.prepaid_rent, Money(3000, 'EUR'))
        self.assertBalanceEqual(self.cash.balance(), -3000)
        self.assertBalanceEqual(self.rent_expense.balance(), 0)
        self.assertBalanceEqual(self.prepaid_rent.balance(), 3000)

        # Now the end of the month, so turn 1k of rent into an expense
        self.prepaid_rent.transfer_to(self.rent_expense, Money(1000, 'EUR'))
        self.assertBalanceEqual(self.cash.balance(), -3000)
        self.assertBalanceEqual(self.rent_expense.balance(), 1000)
        self.assertBalanceEqual(self.prepaid_rent.balance(), 2000)

        # Now two more months
        self.prepaid_rent.transfer_to(self.rent_expense, Money(1000, 'EUR'))
        self.assertBalanceEqual(self.cash.balance(), -3000)
        self.assertBalanceEqual(self.rent_expense.balance(), 2000)
        self.assertBalanceEqual(self.prepaid_rent.balance(), 1000)

        self.prepaid_rent.transfer_to(self.rent_expense, Money(1000, 'EUR'))
        self.assertBalanceEqual(self.cash.balance(), -3000)
        self.assertBalanceEqual(self.rent_expense.balance(), 3000)
        self.assertBalanceEqual(self.prepaid_rent.balance(), 0)

        Account.validate_accounting_equation()
Example #3
0
    def test_utility_bill(self):
        # Month 1
        self.gas_expense.transfer_to(self.gas_payable, Money(100, 'EUR'))

        self.assertEqual(self.cash.balance(), 0)
        self.assertEqual(self.gas_expense.balance(), Balance(100, 'EUR'))
        self.assertEqual(self.gas_payable.balance(), Balance(100, 'EUR'))

        # Month 2
        self.gas_expense.transfer_to(self.gas_payable, Money(100, 'EUR'))

        self.assertEqual(self.cash.balance(), 0)
        self.assertEqual(self.gas_expense.balance(), Balance(200, 'EUR'))
        self.assertEqual(self.gas_payable.balance(), Balance(200, 'EUR'))

        # Month 3
        self.gas_expense.transfer_to(self.gas_payable, Money(100, 'EUR'))

        self.assertEqual(self.cash.balance(), 0)
        self.assertEqual(self.gas_expense.balance(), Balance(300, 'EUR'))
        self.assertEqual(self.gas_payable.balance(), Balance(300, 'EUR'))

        # We receive the actual bill (we are moving a negative amount of money,
        # as this is an outgoing)
        self.cash.transfer_to(self.gas_payable, Money(-300, 'EUR'))

        # We are now 300 overdrawn, but the payable account has been cleared
        self.assertEqual(self.cash.balance(), Balance(-300, 'EUR'))
        self.assertEqual(self.gas_expense.balance(), Balance(300, 'EUR'))
        self.assertEqual(self.gas_payable.balance(), 0)

        Account.validate_accounting_equation()
Example #4
0
 def test_transfer_pos_to_pos(self):
     src = self.account(type=Account.TYPES.income)
     dst = self.account(type=Account.TYPES.income)
     src.transfer_to(dst, Money(100, 'EUR'))
     self.assertEqual(src.balance(), Balance(-100, 'EUR'))
     self.assertEqual(dst.balance(), Balance(100, 'EUR'))
     Account.validate_accounting_equation()
Example #5
0
 def test_transfer_expense_to_liability(self):
     # This should perform the reverse action to that in the above test_transfer_liability_to_expense()
     src = self.account(type=Account.TYPES.expense)
     dst = self.account(type=Account.TYPES.liability)
     src.transfer_to(dst, Money(100, "EUR"))
     self.assertEqual(src.balance(), Balance(100, "EUR"))
     self.assertEqual(dst.balance(), Balance(100, "EUR"))
     Account.validate_accounting_equation()
Example #6
0
 def test_transfer_liability_to_expense(self):
     # When doing this it is probably safe to assume we want to the
     # liability account to contribute to an expense, therefore both should decrease
     src = self.account(type=Account.TYPES.liability)
     dst = self.account(type=Account.TYPES.expense)
     src.transfer_to(dst, Money(100, "EUR"))
     self.assertEqual(src.balance(), Balance(-100, "EUR"))
     self.assertEqual(dst.balance(), Balance(-100, "EUR"))
     Account.validate_accounting_equation()
Example #7
0
    def test_create_transaction_money_out(self):
        """Call StatementLine.create_transaction() for an expense"""
        line = StatementLine.objects.create(
            date="2016-01-01", statement_import=self.statement_import, amount=-100
        )
        line.refresh_from_db()

        transaction = line.create_transaction(self.expenses)
        self.assertEqual(transaction.legs.count(), 2)
        self.assertEqual(transaction.date, date(2016, 1, 1))
        self.assertEqual(self.bank.balance(), Balance(-100, "EUR"))
        self.assertEqual(self.expenses.balance(), Balance(100, "EUR"))
        line.refresh_from_db()
        self.assertEqual(line.transaction, transaction)
        Account.validate_accounting_equation()
Example #8
0
    def test_create_transaction_money_in(self):
        """Call StatementLine.create_transaction() for a sale"""
        line = StatementLine.objects.create(
            date='2016-01-01',
            statement_import=self.statement_import,
            amount=100,
        )
        line.refresh_from_db()

        transaction = line.create_transaction(self.sales)
        self.assertEqual(transaction.legs.count(), 2)
        self.assertEqual(transaction.date, date(2016, 1, 1))
        self.assertEqual(self.bank.balance(), Balance(100, 'EUR'))
        self.assertEqual(self.sales.balance(), Balance(100, 'EUR'))
        line.refresh_from_db()
        self.assertEqual(line.transaction, transaction)
        Account.validate_accounting_equation()
Example #9
0
 def test_str_child_no_data_unsaved(self):
     account1 = Account()
     account2 = Account(parent=account1)
     self.assertEqual(str(account2), "Unnamed Account")
Example #10
0
 def test_str_root_no_data_unsaved(self):
     account1 = Account()
     Account(parent=account1)
     self.assertEqual(str(account1), "Unnamed Account")