Esempio n. 1
0
def test_comparisons_and_ident():
    prep_test_assets()
    a = Asset.get("EN")
    am0 = AssetAmount(asset=a, amount=0)
    am1 = AssetAmount(asset=a, amount=1)
    am2 = AssetAmount(asset=a, amount=2)

    assert_true(am0 < am1)
    assert_false(am0 > am1)
    assert_false(am0 >= am1)
    assert_true(am1 < am2)
    assert_false(am1 > am2)
    assert_false(am1 >= am2)
    assert_true(am1 > am0)
    assert_false(am1 < am0)
    assert_false(am1 <= am0)
    assert_true(am2 > am1)
    assert_false(am2 < am1)
    assert_false(am2 <= am1)

    am3 = AssetAmount(asset=a, amount=0)
    assert_true(am0 >= am3)
    assert_true(am0 <= am3)
    assert_true(am0 == am3)
    assert_false(am0 != am3)
    assert_false(am0 is am3)
Esempio n. 2
0
def test_accounting_equation_with_groups():
    clear_all_definitions()
    Asset.define("USD")

    assets = AccountGroup.define(name="assets")
    liabilities = AccountGroup.define(name="liabilities")
    equity = AccountGroup.define(name="equity")

    shareholder_equity = Account.define(name="shareholder_equity", asset="USD")
    wells_fargo = Account.define(name="wells_fargo", asset="USD")
    equipment = Account.define(name="equipment", asset="USD")
    cash = Account.define(name="cash", asset="USD")

    assets.add(cash)
    assets.add(equipment)
    equity.add(shareholder_equity)
    liabilities.add(wells_fargo)

    ipo_amount = AssetAmount(amount=D(100), asset="USD")
    ipo_entry = DoubleEntry(src=shareholder_equity,
                            dest=equipment,
                            asset_amount=ipo_amount)

    loan_amount = AssetAmount(amount=D(50), asset="USD")
    loan_entry = DoubleEntry(src=wells_fargo,
                             dest=cash,
                             asset_amount=loan_amount)

    with GeneralLedger.transaction_lock:
        GeneralLedger.realize(ipo_entry)
        GeneralLedger.realize(loan_entry)

    assert_true(GeneralLedger.balance()[Asset["USD"]].amount == D(0))
    assert_true(assets + liabilities +
                equity == AssetAmount(asset="USD", amount=D(0)))
Esempio n. 3
0
def test_asset_amount_creation():
    prep_test_assets()
    a = Asset.get("EN")
    AssetAmount(asset=a, amount="0")
    AssetAmount(asset=a, amount=1)
    AssetAmount(asset=a, amount=D(1))
    AssetAmount(asset="EN", amount=2)
Esempio n. 4
0
def test_asset_balance_comparisons():
    clear_all_definitions()
    k = Asset.define("KET")
    b0 = AssetBalance()
    b1 = AssetBalance()
    b0[k] = AssetAmount(asset=k, amount=D("123"))
    b1[k] = AssetAmount(asset=k, amount=D("123"))
    assert_true(AssetAmount(asset=k, amount=D("123")) == b1)
    assert_true(b0 == AssetAmount(asset=k, amount=D("123")))
    assert_true(b0 == b1)
Esempio n. 5
0
def test_asset_quote_multiplication():
    prep_test_assets_and_pairs()
    aq = ExchangeRate(rate=D(2), base="EN", quote="RON")
    qam = AssetAmount(asset="EN", amount=1)
    res = AssetAmount(asset="RON", amount=2)
    nosetools.eq_(aq * qam, res)
    nosetools.eq_(qam * aq, res)
    nosetools.eq_(qam / aq, res)

    bam = AssetAmount(asset="RON", amount=2)
    res = AssetAmount(asset="EN", amount=1)
    nosetools.eq_(bam * aq, res)
    nosetools.eq_(aq * bam, res)
    nosetools.eq_(bam / aq, res)
Esempio n. 6
0
def test_cannot_commit_without_lock():
    prep_test_ledger()
    ipo_amount = AssetAmount(amount=D(100), asset="USD")
    ipo_entry = DoubleEntry(src="shareholder_equity",
                            dest="equipment",
                            asset_amount=ipo_amount)
    GeneralLedger.commit(ipo_entry)
Esempio n. 7
0
def test_account_entry_creation():
    ac = get_test_account()
    AccountEntry(account=ac, asset="EN", amount="123.13")
    AccountEntry(account=ac,
                 asset_amount=AssetAmount(asset="EN", amount="123.13"))
    AccountEntry(account=ac, asset=Asset["EN"], amount=1)
    AccountEntry(account=ac, asset="EN", amount=D(1.0))
    AccountEntry(account=ac, amount=1)
