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)
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)))
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)
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)
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)
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)
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)
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)
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)
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))
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)
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)
def test_missing_asset_set_key_for_balance(): prep_test_assets() am = AssetAmount(asset=Asset.get("RON"), amount=1) ab = AssetBalance() ab["YOWZERS"] = am
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"]
def test_asset_balance_set(): prep_test_assets() am = AssetAmount(asset=Asset.get("RON"), amount=1) ab = AssetBalance() ab[am.asset] = am
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))