]> asedeno.scripts.mit.edu Git - bluechips.git/blob - bluechips/tests/splits/test_fixed.py
Add another test for testing uneven splits
[bluechips.git] / bluechips / tests / splits / test_fixed.py
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
7
8 class TestSplitFixed(TestCase):
9     def test_simpleSplit(self):
10         """
11         Test simply splitting a $100 expenditure amongst 4 people
12         """
13         createUsers(4)
14         
15         e = model.Expenditure()
16         e.spender = meta.Session.query(model.User).first()
17         e.amount = Currency("100.00")
18         meta.Session.save(e)
19         e.even_split()
20         meta.Session.commit()
21         
22         for s in meta.Session.query(model.Split).\
23                 filter(model.Split.expenditure==e):
24             self.assertEqual(s.share, Currency("25.00"))
25         
26         deleteExpenditures()
27         deleteUsers()
28     
29     def test_uneven(self):
30         """
31         Test that expenditures can be split non-evenly
32         """
33         createUsers(2)
34         
35         users = meta.Session.query(model.User).all()
36         
37         e = model.Expenditure()
38         e.spender = users[0]
39         e.amount = Currency("100.00")
40         meta.Session.save(e)
41         
42         split_dict = {users[0]: Decimal("20"),
43                       users[1]: Decimal("80")}
44         
45         amount_dict = {users[0]: Currency("20"),
46                        users[1]: Currency("80")}
47         
48         e.split(split_dict)
49         meta.Session.commit()
50         
51         for s in meta.Session.query(model.Split):
52             self.assertEqual(s.share, amount_dict[s.user])
53         
54         deleteExpenditures()
55         deleteUsers()
56     
57     def test_unevenBadTotal(self):
58         """
59         Test that transactions get split up properly when the uneven
60         split shares don't add to 100%
61         """
62         createUsers(2)
63         
64         users = meta.Session.query(model.User).all()
65         
66         e = model.Expenditure()
67         e.spender = users[0]
68         e.amount = Currency("100.00")
69         meta.Session.save(e)
70         
71         split_dict = {users[0]: Decimal(10),
72                       users[1]: Decimal(15)}
73         
74         amount_dict = {users[0]: Currency("40"),
75                        users[1]: Currency("60")}
76         
77         e.split(split_dict)
78         meta.Session.commit()
79         
80         for s in meta.Session.query(model.Split):
81             self.assertEqual(s.share, amount_dict[s.user])
82         
83         deleteExpenditures()
84         deleteUsers()