1 from unittest import TestCase
2 from bluechips.tests import *
3 from bluechips import model
4 from bluechips.model import meta
5 from bluechips.model.types import Currency
6 from decimal import Decimal
8 class TestSplitFixed(TestCase):
9 def test_simpleSplit(self):
11 Test simply splitting a $100 expenditure amongst 4 people
15 e = model.Expenditure(meta.Session.query(model.User).first(),
21 for s in meta.Session.query(model.Split).\
22 filter(model.Split.expenditure==e):
23 self.assertEqual(s.share, Currency("25.00"))
28 def test_uneven(self):
30 Test that expenditures can be split non-evenly
34 users = meta.Session.query(model.User).all()
36 e = model.Expenditure(users[0], Currency("100"))
39 split_dict = {users[0]: Decimal("20"),
40 users[1]: Decimal("80")}
42 amount_dict = {users[0]: Currency("20"),
43 users[1]: Currency("80")}
48 for s in meta.Session.query(model.Split):
49 self.assertEqual(s.share, amount_dict[s.user])
54 def test_unevenBadTotal(self):
56 Test that transactions get split up properly when the uneven
57 split shares don't add to 100%
61 users = meta.Session.query(model.User).all()
63 e = model.Expenditure(users[0], Currency("100.00"))
66 split_dict = {users[0]: Decimal(10),
67 users[1]: Decimal(15)}
69 amount_dict = {users[0]: Currency("40"),
70 users[1]: Currency("60")}
75 for s in meta.Session.query(model.Split):
76 self.assertEqual(s.share, amount_dict[s.user])
81 def test_negativeExpenditure(self):
83 Test that negative expenditures get split correctly
87 users = meta.Session.query(model.User).all()
89 e = model.Expenditure(users[0], Currency("100.00"))
92 # Force a split that will result in needing to distribute
94 split_dict = {users[0]: Decimal(1),
99 self.assertEqual(e.amount, sum(s.share for s in meta.Session.query(model.Split)))