usawa

Signed, immutable accounting.
Log | Files | Refs | Submodules | LICENSE

account.py (2491B)


      1 import logging
      2 import datetime
      3 import unittest
      4 import os
      5 
      6 from usawa import UnitIndex
      7 from usawa.account import AccountIndex, AccountType, AccountDisplay
      8 from usawa.error import AccountError
      9 
     10 logging.basicConfig(level=logging.DEBUG)
     11 logg = logging.getLogger()
     12 
     13 testdir = os.path.realpath(os.path.dirname(__file__))
     14 
     15 class TestAccount(unittest.TestCase):
     16 
     17     def setUp(self):
     18         self.uidx = UnitIndex('FOO')
     19         self.uidx.add('BAR')
     20 
     21     def test_account_lock(self):
     22         idx = AccountIndex(self.uidx)
     23         # missing account type
     24         with self.assertRaises(AttributeError):
     25             idx.add('bar/baz', sym='FOO')
     26         idx.add('liability/bar/baz', sym='FOO')
     27         idx.add('liability/bar/baz', sym='FOO')
     28         with self.assertRaises(AccountError):
     29             idx.add('asset/bar/baz-', sym='FOO')
     30         with self.assertRaises(AccountError):
     31             idx.add('asset/foo/bar', sym='BAZ')
     32         self.assertFalse(idx.check('BAR', AccountType.liability, 'foo/baz'))
     33         self.assertTrue(idx.check('FOO', AccountType.liability, 'bar/baz'))
     34 
     35 
     36     def test_account_list(self):
     37         idx = AccountIndex(self.uidx)
     38         idx.add('asset/bar/bar', sym='FOO')
     39         idx.add('liability/bar/baz', sym='FOO')
     40         idx.add('asset/foo/baz', sym='BAR')
     41         v = list(idx)
     42         self.assertEqual(len(v), 3)
     43 
     44 
     45     def test_account_filter(self):
     46         idx = AccountIndex(self.uidx)
     47         idx.add('asset/bar/bar', sym='FOO')
     48         idx.add('liability/bar/baz', sym='FOO')
     49         idx.add('asset/foo/baz', sym='BAR')
     50         idx.add('asset/xyzzy', sym='BAR')
     51         idx.set_filter(sym='FOO')
     52         v = list(idx)
     53         self.assertEqual(len(v), 2)
     54         idx.set_filter(sym='BAR')
     55         v = list(idx)
     56         self.assertEqual(len(v), 2)
     57         idx.set_filter(sym='FOO', typ=AccountType.liability)
     58         v = list(idx)
     59         self.assertEqual(len(v), 1)
     60         idx.set_filter(sym='BAR', typ=AccountType.asset)
     61         v = list(idx)
     62         self.assertEqual(len(v), 2)
     63 
     64 
     65     def test_account_display(self):
     66         idx = AccountIndex(self.uidx)
     67         idx.add('asset/bar/baz', sym='FOO')
     68         v = list(idx)
     69         self.assertEqual(v[0], 'FOO.asset/bar/baz')
     70         idx.set_filter(display=AccountDisplay.typ)
     71         v = list(idx)
     72         self.assertEqual(v[0], 'asset/bar/baz')
     73         idx.set_filter(display=AccountDisplay.path)
     74         v = list(idx)
     75         self.assertEqual(v[0], 'bar/baz')
     76 
     77 
     78 if __name__ == '__main__':
     79     unittest.main()