Пример #1
0
    def test_fees(self):
        cad_cash = self.account(type=Account.TYPES.asset, currencies=['CAD'])
        usd_cash = self.account(type=Account.TYPES.asset, currencies=['USD'])
        initial_capital = self.account(type=Account.TYPES.equity, currencies=['CAD'])
        trading = self.account(type=Account.TYPES.trading, currencies=['CAD', 'USD'])
        banking_fees = self.account(type=Account.TYPES.expense, currencies=['CAD'])

        initial_capital.transfer_to(cad_cash, Money(200, 'CAD'))
        currency_exchange(
            source=cad_cash,
            source_amount=Money(120, 'CAD'),
            destination=usd_cash,
            destination_amount=Money(100, 'USD'),
            trading_account=trading,
            fee_destination=banking_fees,
            fee_amount=Money(1.50, 'CAD')
        )
        self.assertEqual(cad_cash.balance(), Balance(80, 'CAD'))
        self.assertEqual(usd_cash.balance(), Balance(100, 'USD'))
        self.assertEqual(banking_fees.balance(), Balance(1.50, 'CAD'))
Пример #2
0
    def test_peter_selinger_tutorial_table_4_4(self):
        """Test the example given by Peter Selinger in his muticurrency accounting tutorial. Table 4.4"""
        cad_cash = self.account(type=Account.TYPES.asset, currencies=['CAD'])
        usd_cash = self.account(type=Account.TYPES.asset, currencies=['USD'])
        initial_capital = self.account(type=Account.TYPES.equity, currencies=['CAD'])
        food = self.account(type=Account.TYPES.expense, currencies=['CAD'])
        trading = self.account(type=Account.TYPES.trading, currencies=['CAD', 'USD'])

        # Put CAD 200 into cad_cash
        initial_capital.transfer_to(cad_cash, Money(200, 'CAD'))
        self.assertEqual(initial_capital.balance(), Balance(200, 'CAD'))
        self.assertEqual(cad_cash.balance(), Balance(200, 'CAD'))

        # Exchange CAD 120 to USD 100 (1 USD = 1.20 CAD)
        currency_exchange(cad_cash, Money(120, 'CAD'), usd_cash, Money(100, 'USD'), trading)
        self.assertEqual(cad_cash.balance(), Balance(80, 'CAD'))
        self.assertEqual(usd_cash.balance(), Balance(100, 'USD'))
        self.assertEqual(trading.balance(), Balance(100, 'USD', -120, 'CAD'))

        # Buy food (1 USD = 1.30 CAD)
        currency_exchange(usd_cash, Money(40, 'USD'), food, Money(52, 'CAD'), trading)
        self.assertEqual(usd_cash.balance(), Balance(60, 'USD'))
        self.assertEqual(food.balance(), Balance(52, 'CAD'))
        self.assertEqual(trading.balance(), Balance(60, 'USD', -68, 'CAD'))

        # Exchange all USD back to CAD (1 USD = 1.25 CAD)
        currency_exchange(usd_cash, Money(60, 'USD'), cad_cash, Money(75, 'CAD'), trading)
        self.assertEqual(cad_cash.balance(), Balance(155, 'CAD'))
        self.assertEqual(usd_cash.balance(), Balance(0, 'USD'))
        self.assertEqual(trading.balance(), Balance(0, 'USD', 7, 'CAD'))

        # Buy food in CAD
        cad_cash.transfer_to(food, Money(20, 'CAD'))
        self.assertEqual(cad_cash.balance(), Balance(135, 'CAD'))
        self.assertEqual(food.balance(), Balance(72, 'CAD'))