Esempio n. 8
0
def test_asset_math():
    prep_test_assets()
    foo = Asset.get("EN")
    am0 = AssetAmount(asset=foo, amount=0)
    am1 = AssetAmount(asset=foo, amount=1)
    am2 = AssetAmount(asset=foo, amount=2)

    nosetools.eq_(am0 + am2, foo.make_amount(2))
    nosetools.eq_(am2 - am1, foo.make_amount(1))
    nosetools.eq_(am2 * am2 * am2, foo.make_amount(8))
    nosetools.eq_(am2**(am2 + am1), foo.make_amount(8))
    nosetools.eq_(am2 / am2, am1)
    nosetools.eq_(am2 // am2, am1)
    nosetools.eq_(am2 % am2, am0)
    nosetools.eq_(-am2, -(am1 + am1))
    nosetools.eq_(abs(am0 - am2), am2)
    nosetools.eq_(+(am0 - am2), am2)
Esempio n. 9
0
def test_cannot_unrealize_without_lock():
    prep_test_ledger()
    ipo_amount = AssetAmount(amount=D(100), asset="USD")
    ipo_entry = DoubleEntry(src="shareholder_equity",
                            dest="equipment",
                            asset_amount=ipo_amount)
    with GeneralLedger.transaction_lock:
        GeneralLedger.realize(ipo_entry)

    # Transaction fell through in real life.  Let's revert.
    GeneralLedger.unrealize(ipo_entry)
Esempio n. 10
0
def test_entries_balance_to_zero():
    clear_all_definitions()
    Asset.define("USD")
    assets = Account.define(name="Assets", asset="USD")
    liabilities = Account.define(name="Liabilities", asset="USD")
    equity = Account.define(name="Equity", asset="USD")

    ipo_amount = AssetAmount(amount=D(100), asset="USD")
    ipo_entry = DoubleEntry(src=equity, dest=assets, asset_amount=ipo_amount)

    loan_amount = AssetAmount(amount=D(50), asset="USD")
    loan_entry = DoubleEntry(src=liabilities,
                             dest=assets,
                             asset_amount=loan_amount)

    with GeneralLedger.transaction_lock:
        GeneralLedger.realize(ipo_entry)
        GeneralLedger.realize(loan_entry)

    assert_true(GeneralLedger.balance()[Asset["USD"]].amount == D(0))
Esempio n. 11
0
def tried_to_roll_back_committed_transaction():
    prep_test_ledger()
    ipo_amount = AssetAmount(amount=D(100), asset="USD")
    ipo_entry = DoubleEntry(src="shareholder_equity",
                            dest="equipment",
                            asset_amount=ipo_amount)
    with GeneralLedger.transaction_lock:
        GeneralLedger.realize(ipo_entry)

    # oops, network failed.  Better roll it back.

    with GeneralLedger.transaction_lock:
        GeneralLedger.rollback(ipo_entry)
Esempio n. 12
0
def test_commit_and_rollback_transaction():
    prep_test_ledger()
    ipo_amount = AssetAmount(amount=D(100), asset="USD")
    ipo_entry = DoubleEntry(src="shareholder_equity",
                            dest="equipment",
                            asset_amount=ipo_amount)
    with GeneralLedger.transaction_lock:
        GeneralLedger.commit(ipo_entry)

    # Network failed.  Remove the committed amount to free it back up.

    with GeneralLedger.transaction_lock:
        GeneralLedger.rollback(ipo_entry)
Esempio n. 13
0
def test_missing_asset_set_key_for_balance():
    prep_test_assets()
    am = AssetAmount(asset=Asset.get("RON"), amount=1)
    ab = AssetBalance()
    ab["YOWZERS"] = am
Esempio n. 14
0
def test_asset_balance_keys_by_string():
    prep_test_assets()
    am = AssetAmount(asset=Asset.get("RON"), amount=1)
    ab = AssetBalance()
    ab["RON"] = am
    ab["RON"]
Esempio n. 15
0
def test_asset_balance_set():
    prep_test_assets()
    am = AssetAmount(asset=Asset.get("RON"), amount=1)
    ab = AssetBalance()
    ab[am.asset] = am
Esempio n. 16
0
def test_asset_amount_str_and_repr():
    prep_test_assets()
    am = AssetAmount(asset="EN", amount=200)
    logger.info("Found a {0!s} made by {0!r}".format(am))