def test103_trans_move(self): finac.asset_create('UAH') finac.asset_set_rate('UAH/USD', value=0.04) finac.account_create('move.test', 'usd', 'current', 'Test move acc') finac.account_create('move1.TEST', 'UAH', 'current', 'Test move acc2') finac.transaction_create('move.test', 100, 'for move test') self.assertEqual(finac.account_balance('move.test'), 100) target_ct = 80 target_dt = 1200 finac.transaction_move('move1.TEST', 'move.test', target_ct=target_ct, tag='go ahead', note='cross currency: target_ct') self.assertEqual(finac.account_balance('move.test'), target_ct) finac.transaction_move('move1.TEST', 'move.test', target_dt=target_dt, tag='ahead', note='cross currency: target_dt') self.assertEqual(finac.account_balance('move1.test'), target_dt) self.assertRaises(ValueError, finac.transaction_move, 'move1.TEST', 'move.test', target_dt=100) print() finac.ls('move.test') finac.ls('move1.test') print()
def test730_mv_btw_passive_crosscur(self): finac.account_create('pass.supplier', 'eur', tp='supplier') finac.account_create('pass.finagent', 'usd', tp='finagent') self.set_balance('pass.supplier', 100) self.set_balance('pass.finagent', 500) finac.mv(dt='pass.finagent', ct='pass.supplier', amount=10, xdt=False) self.assertEqual(finac.account_balance('pass.supplier'), 90) self.assertEqual(finac.account_balance('pass.finagent'), 511)
def test007_list_summary_and_passive(self): finac.core.config_set('base_asset', 'eur') finac.asset_set_rate('eur/usd', 1.11) self.assertEqual(finac.account_list_summary()['total'], 100) finac.account_create('supplier1', 'eur', tp='supplier') finac.account_create('taxes1', 'eur', tp='tax') finac.tr('supplier1', 10) finac.tr('taxes1', 10) self.assertEqual(finac.account_list_summary()['total'], 80) finac.ls(group_by='asset')
def test051_hack_overlimit(self): finac.account_create('TEST.HL', 'EUR', max_balance=100) t1 = finac.transaction_create('TEST.HL', 100, mark_completed=False) try: t2 = finac.transaction_create('TEST.HL', 100, mark_completed=False) finac.transaction_complete(t1) finac.transaction_complete(t2) raise RuntimeError('Overlimit hacked') except finac.OverlimitError: return
def test755_passive_mv_targets_from_active_minus(self): finac.account_create('active.sup', 'usd') finac.account_create('pass.sup', 'eur', tp='tax') self.set_balance('active.sup', -50) self.set_balance('pass.sup', 0) finac.mv(dt='pass.sup', ct='active.sup', target_ct=-60) self.assertEqual(finac.account_balance('pass.sup'), -9.09) self.assertEqual(finac.account_balance('active.sup'), -60) finac.mv(dt='pass.sup', ct='active.sup', target_dt=-20) self.assertEqual(finac.account_balance('pass.sup'), -20) self.assertEqual(finac.account_balance('active.sup'), -72)
def test050_hack_overdraft(self): finac.account_create('TEST.HO', 'EUR', max_overdraft=100) tid = finac.transaction_create('TEST.HO', -100, mark_completed=False) self.assertEqual(finac.account_balance('TEST.HO'), -100) try: finac.transaction_create('TEST.HO', -10, mark_completed=False) raise RuntimeError('Overdraft hacked') except finac.OverdraftError: pass finac.transaction_complete(tid) self.assertEqual(finac.account_balance('TEST.HO'), -100)
def test700_passive_prepare(self): sys.stdout.write('\n\n-----Starting passive block------\n\n') for a in finac.asset_list(): finac.asset_delete(a['asset']) finac.asset_create('usd') finac.asset_create('eur') finac.asset_set_rate('eur/usd', value=1.1) finac.account_create('active1', 'usd') finac.account_create('active2', 'eur') finac.account_create('passive1', 'usd', tp='finagent') finac.account_create('passive3', 'usd', tp='finagent') finac.account_create('passive2', 'eur', tp='finagent')
def test042_overdraft_and_delete(self): finac.account_create('TEST42.TEST', 'EUR', max_overdraft=100) finac.transaction_create('TEST42.TEST', 10) tid = finac.transaction_create('TEST42.TEST', -100, mark_completed=False) finac.transaction_delete(tid) tid = finac.transaction_create('TEST42.TEST', -100, mark_completed=False) finac.transaction_delete(tid) self.assertEqual(finac.account_balance('TEST42.TEST'), 10)
def test041_max_balance(self): finac.account_create('TEST5.TEST', 'EUR', max_balance=100) finac.account_create('TEST6.TEST', 'EUR', max_balance=100) finac.transaction_create('TEST5.TEST', 10) try: finac.transaction_create('TEST5.TEST', 101) raise RuntimeError('OverlimitError not raised') except finac.OverlimitError: self.assertEqual(finac.account_balance('TEST5.TEST'), 10) finac.transaction_create('TEST6.TEST', 100) try: finac.transaction_move('TEST6.TEST', 'TEST5.TEST', 10) raise RuntimeError('OverlimitError not raised') except finac.OverlimitError: self.assertEqual(finac.account_balance('TEST5.TEST'), 10) self.assertEqual(finac.account_balance('TEST6.TEST'), 100)
def test402_transaction_copy(self): finac.account_create('test.usd', 'usd') finac.account_create('test.eur', 'eur') finac.asset_set_rate('eur/usd', value=1.1) t = finac.transaction_create('test.usd', 100, tag='test', note='for move test') t1 = finac.transaction_move(dt='move.test', ct='test.usd', tag='copy 1', amount=10) t_cros = finac.transaction_move(dt='test.eur', ct='test.usd', amount=10) self.assertRaises(ValueError, finac.tc, transaction_ids=t_cros[1], amount=100) finac.tc(transaction_ids=t1, date='2019-11-15', amount=30) finac.tc(transaction_ids=[t, t_cros[1]])
def test070_test_targets_and_tags(self): finac.account_create('TT1', 'EUR', tp='credit') finac.account_create('TT2', 'EUR', tp='saving') finac.transaction_create('TT1', 1000) finac.transaction_create('TT2', 1000) self.assertEqual(finac.account_balance('TT1'), 1000) self.assertEqual(finac.account_balance('TT2'), 1000) finac.transaction_create('TT1', target=1500) finac.transaction_create('TT2', target=800) self.assertEqual(finac.account_balance('TT1'), 1500) self.assertEqual(finac.account_balance('TT2'), 800) finac.transaction_move('TT1', 'TT2', target_ct=700, tag='loans') self.assertEqual(finac.account_balance('TT1'), 1600) self.assertEqual(finac.account_balance('TT2'), 700) finac.transaction_move('TT2', 'TT1', target_dt=2000, tag='loans') self.assertEqual(finac.account_balance('TT1'), 300) self.assertEqual(finac.account_balance('TT2'), 2000) self.assertEqual( len(list(finac.account_statement('TT1', tag='lo;an"s'))), 2) print() finac.ls('TT2') print()
def test080_lazy_exchange(self): finac.account_create('eur1', 'eur') finac.account_create('usd1', 'usd') if not config.remote: finac.core.config_set('lazy_exchange', False) try: finac.transaction_move('usd1', 'eur1', 20) raise RuntimeError( 'Lazy exchange is off but asset mismatch not detected') except ValueError: pass finac.core.config_set('lazy_exchange', True) time.sleep(0.6) finac.asset_set_rate('EUR/USD', value=1.1) finac.transaction_move('usd1', 'eur1', 20, xdt=False) self.assertEqual(finac.account_balance('eur1'), -20) self.assertEqual(finac.account_balance('usd1'), 22) finac.transaction_move('usd1', 'eur1', 20) self.assertEqual(finac.account_balance('eur1'), -38.18) self.assertEqual(finac.account_balance('usd1'), 42) t1, t2 = finac.transaction_move('usd1', 'eur1', 20, rate=1.25) self.assertEqual(finac.account_balance('eur1'), -54.18) self.assertEqual(finac.account_balance('usd1'), 62) finac.transaction_delete(t1) self.assertEqual(finac.account_balance('eur1'), -38.18) self.assertEqual(finac.account_balance('usd1'), 42) t1, t2 = finac.transaction_move('usd1', 'eur1', 20, rate=1.25) self.assertEqual(finac.account_balance('eur1'), -54.18) self.assertEqual(finac.account_balance('usd1'), 62) finac.transaction_delete(t2) self.assertEqual(finac.account_balance('eur1'), -38.18) self.assertEqual(finac.account_balance('usd1'), 42)
def test903_archive_account(self): finac.account_create('testa1', 'USD') finac.account_create('testa2', 'USD') finac.account_create('testa3', 'USD') finac.account_create('testap1', 'USD', passive=True) finac.tr('testa1', 10000) finac.tr('testa2', 10000) finac.mv(dt='testa1', ct='testa2', amount=2500) finac.mv(dt='testa1', ct='testa2', amount=2500) finac.mv(dt='testa1', ct='testa3', amount=2500) finac.mv(dt='testa1', ct='testa3', amount=2500) finac.mv(dt='testa1', ct='testap1', amount=2500) finac.mv(dt='testa1', ct='testap1', amount=2500) d = time.time() finac.mv(dt='testa1', ct='testa2', amount=500) finac.mv(dt='testa1', ct='testa2', amount=500) finac.mv(dt='testa1', ct='testa3', amount=500) finac.mv(dt='testa1', ct='testa3', amount=500) finac.mv(dt='testa1', ct='testap1', amount=500) finac.mv(dt='testa1', ct='testap1', amount=500) def _test_balances(): self.assertEqual(finac.account_balance('testa1'), 28000) self.assertEqual(finac.account_balance('testa2'), 4000) self.assertEqual(finac.account_balance('testa3'), -6000) self.assertEqual(finac.account_balance('testap1'), 6000) self.assertEqual(len(list(finac.account_statement('testa1'))), 13) self.assertEqual(len(list(finac.account_statement('testa2'))), 5) self.assertEqual(len(list(finac.account_statement('testa3'))), 4) self.assertEqual(len(list(finac.account_statement('testap1'))), 4) _test_balances() for acc in ['testa1', 'testa2', 'testa3', 'testap1']: finac.archive_transactions(acc, due_date=d) _test_balances() self.assertEqual(len(list(finac.account_statement('testa1'))), 6) self.assertEqual(len(list(finac.account_statement('testa2'))), 2) self.assertEqual(len(list(finac.account_statement('testa3'))), 2) self.assertEqual(len(list(finac.account_statement('testap1'))), 2) finac.cleanup() finac.account_delete('testa1') finac.account_delete('testa2') finac.account_delete('testa3') finac.account_delete('testap1')
def test097_balance_range(self): finac.account_create('tr', 'eur', tp='cash') finac.transaction_create('tr', 1000, date='2019-01-05') finac.transaction_create('tr', 2000, date='2019-02-05') finac.transaction_create('tr', -500, date='2019-04-05') finac.transaction_create('tr', -200, date='2019-06-05') result.id4test099 = finac.transaction_create('tr', 800, date='2019-08-05') self.assertRaises(ValueError, finac.account_balance_range, account='tr', tp='cash', start='2019-01-05', end='2019-8-07', base='usd') t, dt = finac.account_balance_range(start='2019-01-05', account='tr', end='2019-8-07', return_timestamp=False) self.assertEqual(dt[-4], 2300) self.assertEqual(dt[-2], 3100) t1, dt1 = finac.account_balance_range(start='2019-01-05', tp='cash', end='2019-8-07', base='usd', return_timestamp=False) self.assertEqual(dt1[-4], 4140) self.assertEqual(dt1[-2], 5580) res = list( finac.exec_query( 'SELECT account_balance_range(' 'start="2019-01-05", ' 'tp="current|cash", end="2019-8-07", base="usd")')) self.assertEqual(res[-4]['balance'], 4140) self.assertEqual(res[-2]['balance'], 5580)
def test040_overdraft(self): # allow overdraft finac.account_create('TEST3.TEST', 'eur', 'current', 'Test account', max_overdraft=900) finac.transaction_create('TEST3.TEST', 100) finac.transaction_move('TEST2.TEST', 'TEST3.TEST', '1,000.00') self.assertEqual(finac.account_balance('TEST3.TEST'), -900) # forbid overdraft finac.account_create('TEST4.TEST', 'eur', 'current', 'Test account', max_overdraft=200) finac.transaction_create('TEST3.TEST', 1200) try: finac.transaction_move('TEST2.TEST', 'TEST3.TEST', 2000) raise RuntimeError('OverdraftError not raised') except finac.OverdraftError: self.assertEqual(finac.account_balance('TEST3.TEST'), 300)
def test902_custom_account_types(self): if config.remote: return finac.account_create('hrb1', 'USD', 'hr_bond') finac.account_create('lrb1', 'USD', 'lr_bond') finac.account_create('emission1', 'USD', 'ebond') finac.tr('hrb1', 5000) finac.tr('lrb1', 6000) finac.tr('emission1', 1000) self.assertEqual( finac.account_balance(tp=['hr_bond', 'lr_bond', 'ebond']), 10000)
if a.clear: print('Cleaning up...') # cleanup if a.finac_server: db = sa.create_engine(a.dbconn) else: db = finac.core.get_db() for tbl in ['transact', 'account', 'asset_rate']: db.execute('delete from {}'.format(tbl)) db.execute( """delete from asset where code != 'EUR' and code != 'USD'""") if not a.skip_accounts: print('Creating accounts...') # create accounts for x in tqdm(range(1, a.account_amount + 1), leave=True): finac.account_create(f'account-{x}', 'USD') # generate transactions print('Generating transactions...') from benchmark_tools import generate_transactions c = 0 for x in tqdm(range(1, a.account_amount + 1), leave=True): if a.workers > 1: futures.append( pool.submit(generate_transactions, x, a.transaction_amount, a.account_amount)) else: if not a.finac_server and a.commit_every > 1 and c == 0: db = finac.core.get_db() dbt = db.begin() generate_transactions(x, a.transaction_amount, a.account_amount)
def test752_passive_mv_taget_ct_from_active(self): finac.account_create('active.supplier', 'usd') self.set_balance('active.supplier', 50) finac.mv(dt='pass.supplier', ct='active.supplier', target_ct=40) self.assertEqual(finac.account_balance('pass.supplier'), 50.91) self.assertEqual(finac.account_balance('active.supplier'), 40)
def test085_apply(self): finac.account_create('xtest1', 'eur') finac.account_create('xtest2', 'eur') finac.transaction_apply('{}/transactions.yml'.format(dir_me)) self.assertEqual(finac.account_balance('xtest1'), 300) self.assertEqual(finac.account_balance('xtest2'), 200)
def test002_create_account(self): finac.account_create('test.test', 'eur', 'current', 'Test acc') finac.account_create('TEST2.TEST', 'eur', 'current', 'Test acc2')