Esempio n. 1
0
 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()
Esempio n. 2
0
 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)
Esempio n. 3
0
 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')
Esempio n. 4
0
 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
Esempio n. 5
0
 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)
Esempio n. 6
0
 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)
Esempio n. 7
0
 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')
Esempio n. 8
0
 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)
Esempio n. 9
0
 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)
Esempio n. 10
0
 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]])
Esempio n. 11
0
 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()
Esempio n. 12
0
    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)
Esempio n. 13
0
    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')
Esempio n. 14
0
 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)
Esempio n. 15
0
    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)
Esempio n. 16
0
 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)
Esempio n. 17
0
 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)
Esempio n. 18
0
 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)
Esempio n. 19
0
 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)
Esempio n. 20
0
 def test002_create_account(self):
     finac.account_create('test.test', 'eur', 'current', 'Test acc')
     finac.account_create('TEST2.TEST', 'eur', 'current', 'Test acc2')