balance.py (4120B)
1 import logging 2 import unittest 3 import datetime 4 import os 5 6 from usawa import EntryPart, Entry, UnitIndex 7 from usawa.balance import Balancer 8 9 logging.basicConfig(level=logging.DEBUG) 10 logg = logging.getLogger() 11 12 testdir = os.path.realpath(os.path.dirname(__file__)) 13 14 class TestBalancer(unittest.TestCase): 15 16 17 def setUp(self): 18 self.parent = bytes.fromhex('0cf9180a764aba863a67b6d72f0918bc131c6772642cb2dce5a34f0a702f9470ddc2bf125c12198b1995c233c34b4afd346c54a2334c350a948a51b6e8b4e6b6') 19 self.ref = '1bda7dfa-b8fd-400d-8b42-1d2861ad7f70' 20 self.uidx = UnitIndex('FOO') 21 self.uidx.add('BAR', 3) 22 self.description = "foo bar baz" 23 self.dtreg = datetime.datetime.now() 24 25 26 def test_balancer_parts_simple(self): 27 o = Balancer(self.uidx) 28 src = EntryPart('FOO.Income/baz', 1337, debit=True) 29 o.apply_part(src) 30 dst = EntryPart('FOO.Asset/foo', 1337) 31 o.apply_part(dst) 32 self.assertTrue(o.balanced()) 33 34 35 def test_balancer_parts_exchange(self): 36 o = Balancer(self.uidx) 37 self.uidx.set_rate('BAR', 230000000) 38 src = EntryPart('BAR.Income/baz', 420000, debit=True) 39 o.apply_part(src) 40 dst = EntryPart('FOO.Asset/foo', 9660) 41 o.apply_part(dst) 42 self.assertTrue(o.balanced()) 43 44 45 def test_balance_accumulate_simple(self): 46 o = Balancer(self.uidx) 47 src = EntryPart('FOO.Asset/baz', -1337, debit=True) 48 o.apply_part(src) 49 dst = EntryPart('FOO.Asset/foo', 1337) 50 o.apply_part(dst) 51 self.assertTrue(o.balanced()) 52 self.assertEqual(o.value(), 1337) 53 54 o = Balancer(self.uidx) 55 src = EntryPart('FOO.Liability/baz', 1337, debit=True) 56 o.apply_part(src) 57 dst = EntryPart('FOO.Asset/foo', 1337) 58 o.apply_part(dst) 59 self.assertTrue(o.balanced()) 60 self.assertEqual(o.value(), 1337) 61 62 o = Balancer(self.uidx) 63 src = EntryPart('FOO.Liability/baz', 1337, debit=True) 64 o.apply_part(src) 65 dst = EntryPart('FOO.Liability/foo', -1337) 66 o.apply_part(dst) 67 self.assertTrue(o.balanced()) 68 self.assertEqual(o.value(), 1337) 69 70 o = Balancer(self.uidx) 71 src = EntryPart('FOO.Asset/baz', -1337, debit=True) 72 o.apply_part(src) 73 dst = EntryPart('FOO.Liability/foo', -1337) 74 o.apply_part(dst) 75 self.assertTrue(o.balanced()) 76 self.assertEqual(o.value(), 1337) 77 78 79 def test_flow_accumulate_simple(self): 80 o = Balancer(self.uidx) 81 src = EntryPart('FOO.Asset/baz', -1337, debit=True) 82 o.apply_part(src) 83 dst = EntryPart('FOO.Expense/foo', 1337) 84 o.apply_part(dst) 85 self.assertTrue(o.balanced()) 86 self.assertEqual(o.value(), 1337) 87 88 o = Balancer(self.uidx) 89 src = EntryPart('FOO.Income/baz', 1337, debit=True) 90 o.apply_part(src) 91 dst = EntryPart('FOO.Asset/foo', 1337) 92 o.apply_part(dst) 93 self.assertTrue(o.balanced()) 94 self.assertEqual(o.value(), 1337) 95 96 o = Balancer(self.uidx) 97 src = EntryPart('FOO.Income/baz', 1337, debit=True) 98 o.apply_part(src) 99 dst = EntryPart('FOO.Expense/foo', 1337) 100 o.apply_part(dst) 101 self.assertTrue(o.balanced()) 102 self.assertEqual(o.value(), 1337) 103 104 o = Balancer(self.uidx) 105 src = EntryPart('FOO.Income/baz', 1337, debit=True) 106 o.apply_part(src) 107 dst = EntryPart('FOO.Liability/foo', -1337) 108 o.apply_part(dst) 109 self.assertTrue(o.balanced()) 110 self.assertEqual(o.value(), 1337) 111 112 113 def test_balance_running(self): 114 o = Balancer(self.uidx) 115 src = EntryPart('FOO.Liability/foo', 1337, debit=True) 116 o.apply_part(src) 117 self.assertEqual(o.balance(), -1337) 118 119 dst = EntryPart('FOO.Asset/bar', 42) 120 o.apply_part(dst) 121 self.assertEqual(o.balance(), -1295) 122 123 dst = EntryPart('FOO.Expense/baz', 1295) 124 o.apply_part(dst) 125 self.assertTrue(o.balanced()) 126 self.assertEqual(o.value(), 1337) 127 128 129 if __name__ == '__main__': 130 unittest.main()