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()
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()
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()
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()
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()
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()
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()
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()
def test_str_child_no_data_unsaved(self): account1 = Account() account2 = Account(parent=account1) self.assertEqual(str(account2), "Unnamed Account")
def test_str_root_no_data_unsaved(self): account1 = Account() Account(parent=account1) self.assertEqual(str(account1), "Unnamed Account")